class Faraday::Adapter::EMSynchrony

Public Class Methods

setup_parallel_manager(options = {}) click to toggle source
# File lib/faraday/adapter/em_synchrony.rb, line 16
def self.setup_parallel_manager(options = {})
  ParallelManager.new
end

Public Instance Methods

call(env) click to toggle source
Calls superclass method Faraday::Adapter#call
# File lib/faraday/adapter/em_synchrony.rb, line 20
def call(env)
  super
  request = create_request(env)

  http_method = env[:method].to_s.downcase.to_sym

  # Queue requests for parallel execution.
  if env[:parallel_manager]
    env[:parallel_manager].add(request, http_method, request_config(env)) do |resp|
      save_response(env, resp.response_header.status, resp.response) do |resp_headers|
        resp.response_header.each do |name, value|
          resp_headers[name.to_sym] = value
        end
      end

      # Finalize the response object with values from `env`.
      env[:response].finish(env)
    end

  # Execute single request.
  else
    client = nil
    block = lambda { request.send(http_method, request_config(env)) }

    if !EM.reactor_running?
      EM.run do
        Fiber.new {
          client = block.call
          EM.stop
        }.resume
      end
    else
      client = block.call
    end

    raise client.error if client.error

    status = client.response_header.status
    reason = client.response_header.http_reason
    save_response(env, status, client.response, nil, reason) do |resp_headers|
      client.response_header.each do |name, value|
        resp_headers[name.to_sym] = value
      end
    end
  end

  @app.call env
rescue Errno::ECONNREFUSED
  raise Error::ConnectionFailed, $!
rescue EventMachine::Connectify::CONNECTError => err
  if err.message.include?("Proxy Authentication Required")
    raise Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
  else
    raise Error::ConnectionFailed, err
  end
rescue Errno::ETIMEDOUT => err
  raise Error::TimeoutError, err
rescue RuntimeError => err
  if err.message == "connection closed by server"
    raise Error::ConnectionFailed, err
  else
    raise
  end
rescue => err
  if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
    raise Faraday::SSLError, err
  else
    raise
  end
end
create_request(env) click to toggle source
# File lib/faraday/adapter/em_synchrony.rb, line 91
def create_request(env)
  EventMachine::HttpRequest.new(Utils::URI(env[:url].to_s), connection_config(env).merge(@connection_options))
end