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 = EventMachine::HttpRequest.new(URI::parse(env[:url].to_s), connection_config(env))        #   end

  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

    save_response(env, client.response_header.status, client.response) 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, %Q{407 "Proxy Authentication Required "}
  else
    raise Error::ConnectionFailed, err
  end
end