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).
-
#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.
40 41 42 43 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 40 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.
46 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 46 def challenge_block? = error_category == 'challenge_block' |
#challenge_message ⇒ String
Returns normalized challenge error message.
54 55 56 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 54 def error || 'Botasaurus challenge block detected.' end |
#final_url ⇒ String?
Returns final URL reported by upstream.
91 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 91 def final_url = payload['final_url'] |
#headers ⇒ Hash{String => String}
Returns normalized response headers.
77 78 79 80 81 82 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 77 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.
69 70 71 72 73 74 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 69 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).
85 86 87 88 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 85 def status status_code = payload['status_code'] status_code.is_a?(Integer) ? status_code : transport_status end |
#upstream_failure? ⇒ Boolean
Returns true when upstream returned non-200 or an error payload.
49 50 51 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 49 def upstream_failure? status != 200 || end |
#upstream_failure_message ⇒ String
Returns actionable upstream failure summary.
59 60 61 62 63 64 65 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 59 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 |