From b6db439ea1337d9cd26831a6c597703ed0ce41d1 Mon Sep 17 00:00:00 2001 From: aditya-7562 Date: Thu, 17 Jul 2025 08:50:44 +0000 Subject: [PATCH] Fix(rxjs): Include index functions and improve scraper coverage --- lib/docs/filters/rxjs/entries.rb | 20 +++++++++++++++----- lib/docs/scrapers/rxjs.rb | 14 ++++++++------ 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/lib/docs/filters/rxjs/entries.rb b/lib/docs/filters/rxjs/entries.rb index afc4ce4aa1..313360db34 100644 --- a/lib/docs/filters/rxjs/entries.rb +++ b/lib/docs/filters/rxjs/entries.rb @@ -2,18 +2,28 @@ module Docs class Rxjs class EntriesFilter < Docs::EntriesFilter def get_name - title = at_css('h1') - name = title.nil? ? subpath.rpartition('/').last.titleize : title.content - name.prepend "#{$1}. " if subpath =~ /\-pt(\d+)/ - name += '()' unless at_css('.api-type-label.function').nil? + # Get function name from path if it's inside api/index/function + if subpath.start_with?('api/index/function/') + name = subpath.split('/').last.sub(/\.html$/, '').titleize + name += '()' + else + title = at_css('h1') + name = title.nil? ? subpath.rpartition('/').last.titleize : title.content + name.prepend "#{$1}. " if subpath =~ /\-pt(\d+)/ + name += '()' unless at_css('.api-type-label.function').nil? + end name end def get_type if slug.start_with?('guide') 'Guide' + elsif slug == 'api/index' + nil # Hide index page to avoid listing the full page in sidebar + elsif slug.start_with?('api/index/function/') + 'Top-level Functions' elsif slug.start_with?('api/') - slug.split('/').second + slug.split('/')[1].titleize else 'Miscellaneous' end diff --git a/lib/docs/scrapers/rxjs.rb b/lib/docs/scrapers/rxjs.rb index 83827f97ad..e1811ee565 100644 --- a/lib/docs/scrapers/rxjs.rb +++ b/lib/docs/scrapers/rxjs.rb @@ -16,7 +16,8 @@ class Rxjs < UrlScraper options[:follow_links] = false options[:only_patterns] = [/guide\//, /api\//] - options[:skip_patterns] = [/api\/([^\/]+)\.json/, /api\/index/] + options[:skip_patterns] = [] + options[:fix_urls_before_parse] = ->(url) do url.sub! %r{\A(\.\/)?guide/}, '/guide/' url.sub! %r{\Aapi/}, '/api/' @@ -44,8 +45,10 @@ def initial_urls Request.run "#{self.class.base_url}generated/navigation.json" do |response| data = JSON.parse(response.body) dig = ->(entry) do - initial_urls << url_for("generated/docs/#{entry['url']}.json") if entry['url'] && entry['url'] != 'api' - entry['children'].each(&dig) if entry['children'] + if entry['url'] && entry['url'] != 'api' + initial_urls << url_for("generated/docs/#{entry['url']}.json") + end + entry['children']&.each(&dig) end data['SideNav'].each(&dig) end @@ -55,14 +58,13 @@ def initial_urls dig = ->(entry) do initial_urls << url_for("generated/docs/#{entry['path']}.json") if entry['path'] initial_urls << url_for("generated/docs/api/#{entry['name']}.json") if entry['name'] && !entry['path'] - entry['items'].each(&dig) if entry['items'] + entry['items']&.each(&dig) end data.each(&dig) end initial_urls.select do |url| - options[:only_patterns].any? { |pattern| url =~ pattern } && - options[:skip_patterns].none? { |pattern| url =~ pattern } + options[:only_patterns].any? { |pattern| url =~ pattern } end end