Module: Html2rss::Test::EnhanceAudit
- Defined in:
- lib/html2rss/test/enhance_audit.rb
Overview
Probes list-card enhance value on cached listing HTML.
Sole owner of enhance_gains metrics and enhance-specific warn-only warnings.
Defined Under Namespace
Classes: AuditSlice, EnhanceGains
Class Method Summary collapse
- .compare(response:, selectors:, time_zone:) ⇒ Hash{Symbol => Object}?
-
.empty_gains ⇒ EnhanceGains
Zeroed gains for compare fallback.
-
.probe(response:, selectors:, time_zone:) ⇒ AuditSlice?
Nil when selectors are absent.
Class Method Details
.compare(response:, selectors:, time_zone:) ⇒ Hash{Symbol => Object}?
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/html2rss/test/enhance_audit.rb', line 69 def compare(response:, selectors:, time_zone:) # rubocop:disable Metrics/MethodLength -- enhance off/on stats + delta return nil unless selectors&.dig(:items, :selector) off = extraction_stats(response, selectors, time_zone, enhance: false) on = extraction_stats(response, selectors, time_zone, enhance: true) delta_gains = probe(response:, selectors:, time_zone:)&.enhance_gains || empty_gains { enhance_off: off, enhance_on: on, delta: { descriptions_gained: on[:descriptions_filled] - off[:descriptions_filled], keys_added: delta_gains.keys_added, no_op: delta_gains.no_op } } end |
.empty_gains ⇒ EnhanceGains
Returns zeroed gains for compare fallback.
89 90 91 92 93 94 95 96 |
# File 'lib/html2rss/test/enhance_audit.rb', line 89 def empty_gains EnhanceGains.new( items_probed: 0, keys_added: zero_keys_added, descriptions_added: 0, no_op: true ) end |
.probe(response:, selectors:, time_zone:) ⇒ AuditSlice?
Returns nil when selectors are absent.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/html2rss/test/enhance_audit.rb', line 31 def probe(response:, selectors:, time_zone:) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength -- per-item probe loop return nil unless selectors&.dig(:items, :selector) selector_engine = Selectors.new(response, selectors:, time_zone:) gains = { items_probed: 0, keys_added: zero_keys_added.dup, descriptions_added: 0, no_op: true } warnings = [] response.parsed_body.css(selector_engine.items_selector).each do |item| baseline = selector_engine.extract_article(item, response) enhanced = selector_engine.enhance_article_hash(baseline.dup, item, response.url) item_keys = keys_added(baseline, enhanced) merge_keys_added!(gains, item_keys) append_item_warnings!(warnings, item:, enhanced:, item_keys:) end finalize_gains!(gains) warnings << :enhance_no_op if gains.fetch(:no_op) AuditSlice.new( enhance_gains: EnhanceGains.new( items_probed: gains.fetch(:items_probed), keys_added: gains.fetch(:keys_added).freeze, descriptions_added: gains.fetch(:descriptions_added), no_op: gains.fetch(:no_op) ), warnings: warnings.freeze ) end |