faraday 0.16.2 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.md +1 -1
  3. data/README.md +347 -18
  4. data/lib/faraday.rb +175 -93
  5. data/lib/faraday/adapter.rb +22 -36
  6. data/lib/faraday/adapter/em_http.rb +99 -142
  7. data/lib/faraday/adapter/em_http_ssl_patch.rb +17 -23
  8. data/lib/faraday/adapter/em_synchrony.rb +60 -104
  9. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +15 -18
  10. data/lib/faraday/adapter/excon.rb +55 -100
  11. data/lib/faraday/adapter/httpclient.rb +39 -61
  12. data/lib/faraday/adapter/net_http.rb +51 -104
  13. data/lib/faraday/adapter/net_http_persistent.rb +27 -48
  14. data/lib/faraday/adapter/patron.rb +35 -54
  15. data/lib/faraday/adapter/rack.rb +12 -28
  16. data/lib/faraday/adapter/test.rb +53 -86
  17. data/lib/faraday/adapter/typhoeus.rb +1 -4
  18. data/lib/faraday/autoload.rb +36 -47
  19. data/lib/faraday/connection.rb +179 -321
  20. data/lib/faraday/error.rb +32 -80
  21. data/lib/faraday/middleware.rb +28 -4
  22. data/lib/faraday/options.rb +186 -35
  23. data/lib/faraday/parameters.rb +197 -4
  24. data/lib/faraday/rack_builder.rb +56 -67
  25. data/lib/faraday/request.rb +36 -68
  26. data/lib/faraday/request/authorization.rb +30 -42
  27. data/lib/faraday/request/basic_authentication.rb +7 -14
  28. data/lib/faraday/request/instrumentation.rb +27 -45
  29. data/lib/faraday/request/multipart.rb +48 -79
  30. data/lib/faraday/request/retry.rb +170 -197
  31. data/lib/faraday/request/token_authentication.rb +10 -15
  32. data/lib/faraday/request/url_encoded.rb +23 -41
  33. data/lib/faraday/response.rb +16 -23
  34. data/lib/faraday/response/logger.rb +69 -22
  35. data/lib/faraday/response/raise_error.rb +14 -36
  36. data/lib/faraday/upload_io.rb +67 -0
  37. data/lib/faraday/utils.rb +245 -28
  38. metadata +5 -22
  39. data/lib/faraday/adapter_registry.rb +0 -28
  40. data/lib/faraday/dependency_loader.rb +0 -37
  41. data/lib/faraday/deprecated_class.rb +0 -28
  42. data/lib/faraday/encoders/flat_params_encoder.rb +0 -94
  43. data/lib/faraday/encoders/nested_params_encoder.rb +0 -171
  44. data/lib/faraday/file_part.rb +0 -128
  45. data/lib/faraday/logging/formatter.rb +0 -92
  46. data/lib/faraday/middleware_registry.rb +0 -129
  47. data/lib/faraday/options/connection_options.rb +0 -22
  48. data/lib/faraday/options/env.rb +0 -181
  49. data/lib/faraday/options/proxy_options.rb +0 -28
  50. data/lib/faraday/options/request_options.rb +0 -21
  51. data/lib/faraday/options/ssl_options.rb +0 -59
  52. data/lib/faraday/param_part.rb +0 -53
  53. data/lib/faraday/utils/headers.rb +0 -139
  54. data/lib/faraday/utils/params_hash.rb +0 -61
  55. data/spec/external_adapters/faraday_specs_setup.rb +0 -14
@@ -1,12 +1,8 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Faraday
4
2
  class Adapter
5
- # HTTPClient adapter.
6
3
  class HTTPClient < Faraday::Adapter
7
4
  dependency 'httpclient'
8
5
 
9
- # @return [HTTPClient]
10
6
  def client
11
7
  @client ||= ::HTTPClient.new
12
8
  end
@@ -17,76 +13,65 @@ module Faraday
17
13
  # enable compression
18
14
  client.transparent_gzip_decompression = true
19
15
 
20
- if (req = env[:request])
21
- if (proxy = req[:proxy])
16
+ if req = env[:request]
17
+ if proxy = req[:proxy]
22
18
  configure_proxy proxy
23
19
  end
24
20
 
25
- if (bind = req[:bind])
21
+ if bind = req[:bind]
26
22
  configure_socket bind
27
23
  end
