Class: Faraday::Adapter::Typhoeus
  
  
  
  Constant Summary
  
  
  CONTENT_LENGTH
  Instance Attribute Summary
  
  Attributes included from Parallelism
  #supports_parallel
  
    
      Class Method Summary
      collapse
    
    
  
    
      Instance Method Summary
      collapse
    
    
  
  
  
  
  
  
  
  
  
  
  #save_response
  
  
  
  
  
  
  
  
  
  #inherited, #supports_parallel?
  
  
  
  
  
  
  
  
  
  #all_loaded_constants, #autoload_all, #load_autoloaded_constants
  
  
  
  
  
  
  
  
  Methods inherited from Middleware
  dependency, inherited, #initialize, loaded?, new
  
  
  
  
  
  
  
  
  
  #fetch_middleware, #load_middleware, #lookup_middleware, #middleware_mutex, #register_middleware
  
    Class Method Details
    
      
  
  
    .setup_parallel_manager(options = {})  ⇒ Object 
  
  
  
  
    
      
6
7
8 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 6
def self.setup_parallel_manager(options = {})
  options.empty? ? ::Typhoeus::Hydra.hydra : ::Typhoeus::Hydra.new(options)
end
     | 
  
 
    
   
  
    Instance Method Details
    
      
  
  
    #call(env)  ⇒ Object 
  
  
  
  
    
      
12
13
14
15
16 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 12
def call(env)
  super
  perform_request env
  @app.call env
end 
     | 
  
 
    
      
  
  
    
      
90
91
92
93
94
95
96
97
98
99
100 
     | 
    
      # File 'lib/puppet/feature/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
     | 
  
 
    
      
  
  
    
      
108
109
110
111
112 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 108
def configure_socket(req, env)
  if bind = request_options(env)[:bind]
    req.interface = bind[:host]
  end
end
     | 
  
 
    
      
  
  
    
      
80
81
82
83
84
85
86
87
88 
     | 
    
      # File 'lib/puppet/feature/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 
     | 
  
 
    
      
  
  
    
      
102
103
104
105
106 
     | 
    
      # File 'lib/puppet/feature/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)  ⇒ Boolean 
  
  
  
  
    
      
118
119
120 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 118
def parallel?(env)
  !!env[:parallel_manager]
end 
     | 
  
 
    
      
  
  
    
      
18
19
20
21
22
23
24
25
26 
     | 
    
      # File 'lib/puppet/feature/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)  ⇒ Object 
  
  
  
  
    
TODO: support streaming requests
   
 
  
  
    
      
29
30
31 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 29
def read_body(env)
  env[:body] = env[:body].read if env[:body].respond_to? :read
end 
     | 
  
 
    
      
  
  
    #request(env)  ⇒ Object 
  
  
  
  
    
      
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 33
def request(env)
  method = env[:method]
      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)
              else
        raise Faraday::Error::TimeoutError, "request timed out"
      end
    end
    case resp.curl_return_code
    when 0
          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 ||
      .parse resp.
    end
        env[:response].finish(env) if parallel?(env)
  end
  req
end
     | 
  
 
    
      
  
  
    #request_options(env)  ⇒ Object 
  
  
  
  
    
      
114
115
116 
     | 
    
      # File 'lib/puppet/feature/faraday/adapter/typhoeus.rb', line 114
def request_options(env)
  env[:request]
end 
     |