Class: Faraday::Adapter::HTTPX

Inherits:
Faraday::Adapter show all
Includes:
RequestMixin
Defined in:
lib/httpx/adapters/faraday.rb

Defined Under Namespace

Modules: OnDataPlugin, RequestMixin, RequestOptionsExtensions Classes: ParallelManager, Session

Constant Summary collapse

SSL_ERROR =

:nocov:

if defined?(Faraday::SSLError)
  Faraday::SSLError
else
  Faraday::Error::SSLError
end
CONNECTION_FAILED_ERROR =
if defined?(Faraday::ConnectionFailed)
  Faraday::ConnectionFailed
else
  Faraday::Error::ConnectionFailed
end

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ HTTPX

Returns a new instance of HTTPX.



203
204
205
206
# File 'lib/httpx/adapters/faraday.rb', line 203

def initialize(app)
  super(app)
  @session = Session.new
end

Class Method Details

.setup_parallel_managerObject



198
199
200
# File 'lib/httpx/adapters/faraday.rb', line 198

def setup_parallel_manager
  ParallelManager.new
end

Instance Method Details

#call(env) ⇒ Object



208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
# File 'lib/httpx/adapters/faraday.rb', line 208

def call(env)
  super
  if parallel?(env)
    handler = env[:parallel_manager].enqueue(env)
    handler.on_response do |response|
      save_response(env, response.status, response.body.to_s, response.headers, response.reason) do |response_headers|
        response_headers.merge!(response.headers)
      end
    end
    return handler
  end

  session = @session.with(options_from_env(env))
  session = session.plugin(:proxy).with(proxy: { uri: env.request.proxy }) if env.request.proxy
  session = session.plugin(OnDataPlugin) if env.request.stream_response?

  request = session.build_request(*build_request(env))

  request.response_on_data = env.request.on_data if env.request.stream_response?

  response = session.request(request)
  response.raise_for_status unless response.is_a?(::HTTPX::Response)
  save_response(env, response.status, response.body.to_s, response.headers, response.reason) do |response_headers|
    response_headers.merge!(response.headers)
  end
  @app.call(env)
rescue ::HTTPX::TLSError => e
  raise SSL_ERROR, e
rescue Errno::ECONNABORTED,
       Errno::ECONNREFUSED,
       Errno::ECONNRESET,
       Errno::EHOSTUNREACH,
       Errno::EINVAL,
       Errno::ENETUNREACH,
       Errno::EPIPE => e
  raise CONNECTION_FAILED_ERROR, e
end