28
24
 
29
25
  configure_timeouts req
30
26
  end
31
27
 
32
- if env[:url].scheme == 'https' && (ssl = env[:ssl])
28
+ if env[:url].scheme == 'https' && ssl = env[:ssl]
33
29
  configure_ssl ssl
34
30
  end
35
31
 
36
32
  configure_client
37
33
 
38
- # TODO: Don't stream yet.
34
+ # TODO Don't stream yet.
39
35
  # https://github.com/nahi/httpclient/pull/90
40
36
  env[:body] = env[:body].read if env[:body].respond_to? :read
41
37
 
42
38
  resp = client.request env[:method], env[:url],
43
- body: env[:body],
44
- header: env[:request_headers]
39
+ :body => env[:body],
40
+ :header => env[:request_headers]
45
41
 
46
- if (req = env[:request]).stream_response?
47
- warn "Streaming downloads for #{self.class.name} " \
48
- 'are not yet implemented.'
49
- req.on_data.call(resp.body, resp.body.bytesize)
50
- end
51
42
  save_response env, resp.status, resp.body, resp.headers, resp.reason
52
43
 
53
44
  @app.call env
54
45
  rescue ::HTTPClient::TimeoutError, Errno::ETIMEDOUT
55
- raise Faraday::TimeoutError, $ERROR_INFO
56
- rescue ::HTTPClient::BadResponseError => e
57
- if e.message.include?('status 407')
58
- raise Faraday::ConnectionFailed,
59
- %(407 "Proxy Authentication Required ")
46
+ raise Faraday::Error::TimeoutError, $!
47
+ rescue ::HTTPClient::BadResponseError => err
48
+ if err.message.include?('status 407')
49
+ raise Faraday::Error::ConnectionFailed, %{407 "Proxy Authentication Required "}
50
+ else
51
+ raise Faraday::Error::ClientError, $!
60
52
  end
61
-
62
- raise Faraday::ClientError, $ERROR_INFO
63
- rescue Errno::EADDRNOTAVAIL, Errno::ECONNREFUSED, IOError, SocketError
64
- raise Faraday::ConnectionFailed, $ERROR_INFO
65
- rescue StandardError => e
66
- if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
67
- raise Faraday::SSLError, e
53
+ rescue Errno::ECONNREFUSED, IOError, SocketError
54
+ raise Faraday::Error::ConnectionFailed, $!
55
+ rescue => err
56
+ if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
57
+ raise Faraday::SSLError, err
58
+ else
59
+ raise
68
60
  end
69
-
70
- raise
71
61
  end
72
62
 
73
- # @param bind [Hash]
74
63
  def configure_socket(bind)
75
64
  client.socket_local.host = bind[:host]
76
65
  client.socket_local.port = bind[:port]
77
66
  end
78
67
 
79
- # Configure proxy URI and any user credentials.
80
- #
81
- # @param proxy [Hash]
82
68
  def configure_proxy(proxy)
83
69
  client.proxy = proxy[:uri]
84
- return unless proxy[:user] && proxy[:password]
85
-
86
- client.set_proxy_auth(proxy[:user], proxy[:password])
70
+ if proxy[:user] && proxy[:password]
71
+ client.set_proxy_auth proxy[:user], proxy[:password]
72
+ end
87
73
  end
88
74
 
89
- # @param ssl [Hash]
90
75
  def configure_ssl(ssl)
91
76
  ssl_config = client.ssl_config
92
77
  ssl_config.verify_mode = ssl_verify_mode(ssl)
@@ -99,47 +84,40 @@ module Faraday
99
84
  ssl_config.verify_depth = ssl[:verify_depth] if ssl[:verify_depth]
100
85
  end
101
86
 
102
- # @param req [Hash]
103
87
  def configure_timeouts(req)
104
- configure_timeout(req) if req[:timeout]
105
- configure_open_timeout(req) if req[:open_timeout]
106
- end
107
-
108
- def configure_timeout(req)
109
- client.connect_timeout = req[:timeout]
110
- client.receive_timeout = req[:timeout]
111
- client.send_timeout = req[:timeout]
112
- end
88
+ if req[:timeout]
89
+ client.connect_timeout = req[:timeout]
90
+ client.receive_timeout = req[:timeout]
91
+ client.send_timeout = req[:timeout]
92
+ end
113
93
 
