Class: Exa::Internal::Transport::AsyncRequester
- Inherits:
-
Object
- Object
- Exa::Internal::Transport::AsyncRequester
- Defined in:
- lib/exa/internal/transport/async_requester.rb
Defined Under Namespace
Classes: ResponseAdapter
Instance Attribute Summary collapse
-
#internet ⇒ Object
readonly
Returns the value of attribute internet.
Instance Method Summary collapse
- #close ⇒ Object
- #execute(request) ⇒ Object
-
#initialize(internet: nil) ⇒ AsyncRequester
constructor
A new instance of AsyncRequester.
Constructor Details
#initialize(internet: nil) ⇒ AsyncRequester
42 43 44 |
# File 'lib/exa/internal/transport/async_requester.rb', line 42 def initialize(internet: nil) @internet = internet || Async::HTTP::Internet.new end |
Instance Attribute Details
#internet ⇒ Object (readonly)
Returns the value of attribute internet.
40 41 42 |
# File 'lib/exa/internal/transport/async_requester.rb', line 40 def internet @internet end |
Instance Method Details
#close ⇒ Object
76 77 78 |
# File 'lib/exa/internal/transport/async_requester.rb', line 76 def close internet.close end |
#execute(request) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/exa/internal/transport/async_requester.rb', line 46 def execute(request) task = Async::Task.current? unless task raise Exa::Errors::ConfigurationError, "AsyncRequester must run inside an Async scheduler (wrap calls in `Async do ... end`)." end deadline = request.fetch(:deadline) response = with_timeout(deadline, request[:url]) do internet.call( request.fetch(:method).to_s.upcase, request.fetch(:url).to_s, request.fetch(:headers), request[:body] ) end adapter = ResponseAdapter.new(response) body_enum = build_body_enum(response: response, deadline: deadline, url: request.fetch(:url).to_s) [Integer(response.status), adapter, body_enum] rescue Async::TimeoutError raise Exa::Errors::APITimeoutError.new("Request timed out", url: request[:url]) rescue Exa::Errors::APIError, Exa::Errors::ConfigurationError raise rescue StandardError => e raise Exa::Errors::APIConnectionError.new(e., url: request[:url]) end |