Class: Tasker::Orchestration::RetryHeaderParser

Inherits:
Object
  • Object
show all
Defined in:
lib/tasker/orchestration/retry_header_parser.rb

Overview

RetryHeaderParser handles parsing and validation of HTTP Retry-After headers

This component provides focused responsibility for parsing Retry-After headers according to HTTP specification, handling both seconds-based and date-based formats.

Instance Method Summary collapse

Instance Method Details

#parse_retry_after(retry_after) ⇒ Integer

Parse a Retry-After header value into seconds

The Retry-After header can contain either:

  • An integer representing seconds (e.g., "120")
  • An HTTP date (e.g., "Wed, 21 Oct 2015 07:28:00 GMT")

Parameters:

  • retry_after (String)

    The Retry-After header value

Returns:

  • (Integer)

    Number of seconds to wait before retrying

Raises:

  • (Faraday::Error)

    If the header value cannot be parsed



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/tasker/orchestration/retry_header_parser.rb', line 19

def parse_retry_after(retry_after)
  return 0 if retry_after.nil? || retry_after.strip.empty?

  # Handle seconds-based format (just digits)
  if retry_after.match?(/^\d+$/)
    seconds = retry_after.to_i
    validate_retry_seconds(seconds)
    return seconds
  end

  # Handle HTTP date format
  parse_http_date_retry_after(retry_after)
rescue StandardError => e
  Rails.logger.error(
    "RetryHeaderParser: Failed to parse Retry-After header '#{retry_after}': #{e.message}"
  )
  raise Faraday::Error, "Failed to parse Retry-After header: #{e.message}"
end