Sha256: 29122dab087e5ea4d390458b5353025fa490d095f796b57e4918c2f4dcd5a9a1

Contents?: true

Size: 1.63 KB

Versions: 3

Compression:

Stored size: 1.63 KB

Contents

module Faraday
  module Adapter
    module Typhoeus
      extend Faraday::Connection::Options

      begin
        require 'typhoeus'

        def in_parallel?
          !!@parallel_manager
        end
        
        def in_parallel(options = {})
          setup_parallel_manager(options)
          yield
          run_parallel_requests
        end
        
        def setup_parallel_manager(options = {})
          @parallel_manager ||= ::Typhoeus::Hydra.new(options)
        end
        
        def run_parallel_requests
          @parallel_manager.run
          @parallel_manager = nil
        end
        
        def _get(uri, request_headers)
          response_class.new do |resp|
            is_async = in_parallel?
            setup_parallel_manager
            req      = ::Typhoeus::Request.new(uri.to_s, :headers => request_headers, :method => :get)
            req.on_complete do |response|
              resp.process!(response.body)
              resp.headers = parse_response_headers(response.headers)
            end
            @parallel_manager.queue(req)
            if !is_async then run_parallel_requests end
          end
        rescue Errno::ECONNREFUSED
          raise Faraday::Error::ConnectionFailed, "connection refused"
        end

        def parse_response_headers(header_string)
          Hash[*header_string.split(/\r\n/).
            tap  { |a|      a.shift           }. # drop the HTTP status line
            map! { |h|      h.split(/:\s+/,2) }. # split key and value
            map! { |(k, v)| [k.downcase, v]   }.flatten!]
        end
      rescue LoadError => e
        self.load_error = e
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
faraday-0.1.0 lib/faraday/adapter/typhoeus.rb
faraday-0.0.2 lib/faraday/adapter/typhoeus.rb
faraday-0.0.1 lib/faraday/adapter/typhoeus.rb