Class: Html2rss::PageRecon
- Inherits:
-
Object
- Object
- Html2rss::PageRecon
- Defined in:
- lib/html2rss/page_recon.rb
Overview
Shared page recon for MCP Inspect and FeedResolution probes.
Owns surface class, native feed hints, segment stats, and a cheap AutoSource article count — not request strategy selection or MCP next-step policy.
Defined Under Namespace
Classes: Assessment, Result
Class Method Summary collapse
-
.assess(response:, url:) ⇒ Assessment
Cheap page assessment for policy gates and probe scoring (fixed AutoSource limit).
- .call(response:, url:, strategy: nil) ⇒ Result
- .discover_segments(sst, url) ⇒ Array
-
.surface_category_for(response:, url:) ⇒ Symbol
Surface class only — no AutoSource extract (for empty-extract error labels).
Instance Method Summary collapse
- #assess ⇒ Assessment
- #call ⇒ Result
-
#initialize(response:, url:) ⇒ PageRecon
constructor
A new instance of PageRecon.
- #surface_category_for ⇒ Symbol
Constructor Details
#initialize(response:, url:) ⇒ PageRecon
Returns a new instance of PageRecon.
110 111 112 113 |
# File 'lib/html2rss/page_recon.rb', line 110 def initialize(response:, url:) @response = response @url = url end |
Class Method Details
.assess(response:, url:) ⇒ Assessment
Cheap page assessment for policy gates and probe scoring (fixed AutoSource limit).
82 83 84 |
# File 'lib/html2rss/page_recon.rb', line 82 def self.assess(response:, url:) new(response:, url:).assess end |
.call(response:, url:, strategy: nil) ⇒ Result
72 73 74 |
# File 'lib/html2rss/page_recon.rb', line 72 def self.call(response:, url:, strategy: nil) # rubocop:disable Lint/UnusedMethodArgument new(response:, url:).call end |
.discover_segments(sst, url) ⇒ Array
100 101 102 103 104 105 |
# File 'lib/html2rss/page_recon.rb', line 100 def self.discover_segments(sst, url) link_resolver = Scoring::LinkResolver.new(url) AutoSource::Segmenter.call(sst, base_url: url, strategy: :list, link_resolver:) rescue StandardError [] end |
.surface_category_for(response:, url:) ⇒ Symbol
Surface class only — no AutoSource extract (for empty-extract error labels).
92 93 94 |
# File 'lib/html2rss/page_recon.rb', line 92 def self.surface_category_for(response:, url:) new(response:, url:).surface_category_for end |
Instance Method Details
#assess ⇒ Assessment
117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/html2rss/page_recon.rb', line 117 def assess return feed_assessment if response.feed_response? parsed = html_parsed_body articles_count, admission_drops = cheap_articles Assessment.new( surface_category: surface_category(parsed), articles_count:, admission_drops:, html_response: true ) end |
#call ⇒ Result
140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File 'lib/html2rss/page_recon.rb', line 140 def call # rubocop:disable Metrics/AbcSize, Metrics/MethodLength -- assemble recon Result requested = Url.from_absolute(url) final = response.url parsed = html_parsed_body assessment = assess sst_payload, segment_stats = sst_payload_and_segments(requested) Result.new( requested_url: requested.to_s, final_url: final.to_s, status: response.status, scheme_downgrade: scheme_downgrade?(requested, final), alternate_feeds: alternate_feeds_from(parsed), surface_category: assessment.surface_category, articles_count: assessment.articles_count, admission_drops: assessment.admission_drops, segment_stats:, html_response: response.html_response?, content_type: response.content_type, blocked_surface: blocked_surface_key, sst: sst_payload ) end |
#surface_category_for ⇒ Symbol
132 133 134 135 136 |
# File 'lib/html2rss/page_recon.rb', line 132 def surface_category_for return :unsupported_surface if response.feed_response? surface_category(html_parsed_body) end |