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
#all_loaded_constants, #autoload_all, #load_autoloaded_constants
#lookup_middleware, #register_middleware
#inherited, #supports_parallel?
Methods inherited from Middleware
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
|
87
88
89
90
91
92
93
94
95
96
97
|
# File 'lib/faraday/adapter/typhoeus.rb', line 87
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
|
77
78
79
80
81
82
83
84
85
|
# File 'lib/faraday/adapter/typhoeus.rb', line 77
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
|
99
100
101
102
103
|
# File 'lib/faraday/adapter/typhoeus.rb', line 99
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
109
110
111
|
# File 'lib/faraday/adapter/typhoeus.rb', line 109
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
63
64
65
66
67
68
69
70
71
72
73
74
75
|
# File 'lib/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].fetch(:verify, true))
configure_ssl req, env
configure_proxy req, env
configure_timeout 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
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
105
106
107
|
# File 'lib/faraday/adapter/typhoeus.rb', line 105
def request_options(env)
env[:request]
end
|