114
- def configure_open_timeout(req)
115
- client.connect_timeout = req[:open_timeout]
116
- client.send_timeout = req[:open_timeout]
94
+ if req[:open_timeout]
95
+ client.connect_timeout = req[:open_timeout]
96
+ client.send_timeout = req[:open_timeout]
97
+ end
117
98
  end
118
99
 
119
100
  def configure_client
120
- @config_block&.call(client)
101
+ @config_block.call(client) if @config_block
121
102
  end
122
103
 
123
- # @param ssl [Hash]
124
- # @return [OpenSSL::X509::Store]
125
104
  def ssl_cert_store(ssl)
126
105
  return ssl[:cert_store] if ssl[:cert_store]
127
-
128
106
  # Memoize the cert store so that the same one is passed to
129
- # HTTPClient each time, to avoid resyncing SSL sessions when
107
+ # HTTPClient each time, to avoid resyncing SSL sesions when
130
108
  # it's changed
131
- @ssl_cert_store ||= begin
109
+ @cert_store ||= begin
132
110
  # Use the default cert store by default, i.e. system ca certs
133
- OpenSSL::X509::Store.new.tap(&:set_default_paths)
111
+ cert_store = OpenSSL::X509::Store.new
112
+ cert_store.set_default_paths
113
+ cert_store
134
114
  end
135
115
  end
136
116
 
137
- # @param ssl [Hash]
138
117
  def ssl_verify_mode(ssl)
139
118
  ssl[:verify_mode] || begin
140
119
  if ssl.fetch(:verify, true)
141
- OpenSSL::SSL::VERIFY_PEER |
142
- OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
120
+ OpenSSL::SSL::VERIFY_PEER | OpenSSL::SSL::VERIFY_FAIL_IF_NO_PEER_CERT
143
121
  else
144
122
  OpenSSL::SSL::VERIFY_NONE
145
123
  end
@@ -1,21 +1,16 @@
1
- # frozen_string_literal: true
2
-
3
1
  begin
4
2
  require 'net/https'
5
3
  rescue LoadError
6
- warn 'Warning: no such file to load -- net/https. ' \
7
- 'Make sure openssl is installed if you want ssl support'
4
+ warn "Warning: no such file to load -- net/https. Make sure openssl is installed if you want ssl support"
8
5
  require 'net/http'
9
6
  end
10
7
  require 'zlib'
11
8
 
12
9
  module Faraday
13
10
  class Adapter
14
- # Net::HTTP adapter.
15
11
  class NetHttp < Faraday::Adapter
