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.
44 45 46 47 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 44 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.
50 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 50 def challenge_block? = error_category == 'challenge_block' |
#challenge_message ⇒ String
Returns normalized challenge error message.
58 59 60 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 58 def error || 'Botasaurus challenge block detected.' end |
#final_url ⇒ String?
Returns final URL reported by upstream.
95 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 95 def final_url = payload['final_url'] |
#headers ⇒ Hash{String => String}
Returns normalized response headers.
81 82 83 84 85 86 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 81 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.
73 74 75 76 77 78 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 73 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).
89 90 91 92 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 89 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.
53 54 55 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 53 def upstream_failure? status != 200 || end |
#upstream_failure_message ⇒ String
Returns actionable upstream failure summary.
63 64 65 66 67 68 69 |
# File 'lib/html2rss/request_service/botasaurus_contract.rb', line 63 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 |