Class: Faraday::Adapter::Typhoeus

### Home Classes Methods

### In Files

- lib/faraday/adapter/typhoeus.rb

### Parent

Faraday::Adapter

### Methods

- ::setup_parallel_manager
- #call
- #configure_proxy
- #configure_socket
- #configure_ssl
- #configure_timeout
- #parallel?
- #perform_request
- #read_body
- #request
- #request_options

### Class/Module Index

Quicksearch

- Faraday
- Faraday::Adapter
- Faraday::Adapter::EMHttp
- Faraday::Adapter::EMHttp::Manager
- Faraday::Adapter::EMHttp::Options
- Faraday::Adapter::EMSynchrony
- Faraday::Adapter::EMSynchrony::ParallelManager
- Faraday::Adapter::Excon
- Faraday::Adapter::HTTPClient
- Faraday::Adapter::NetHttp
- Faraday::Adapter::NetHttpPersistent
- Faraday::Adapter::Parallelism
- Faraday::Adapter::Patron
- Faraday::Adapter::Rack
- Faraday::Adapter::Test
- Faraday::Adapter::Test::Stub
- Faraday::Adapter::Test::Stubs
- Faraday::Adapter::Test::Stubs::NotFound
- Faraday::Adapter::Typhoeus
- Faraday::AutoloadHelper
- Faraday::ClientError
- Faraday::CompositeReadIO
- Faraday::Connection
- Faraday::ConnectionFailed
- Faraday::ConnectionOptions
- Faraday::Env
- Faraday::Error
- Faraday::FlatParamsEncoder
- Faraday::Middleware
- Faraday::MiddlewareRegistry
- Faraday::MissingDependency
- Faraday::NestedParamsEncoder
- Faraday::Options
- Faraday::ParsingError
- Faraday::ProxyOptions
- Faraday::RackBuilder
- Faraday::RackBuilder::Handler
- Faraday::RackBuilder::StackLocked
- Faraday::Request
- Faraday::Request::Authorization
- Faraday::Request::BasicAuthentication
- Faraday::Request::Instrumentation
- Faraday::Request::Instrumentation::Options
- Faraday::Request::Multipart
- Faraday::Request::Retry
- Faraday::Request::Retry::Options
- Faraday::Request::TokenAuthentication
- Faraday::Request::UrlEncoded
- Faraday::RequestOptions
- Faraday::ResourceNotFound
- Faraday::Response
- Faraday::Response::Logger
- Faraday::Response::Middleware
- Faraday::Response::RaiseError
- Faraday::SSLError
- Faraday::SSLOptions
- Faraday::TimeoutError
- Faraday::Utils
- Faraday::Utils::Headers
- Faraday::Utils::ParamsHash
- EmHttpSslPatch
- Object

No matching classes.

# Faraday::Adapter::Typhoeus

### Public Class Methods

setup_parallel_manager(options = {}) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 6
    def self.setup_parallel_manager(options = {})
      options.empty? ? ::Typhoeus::Hydra.hydra : ::Typhoeus::Hydra.new(options)
    end

### Public Instance Methods

call(env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 12
    def call(env)
      super
      perform_request env
      @app.call env
    end

configure_proxy(req, env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 90
    def configure_proxy(req, env)
      proxy = request_options(env)[:proxy]
      return unless proxy

      req.proxy = "#{proxy[:uri].host}:#{proxy[:uri].port}"

      if proxy[:user] && proxy[:password]
        req.proxy_username = proxy[:user]
        req.proxy_password = proxy[:password]
      end
    end

configure_socket(req, env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 108
    def configure_socket(req, env)
      if bind = request_options(env)[:bind]
        req.interface = bind[:host]
      end
    end

configure_ssl(req, env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 80
    def configure_ssl(req, env)
      ssl = env[:ssl]

      req.ssl_version = ssl[:version]          if ssl[:version]
      req.ssl_cert    = ssl[:client_cert] if ssl[:client_cert]
      req.ssl_key     = ssl[:client_key]  if ssl[:client_key]
      req.ssl_cacert  = ssl[:ca_file]          if ssl[:ca_file]
      req.ssl_capath  = ssl[:ca_path]          if ssl[:ca_path]
    end

configure_timeout(req, env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 102
    def configure_timeout(req, env)
      env_req = request_options(env)
      req.timeout = req.connect_timeout = (env_req[:timeout] * 1000) if env_req[:timeout]
      req.connect_timeout = (env_req[:open_timeout] * 1000)          if env_req[:open_timeout]
    end

parallel?(env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 118
    def parallel?(env)
      !!env[:parallel_manager]
    end

perform_request(env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 18
    def perform_request(env)
      read_body env

      hydra = env[:parallel_manager] || self.class.setup_parallel_manager
      hydra.queue request(env)
      hydra.run unless parallel?(env)
    rescue Errno::ECONNREFUSED
      raise Error::ConnectionFailed, $!
    end

read_body(env) click to toggle source

TODO: support streaming requests

    # File lib/faraday/adapter/typhoeus.rb, line 29
    def read_body(env)
      env[:body] = env[:body].read if env[:body].respond_to? :read
    end

request(env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 33
    def request(env)
      method = env[:method]
      # For some reason, prevents Typhoeus from using "100-continue".
      # We want this because Webrick 1.3.1 can't seem to handle it w/ PUT.
      method = method.to_s.upcase if method == :put

      req = ::Typhoeus::Request.new env[:url].to_s,
        :method  => method,
        :body    => env[:body],
        :headers => env[:request_headers],
        :disable_ssl_peer_verification => (env[:ssl] && env[:ssl].disable?)

      configure_ssl     req, env
      configure_proxy   req, env
      configure_timeout req, env
      configure_socket  req, env

      req.on_complete do |resp|
        if resp.timed_out?
          if parallel?(env)
            # TODO: error callback in async mode
          else
            raise Faraday::Error::TimeoutError, "request timed out"
          end
        end

        case resp.curl_return_code
        when 0
          # everything OK
        when 7
          raise Error::ConnectionFailed, resp.curl_error_message
        when 60
          raise Faraday::SSLError, resp.curl_error_message
        else
          raise Error::ClientError, resp.curl_error_message
        end

        save_response(env, resp.code, resp.body) do |response_headers|
          response_headers.parse resp.headers
        end
        # in async mode, :response is initialized at this point
        env[:response].finish(env) if parallel?(env)
      end

      req
    end

request_options(env) click to toggle source

    # File lib/faraday/adapter/typhoeus.rb, line 114
    def request_options(env)
      env[:request]
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.