16
- exceptions = [
12
+ NET_HTTP_EXCEPTIONS = [
17
13
  IOError,
18
- Errno::EADDRNOTAVAIL,
19
14
  Errno::ECONNABORTED,
20
15
  Errno::ECONNREFUSED,
21
16
  Errno::ECONNRESET,
@@ -27,40 +22,34 @@ module Faraday
27
22
  Net::HTTPHeaderSyntaxError,
28
23
  Net::ProtocolError,
29
24
  SocketError,
30
- Zlib::GzipFile::Error
25
+ Zlib::GzipFile::Error,
31
26
  ]
32
27
 
33
- exceptions << OpenSSL::SSL::SSLError if defined?(OpenSSL)
34
- exceptions << Net::OpenTimeout if defined?(Net::OpenTimeout)
35
-
36
- NET_HTTP_EXCEPTIONS = exceptions.freeze
28
+ NET_HTTP_EXCEPTIONS << OpenSSL::SSL::SSLError if defined?(OpenSSL)
29
+ NET_HTTP_EXCEPTIONS << Net::OpenTimeout if defined?(Net::OpenTimeout)
37
30
 
38
31
  def initialize(app = nil, opts = {}, &block)
39
- @ssl_cert_store = nil
32
+ @cert_store = nil
40
33
  super(app, opts, &block)
41
34
  end
42
35
 
43
36
  def call(env)
44
37
  super
45
38
  with_net_http_connection(env) do |http|
46
- if (env[:url].scheme == 'https') && env[:ssl]
47
- configure_ssl(http, env[:ssl])
48
- end
39
+ configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' and env[:ssl]
49
40
  configure_request(http, env[:request])
50
41
 
51
42
  begin
52
43
  http_response = perform_request(http, env)
53
- rescue *NET_HTTP_EXCEPTIONS => e
54
- if defined?(OpenSSL) && e.is_a?(OpenSSL::SSL::SSLError)
55
- raise Faraday::SSLError, e
44
+ rescue *NET_HTTP_EXCEPTIONS => err
45
+ if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
46
+ raise Faraday::SSLError, err
47
+ else
48
+ raise Error::ConnectionFailed, err
56
49
  end
57
-
58
- raise Faraday::ConnectionFailed, e
59
50
  end
60
51
 
61
- save_response(env, http_response.code.to_i,
62
- http_response.body || '', nil,
63
- http_response.message) do |response_headers|
52
+ save_response(env, http_response.code.to_i, http_response.body || '', nil, http_response.message) do |response_headers|
64
53
  http_response.each_header do |key, value|
65
54
  response_headers[key] = value
66
55
  end
@@ -68,19 +57,19 @@ module Faraday
68
57
  end
69
58
 
70
59
  @app.call env
71
- rescue Timeout::Error, Errno::ETIMEDOUT => e
72
- raise Faraday::TimeoutError, e
60
+ rescue Timeout::Error, Errno::ETIMEDOUT => err
61
+ raise Faraday::Error::TimeoutError, err
73
62
  end
74
63
 
75
64
  private
76
65
 
77
66
  def create_request(env)
78
67
  request = Net::HTTPGenericRequest.new \
79
- env[:method].to_s.upcase, # request method
80
- !!env[:body], # is there request body
81
- env[:method] != :head, # is there response body
82
- env[:url].request_uri, # request uri path
83
- env[:request_headers] # request headers
68
+ env[:method].to_s.upcase, # request method
69
+ !!env[:body], # is there request body
70
+ :head != env[:method], # is there response body
71
+ env[:url].request_uri, # request uri path
72
+ env[:request_headers] # request headers
84
73
 
85
74
  if env[:body].respond_to?(:read)
86
75
  request.body_stream = env[:body]
@@ -91,44 +80,9 @@ module Faraday
91
80
  end
92
81
 
93
82
  def perform_request(http, env)
94
- if env[:request].stream_response?
95
- size = 0
96
- yielded = false
97
- http_response = request_with_wrapped_block(http, env) do |chunk|
98
- if chunk.bytesize.positive? || size.positive?
99
- yielded = true
100
- size += chunk.bytesize
101
- env[:request].on_data.call(chunk, size)
102
- end
103
- end
104
- env[:request].on_data.call('', 0) unless yielded
105
- # Net::HTTP returns something,
106
- # but it's not meaningful according to the docs.
107
- http_response.body = nil
108
- http_response
109
- else
110
- request_with_wrapped_block(http, env)
111
- end
112
- end
113
-
114
- def request_with_wrapped_block(http, env, &block)
115
- if (env[:method] == :get) && !env[:body]
83
+ if :get == env[:method] and !env[:body]
116
84
  # prefer `get` to `request` because the former handles gzip (ruby 1.9)
117
- request_via_get_method(http, env, &block)
118
- else
119
- request_via_request_method(http, env, &block)
120
- end
121
- end
122
-
123
- def request_via_get_method(http, env, &block)
124
- http.get env[:url].request_uri, env[:request_headers], &block
125
- end
126
-
127
- def request_via_request_method(http, env, &block)
128
- if block_given?
129
- http.request create_request(env) do |response|
130
- response.read_body(&block)
131
- end
85
+ http.get env[:url].request_uri, env[:request_headers]
132
86
  else
133
87
  http.request create_request(env)
134
88
  end
@@ -139,56 +93,49 @@ module Faraday
139
93
  end
140
94
 
141
95
  def net_http_connection(env)
142
- klass = if (proxy = env[:request][:proxy])
143
- Net::HTTP::Proxy(proxy[:uri].hostname, proxy[:uri].port,
144
- proxy[:user], proxy[:password])
145
- else
146
- Net::HTTP
147
- end
148
- port = env[:url].port || (env[:url].scheme == 'https' ? 443 : 80)
149
- klass.new(env[:url].hostname, port)
96
+ if proxy = env[:request][:proxy]
97
+ Net::HTTP::Proxy(proxy[:uri].hostname, proxy[:uri].port, proxy[:user], proxy[:password])
98
+ else
99
+ Net::HTTP
100
+ end.new(env[:url].hostname, env[:url].port || (env[:url].scheme == 'https' ? 443 : 80))
150
101
  end
151
102
 
152
103
  def configure_ssl(http, ssl)
153
- http.use_ssl = true
154
- http.verify_mode = ssl_verify_mode(ssl)
155
- http.cert_store = ssl_cert_store(ssl)
156
-
157
- http.cert = ssl[:client_cert] if ssl[:client_cert]
158
- http.key = ssl[:client_key] if ssl[:client_key]
159
- http.ca_file = ssl[:ca_file] if ssl[:ca_file]
160
- http.ca_path = ssl[:ca_path] if ssl[:ca_path]
104
+ http.use_ssl = true
105
+ http.verify_mode = ssl_verify_mode(ssl)
106
+ http.cert_store = ssl_cert_store(ssl)
107
+
108
+ http.cert = ssl[:client_cert] if ssl[:client_cert]
109
+ http.key = ssl[:client_key] if ssl[:client_key]
110
+ http.ca_file = ssl[:ca_file] if ssl[:ca_file]
111
+ http.ca_path = ssl[:ca_path] if ssl[:ca_path]
161
112
  http.verify_depth = ssl[:verify_depth] if ssl[:verify_depth]
162
- http.ssl_version = ssl[:version] if ssl[:version]
163
- http.min_version = ssl[:min_version] if ssl[:min_version]
164
- http.max_version = ssl[:max_version] if ssl[:max_version]
113
+ http.ssl_version = ssl[:version] if ssl[:version]
114
+ http.min_version = ssl[:min_version] if ssl[:min_version]
115
+ http.max_version = ssl[:max_version] if ssl[:max_version]
165
116
  end
166
117
 
167
118
  def configure_request(http, req)
168
119
  if req[:timeout]
169
- http.read_timeout = req[:timeout]
170
- http.open_timeout = req[:timeout]
171
- if http.respond_to?(:write_timeout=)
172
- http.write_timeout = req[:timeout]
173
- end
174
- end
175
- http.open_timeout = req[:open_timeout] if req[:open_timeout]
176
- if req[:write_timeout] && http.respond_to?(:write_timeout=)
177
- http.write_timeout = req[:write_timeout]
120
+ http.read_timeout = req[:timeout]
121
+ http.open_timeout = req[:timeout]
122
+ http.write_timeout = req[:timeout] if http.respond_to?(:write_timeout=)
178
123
  end
179
- # Only set if Net::Http supports it, since Ruby 2.5.
180
- http.max_retries = 0 if http.respond_to?(:max_retries=)
124
+ http.open_timeout = req[:open_timeout] if req[:open_timeout]
125
+ http.write_timeout = req[:write_timeout] if req[:write_timeout] && http.respond_to?(:write_timeout=)
126
+ # Only set if Net::Http supports it, since Ruby 2.5.
127
+ http.max_retries = 0 if http.respond_to?(:max_retries=)
181
128
 
182
- @config_block&.call(http)
129
+ @config_block.call(http) if @config_block
183
130
  end
184
131
 
185
132
  def ssl_cert_store(ssl)
186
133
  return ssl[:cert_store] if ssl[:cert_store]
187
-
188
- @ssl_cert_store ||= begin
189
- # Use the default cert store by default, i.e. system ca certs
190
- OpenSSL::X509::Store.new.tap(&:set_default_paths)
191
- end
134
+ return @cert_store if @cert_store
135
+ # Use the default cert store by default, i.e. system ca certs
136
+ @cert_store = OpenSSL::X509::Store.new
137
+ @cert_store.set_default_paths
138
+ @cert_store
192
139
  end
193
140
 
194
141
  def ssl_verify_mode(ssl)
@@ -1,8 +1,5 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Faraday
4
2
  class Adapter
5
- # Net::HTTP::Persistent adapter.
6
3
  class NetHttpPersistent < NetHttp
7
4
  dependency 'net/http/persistent'
8
5
 
@@ -10,79 +7,61 @@ module Faraday
10
7
 
11
8
  def net_http_connection(env)
12
9
  @cached_connection ||=
13
- if Net::HTTP::Persistent.instance_method(:initialize)
14
- .parameters.first == %i[key name]
15
- options = { name: 'Faraday' }
16
- if @connection_options.key?(:pool_size)
17
- options[:pool_size] = @connection_options[:pool_size]
18
- end
10
+ if Net::HTTP::Persistent.instance_method(:initialize).parameters.first == [:key, :name]
11
+ options = {name: 'Faraday'}
12
+ options[:pool_size] = @connection_options[:pool_size] if @connection_options.key?(:pool_size)
19
13
  Net::HTTP::Persistent.new(options)
20
14
  else
21
15
  Net::HTTP::Persistent.new('Faraday')
22
16
  end
23
17
 
24
18
  proxy_uri = proxy_uri(env)
25
- if @cached_connection.proxy_uri != proxy_uri
26
- @cached_connection.proxy = proxy_uri
27
- end
19
+ @cached_connection.proxy = proxy_uri if @cached_connection.proxy_uri != proxy_uri
28
20
  @cached_connection
29
21
  end
30
22
 
31
23
  def proxy_uri(env)
32
24
  proxy_uri = nil
33
25
  if (proxy = env[:request][:proxy])
34
- proxy_uri = if proxy[:uri].is_a?(::URI::HTTP)
35
- proxy[:uri].dup
36
- else
37
- ::URI.parse(proxy[:uri].to_s)
38
- end
26
+ proxy_uri = ::URI::HTTP === proxy[:uri] ? proxy[:uri].dup : ::URI.parse(proxy[:uri].to_s)
39
27
  proxy_uri.user = proxy_uri.password = nil
40
- # awful patch for net-http-persistent 2.8
41
- # not unescaping user/password
42
- if proxy[:user]
43
- (class << proxy_uri; self; end).class_eval do
44
- define_method(:user) { proxy[:user] }
45
- define_method(:password) { proxy[:password] }
46
- end
47
- end
28
+ # awful patch for net-http-persistent 2.8 not unescaping user/password
29
+ (class << proxy_uri; self; end).class_eval do
30
+ define_method(:user) { proxy[:user] }
31
+ define_method(:password) { proxy[:password] }
32
+ end if proxy[:user]
48
33
  end
49
34
  proxy_uri
50
35
  end
51
36
 
52
37
  def perform_request(http, env)
53
38
  http.request env[:url], create_request(env)
54
- rescue Errno::ETIMEDOUT => e
55
- raise Faraday::TimeoutError, e
56
- rescue Net::HTTP::Persistent::Error => e
57
- raise Faraday::TimeoutError, e if e.message.include? 'Timeout'
58
-
59
- if e.message.include? 'connection refused'
60
- raise Faraday::ConnectionFailed, e
39
+ rescue Errno::ETIMEDOUT => error
40
+ raise Faraday::Error::TimeoutError, error
41
+ rescue Net::HTTP::Persistent::Error => error
42
+ if error.message.include? 'Timeout'
43
+ raise Faraday::Error::TimeoutError, error
44
+ elsif error.message.include? 'connection refused'
45
+ raise Faraday::Error::ConnectionFailed, error
46
+ else
47
+ raise
61
48
  end
62
-
63
- raise
64
49
  end
65
50
 
66
- SSL_CONFIGURATIONS = {
67
- certificate: :client_cert,
68
- private_key: :client_key,
69
- ca_file: :ca_file,
70
- ssl_version: :version,
71
- min_version: :min_version,
72
- max_version: :max_version
73
- }.freeze
74
-
75
51
  def configure_ssl(http, ssl)
76
52
  http_set(http, :verify_mode, ssl_verify_mode(ssl))
77
- http_set(http, :cert_store, ssl_cert_store(ssl))
53
+ http_set(http, :cert_store, ssl_cert_store(ssl))
78
54
 
79
- SSL_CONFIGURATIONS
80
- .select { |_, key| ssl[key] }
81
- .each { |target, key| http_set(http, target, ssl[key]) }
55
+ http_set(http, :certificate, ssl[:client_cert]) if ssl[:client_cert]
56
+ http_set(http, :private_key, ssl[:client_key]) if ssl[:client_key]
57
+ http_set(http, :ca_file, ssl[:ca_file]) if ssl[:ca_file]
58
+ http_set(http, :ssl_version, ssl[:version]) if ssl[:version]
82
59
  end
83
60
 
84
61
  def http_set(http, attr, value)
85
- http.send("#{attr}=", value) if http.send(attr) != value
62
+ if http.send(attr) != value
63
+ http.send("#{attr}=", value)
64
+ end
86
65
  end
87
66
  end
88
67
  end