Class: Html2rss::RequestService::BotasaurusContract::ParsedResponse
- Inherits:
-
Object
- Object
- Html2rss::RequestService::BotasaurusContract::ParsedResponse
- Defined in:
- lib/html2rss/request_service/botasaurus_contract.rb
Overview
Parsed Botasaurus response wrapper.
Constant Summary collapse
- DEFAULT_HEADERS =
Fallback headers when upstream omits response headers.
{ 'content-type' => 'text/html' }.freeze
Instance Method Summary collapse
-
#challenge_block? ⇒ Boolean
True when upstream classified request as challenge blocked.
-
#challenge_message ⇒ String
Normalized challenge error message.
-
#final_url ⇒ String?
Final URL reported by upstream.
-
#headers ⇒ Hash{String => String}
Normalized response headers.
-
#html ⇒ String
Rendered HTML body from Botasaurus.
-
#initialize(payload:, transport_status:) ⇒ ParsedResponse
constructor
A new instance of ParsedResponse.
-
#status ⇒ Integer
Resolved status code (payload status_code or transport status).
-
#transport_meta ⇒ Hash{String => Object}
Allowlisted upstream telemetry (frozen).
-
#upstream_failure? ⇒ Boolean
True when upstream returned non-200 or an error payload.
-
#upstream_failure_message ⇒ String
Actionable upstream failure summary.
Constructor Details
#initialize(payload:, transport_status:) ⇒ ParsedResponse
Returns a new instance of ParsedResponse.
51 52 53 54 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 51 def initialize(payload:, transport_status:) @payload = payload @transport_status = transport_status end |
Instance Method Details
#challenge_block? ⇒ Boolean
Returns true when upstream classified request as challenge blocked.
57 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 57 def challenge_block? = error_category == 'challenge_block' |
#challenge_message ⇒ String
Returns normalized challenge error message.
65 66 67 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 65 def error || 'Botasaurus challenge block detected.' end |
#final_url ⇒ String?
Returns final URL reported by upstream.
102 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 102 def final_url = payload['final_url'] |
#headers ⇒ Hash{String => String}
Returns normalized response headers.
88 89 90 91 92 93 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 88 def headers raw_headers = payload['headers'] return DEFAULT_HEADERS.dup unless raw_headers.is_a?(Hash) && raw_headers.any? raw_headers.to_h { |key, value| [key.to_s, value.to_s] } end |
#html ⇒ String
Returns rendered HTML body from Botasaurus.
80 81 82 83 84 85 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 80 def html value = payload['html'] raise BotasaurusConnectionFailed, "Botasaurus response missing required 'html' field" if value.nil? value.to_s end |
#status ⇒ Integer
Returns resolved status code (payload status_code or transport status).
96 97 98 99 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 96 def status status_code = payload['status_code'] status_code.is_a?(Integer) ? status_code : transport_status end |
#transport_meta ⇒ Hash{String => Object}
Returns allowlisted upstream telemetry (frozen).
105 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 105 def = payload.slice(*META_KEYS).compact.freeze |
#upstream_failure? ⇒ Boolean
Returns true when upstream returned non-200 or an error payload.
60 61 62 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 60 def upstream_failure? status != 200 || end |
#upstream_failure_message ⇒ String
Returns actionable upstream failure summary.
70 71 72 73 74 75 76 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 70 def details = ["status=#{status}"] details << "error_category=#{error_category}" if error_category details << "error=#{error}" if error details << "request_id=#{request_id}" if request_id "Botasaurus scrape failed (#{details.join(', ')})." end |