Class: MLB::RedirectHandler
- Inherits:
-
Object
- Object
- MLB::RedirectHandler
- Defined in:
- lib/mlb/redirect_handler.rb
Overview
Handles HTTP redirects for API requests
Constant Summary collapse
- DEFAULT_MAX_REDIRECTS =
Default maximum number of redirects to follow
10- PRESERVE_METHOD_CODES =
HTTP redirect codes that preserve the original method and body
[307, 308].freeze
- LOCATION_HEADER =
HTTP header for redirect location
"location".freeze
Instance Attribute Summary collapse
-
#connection ⇒ Connection
readonly
Returns the connection instance.
-
#max_redirects ⇒ Integer
Returns the maximum number of redirects to follow.
-
#request_builder ⇒ RequestBuilder
readonly
Returns the request builder instance.
Instance Method Summary collapse
-
#handle(response:, request:, base_url:, redirect_count: 0) ⇒ Net::HTTPResponse
Handles HTTP redirects.
-
#initialize(connection: Connection.new, request_builder: RequestBuilder.new, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ RedirectHandler
constructor
Initializes a new RedirectHandler instance.
Constructor Details
#initialize(connection: Connection.new, request_builder: RequestBuilder.new, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ RedirectHandler
Initializes a new RedirectHandler instance
57 58 59 60 61 62 |
# File 'lib/mlb/redirect_handler.rb', line 57 def initialize(connection: Connection.new, request_builder: RequestBuilder.new, max_redirects: DEFAULT_MAX_REDIRECTS) @connection = connection @request_builder = request_builder @max_redirects = max_redirects end |
Instance Attribute Details
#connection ⇒ Connection (readonly)
Returns the connection instance
39 40 41 |
# File 'lib/mlb/redirect_handler.rb', line 39 def connection @connection end |
#max_redirects ⇒ Integer
Returns the maximum number of redirects to follow
23 24 25 |
# File 'lib/mlb/redirect_handler.rb', line 23 def max_redirects @max_redirects end |
#request_builder ⇒ RequestBuilder (readonly)
Returns the request builder instance
47 48 49 |
# File 'lib/mlb/redirect_handler.rb', line 47 def request_builder @request_builder end |
Instance Method Details
#handle(response:, request:, base_url:, redirect_count: 0) ⇒ Net::HTTPResponse
Handles HTTP redirects
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/mlb/redirect_handler.rb', line 75 def handle(response:, request:, base_url:, redirect_count: 0) return response unless response.is_a?(Net::HTTPRedirection) raise TooManyRedirects, "Too many redirects" if redirect_count > max_redirects new_uri = build_redirect_uri(response, base_url) new_request = build_redirect_request(request, new_uri, Integer(response.code)) new_response = connection.perform(request: new_request) handle(response: new_response, request: new_request, base_url:, redirect_count: redirect_count + 1) end |