Class: X::RedirectHandler
- Inherits:
-
Object
- Object
- X::RedirectHandler
- Defined in:
- lib/x/redirect_handler.rb
Overview
Handles HTTP redirects for API requests
Constant Summary collapse
- DEFAULT_MAX_REDIRECTS =
Default maximum number of redirects to follow
10
Instance Attribute Summary collapse
-
#connection ⇒ Connection
readonly
The connection for making requests.
-
#max_redirects ⇒ Integer
The maximum number of redirects to follow.
-
#request_builder ⇒ RequestBuilder
readonly
The request builder for creating requests.
Instance Method Summary collapse
-
#handle(response:, request:, base_url:, authenticator: Authenticator.new, redirect_count: 0) ⇒ Net::HTTPResponse
Handle redirects for an HTTP response.
-
#initialize(connection: Connection.new, request_builder: RequestBuilder.new, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ RedirectHandler
constructor
Initialize a new RedirectHandler.
Constructor Details
#initialize(connection: Connection.new, request_builder: RequestBuilder.new, max_redirects: DEFAULT_MAX_REDIRECTS) ⇒ RedirectHandler
Initialize a new RedirectHandler
45 46 47 48 49 50 |
# File 'lib/x/redirect_handler.rb', line 45 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)
The connection for making requests
27 28 29 |
# File 'lib/x/redirect_handler.rb', line 27 def connection @connection end |
#max_redirects ⇒ Integer
The maximum number of redirects to follow
20 21 22 |
# File 'lib/x/redirect_handler.rb', line 20 def max_redirects @max_redirects end |
#request_builder ⇒ RequestBuilder (readonly)
The request builder for creating requests
34 35 36 |
# File 'lib/x/redirect_handler.rb', line 34 def request_builder @request_builder end |
Instance Method Details
#handle(response:, request:, base_url:, authenticator: Authenticator.new, redirect_count: 0) ⇒ Net::HTTPResponse
Handle redirects for an HTTP response
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/x/redirect_handler.rb', line 64 def handle(response:, request:, base_url:, authenticator: Authenticator.new, redirect_count: 0) if response.is_a?(Net::HTTPRedirection) raise TooManyRedirects, "Too many redirects" if redirect_count > max_redirects new_uri = build_new_uri(response, base_url) new_request = build_request(request, new_uri, Integer(response.code), authenticator) new_response = connection.perform(request: new_request) handle(response: new_response, request: new_request, base_url:, redirect_count: redirect_count + 1) else response end end |