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
adapter?, #prepend_proxy_auth_string, #save_response
#all_loaded_constants, #autoload_all, #load_autoloaded_constants
#lookup_middleware, #register_middleware
#inherited, #supports_parallel?
Methods inherited from Middleware
adapter?, dependency, inherited, #initialize, loaded?, new
Class Method Details
.setup_parallel_manager(options = {}) ⇒ Object
6
7
8
|
# File 'lib/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/faraday/adapter/typhoeus.rb', line 12
def call(env)
super
perform_request env
@app.call env
end
|
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/faraday/adapter/typhoeus.rb', line 74
def configure_proxy(req, env)
proxy = request_options(env)[:proxy]
return unless proxy
req.proxy = "#{proxy[:uri].host}:#{proxy[:uri].port}"
if proxy[:username] && proxy[:password]
req.proxy_username = proxy[:username]
req.proxy_password = proxy[:password]
end
end
|
92
93
94
95
96
|
# File 'lib/faraday/adapter/typhoeus.rb', line 92
def configure_socket(req, env)
if bind = request_options(env)[:bind]
req.interface = bind[:host]
end
end
|
64
65
66
67
68
69
70
71
72
|
# File 'lib/faraday/adapter/typhoeus.rb', line 64
def configure_ssl(req, env)
ssl = env[:ssl]
req.ssl_version = ssl[:version] if ssl[:version]
req.ssl_cert = ssl[:client_cert_file] if ssl[:client_cert_file]
req.ssl_key = ssl[:client_key_file] if ssl[:client_key_file]
req.ssl_cacert = ssl[:ca_file] if ssl[:ca_file]
req.ssl_capath = ssl[:ca_path] if ssl[:ca_path]
end
|
86
87
88
89
90
|
# File 'lib/faraday/adapter/typhoeus.rb', line 86
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
102
103
104
|
# File 'lib/faraday/adapter/typhoeus.rb', line 102
def parallel?(env)
!!env[:parallel_manager]
end
|
18
19
20
21
22
23
24
25
26
|
# 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) ⇒ Object
TODO: support streaming requests
29
30
31
|
# 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) ⇒ 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
|
# File 'lib/faraday/adapter/typhoeus.rb', line 33
def request(env)
req = ::Typhoeus::Request.new env[:url].to_s,
:method => env[:method],
:body => env[:body],
:headers => env[:request_headers],
:disable_ssl_peer_verification => (env[:ssl] && !env[:ssl].fetch(:verify, true))
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
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
98
99
100
|
# File 'lib/faraday/adapter/typhoeus.rb', line 98
def request_options(env)
env[:request]
end
|