faraday 1.1.0 → 1.10.3

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +104 -0
  3. data/README.md +1 -2
  4. data/examples/client_spec.rb +34 -2
  5. data/examples/client_test.rb +41 -2
  6. data/lib/faraday/adapter/test.rb +59 -43
  7. data/lib/faraday/adapter.rb +1 -12
  8. data/lib/faraday/autoload.rb +1 -9
  9. data/lib/faraday/connection.rb +34 -6
  10. data/lib/faraday/deprecate.rb +110 -0
  11. data/lib/faraday/error.rb +12 -6
  12. data/lib/faraday/methods.rb +6 -0
  13. data/lib/faraday/middleware.rb +14 -4
  14. data/lib/faraday/options/proxy_options.rb +4 -0
  15. data/lib/faraday/request/authorization.rb +14 -7
  16. data/lib/faraday/request/json.rb +55 -0
  17. data/lib/faraday/request.rb +10 -12
  18. data/lib/faraday/response/json.rb +54 -0
  19. data/lib/faraday/response/logger.rb +2 -4
  20. data/lib/faraday/response.rb +3 -7
  21. data/lib/faraday/version.rb +5 -0
  22. data/lib/faraday.rb +67 -40
  23. data/spec/faraday/adapter/em_http_spec.rb +39 -37
  24. data/spec/faraday/adapter/em_synchrony_spec.rb +11 -9
  25. data/spec/faraday/adapter/test_spec.rb +117 -0
  26. data/spec/faraday/connection_spec.rb +45 -0
  27. data/spec/faraday/deprecate_spec.rb +147 -0
  28. data/spec/faraday/error_spec.rb +15 -0
  29. data/spec/faraday/middleware_spec.rb +32 -6
  30. data/spec/faraday/options/proxy_options_spec.rb +7 -0
  31. data/spec/faraday/request/authorization_spec.rb +8 -0
  32. data/spec/faraday/request/json_spec.rb +111 -0
  33. data/spec/faraday/request_spec.rb +1 -1
  34. data/spec/faraday/response/json_spec.rb +119 -0
  35. data/spec/faraday/response/raise_error_spec.rb +30 -0
  36. data/spec/spec_helper.rb +2 -0
  37. data/spec/support/shared_examples/adapter.rb +2 -1
  38. data/spec/support/shared_examples/request_method.rb +36 -8
  39. metadata +143 -32
  40. data/lib/faraday/adapter/em_http.rb +0 -286
  41. data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -62
  42. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -69
  43. data/lib/faraday/adapter/em_synchrony.rb +0 -150
  44. data/lib/faraday/adapter/excon.rb +0 -124
  45. data/lib/faraday/adapter/httpclient.rb +0 -152
  46. data/lib/faraday/adapter/net_http.rb +0 -219
  47. data/lib/faraday/adapter/net_http_persistent.rb +0 -91
  48. data/lib/faraday/adapter/patron.rb +0 -132
  49. data/lib/faraday/adapter/rack.rb +0 -75
  50. data/lib/faraday/file_part.rb +0 -128
  51. data/lib/faraday/param_part.rb +0 -53
  52. data/lib/faraday/request/multipart.rb +0 -106
  53. data/lib/faraday/request/retry.rb +0 -239
  54. data/spec/faraday/adapter/net_http_persistent_spec.rb +0 -57
  55. data/spec/faraday/request/multipart_spec.rb +0 -302
  56. data/spec/faraday/request/retry_spec.rb +0 -242
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@technoweenie"
@@ -10,42 +10,162 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-10-17 00:00:00.000000000 Z
13
+ date: 2023-01-18 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: multipart-post
16
+ name: faraday-em_http
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
- - - ">="
19
+ - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.2'
22
- - - "<"
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
23
27
  - !ruby/object:Gem::Version
24
- version: '3'
28
+ version: '1.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: faraday-em_synchrony
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.0'
25
36
  type: :runtime
26
37
  prerelease: false
27
38
  version_requirements: !ruby/object:Gem::Requirement
28
39
  requirements:
29
- - - ">="
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.0'
43
+ - !ruby/object:Gem::Dependency
44
+ name: faraday-excon
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '1.1'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '1.1'
57
+ - !ruby/object:Gem::Dependency
58
+ name: faraday-httpclient
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: faraday-multipart
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.0'
85
+ - !ruby/object:Gem::Dependency
86
+ name: faraday-net_http
87
+ requirement: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
30
90
  - !ruby/object:Gem::Version
31
- version: '1.2'
32
- - - "<"
91
+ version: '1.0'
92
+ type: :runtime
93
+ prerelease: false
94
+ version_requirements: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - "~>"
97
+ - !ruby/object:Gem::Version
98
+ version: '1.0'
99
+ - !ruby/object:Gem::Dependency
100
+ name: faraday-net_http_persistent
101
+ requirement: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - "~>"
104
+ - !ruby/object:Gem::Version
105
+ version: '1.0'
106
+ type: :runtime
107
+ prerelease: false
108
+ version_requirements: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - "~>"
111
+ - !ruby/object:Gem::Version
112
+ version: '1.0'
113
+ - !ruby/object:Gem::Dependency
114
+ name: faraday-patron
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '1.0'
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: '1.0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: faraday-rack
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.0'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: '1.0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: faraday-retry
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.0'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
33
153
  - !ruby/object:Gem::Version
34
- version: '3'
154
+ version: '1.0'
35
155
  - !ruby/object:Gem::Dependency
36
156
  name: ruby2_keywords
37
157
  requirement: !ruby/object:Gem::Requirement
38
158
  requirements:
39
159
  - - ">="
40
160
  - !ruby/object:Gem::Version
41
- version: '0'
161
+ version: 0.0.4
42
162
  type: :runtime
43
163
  prerelease: false
44
164
  version_requirements: !ruby/object:Gem::Requirement
45
165
  requirements:
46
166
  - - ">="
47
167
  - !ruby/object:Gem::Version
48
- version: '0'
168
+ version: 0.0.4
49
169
  description:
50
170
  email: technoweenie@gmail.com
51
171
  executables: []
@@ -60,27 +180,18 @@ files:
60
180
  - examples/client_test.rb
61
181
  - lib/faraday.rb
62
182
  - lib/faraday/adapter.rb
63
- - lib/faraday/adapter/em_http.rb
64
- - lib/faraday/adapter/em_http_ssl_patch.rb
65
- - lib/faraday/adapter/em_synchrony.rb
66
- - lib/faraday/adapter/em_synchrony/parallel_manager.rb
67
- - lib/faraday/adapter/excon.rb
68
- - lib/faraday/adapter/httpclient.rb
69
- - lib/faraday/adapter/net_http.rb
70
- - lib/faraday/adapter/net_http_persistent.rb
71
- - lib/faraday/adapter/patron.rb
72
- - lib/faraday/adapter/rack.rb
73
183
  - lib/faraday/adapter/test.rb
74
184
  - lib/faraday/adapter/typhoeus.rb
75
185
  - lib/faraday/adapter_registry.rb
76
186
  - lib/faraday/autoload.rb
77
187
  - lib/faraday/connection.rb
78
188
  - lib/faraday/dependency_loader.rb
189
+ - lib/faraday/deprecate.rb
79
190
  - lib/faraday/encoders/flat_params_encoder.rb
80
191
  - lib/faraday/encoders/nested_params_encoder.rb
81
192
  - lib/faraday/error.rb
82
- - lib/faraday/file_part.rb
83
193
  - lib/faraday/logging/formatter.rb
194
+ - lib/faraday/methods.rb
84
195
  - lib/faraday/middleware.rb
85
196
  - lib/faraday/middleware_registry.rb
86
197
  - lib/faraday/options.rb
@@ -89,29 +200,28 @@ files:
89
200
  - lib/faraday/options/proxy_options.rb
90
201
  - lib/faraday/options/request_options.rb
91
202
  - lib/faraday/options/ssl_options.rb
92
- - lib/faraday/param_part.rb
93
203
  - lib/faraday/parameters.rb
94
204
  - lib/faraday/rack_builder.rb
95
205
  - lib/faraday/request.rb
96
206
  - lib/faraday/request/authorization.rb
97
207
  - lib/faraday/request/basic_authentication.rb
98
208
  - lib/faraday/request/instrumentation.rb
99
- - lib/faraday/request/multipart.rb
100
- - lib/faraday/request/retry.rb
209
+ - lib/faraday/request/json.rb
101
210
  - lib/faraday/request/token_authentication.rb
102
211
  - lib/faraday/request/url_encoded.rb
103
212
  - lib/faraday/response.rb
213
+ - lib/faraday/response/json.rb
104
214
  - lib/faraday/response/logger.rb
105
215
  - lib/faraday/response/raise_error.rb
106
216
  - lib/faraday/utils.rb
107
217
  - lib/faraday/utils/headers.rb
108
218
  - lib/faraday/utils/params_hash.rb
219
+ - lib/faraday/version.rb
109
220
  - spec/external_adapters/faraday_specs_setup.rb
110
221
  - spec/faraday/adapter/em_http_spec.rb
111
222
  - spec/faraday/adapter/em_synchrony_spec.rb
112
223
  - spec/faraday/adapter/excon_spec.rb
113
224
  - spec/faraday/adapter/httpclient_spec.rb
114
- - spec/faraday/adapter/net_http_persistent_spec.rb
115
225
  - spec/faraday/adapter/net_http_spec.rb
116
226
  - spec/faraday/adapter/patron_spec.rb
117
227
  - spec/faraday/adapter/rack_spec.rb
@@ -121,6 +231,7 @@ files:
121
231
  - spec/faraday/adapter_spec.rb
122
232
  - spec/faraday/composite_read_io_spec.rb
123
233
  - spec/faraday/connection_spec.rb
234
+ - spec/faraday/deprecate_spec.rb
124
235
  - spec/faraday/error_spec.rb
125
236
  - spec/faraday/middleware_spec.rb
126
237
  - spec/faraday/options/env_spec.rb
@@ -132,10 +243,10 @@ files:
132
243
  - spec/faraday/rack_builder_spec.rb
133
244
  - spec/faraday/request/authorization_spec.rb
134
245
  - spec/faraday/request/instrumentation_spec.rb
135
- - spec/faraday/request/multipart_spec.rb
136
- - spec/faraday/request/retry_spec.rb
246
+ - spec/faraday/request/json_spec.rb
137
247
  - spec/faraday/request/url_encoded_spec.rb
138
248
  - spec/faraday/request_spec.rb
249
+ - spec/faraday/response/json_spec.rb
139
250
  - spec/faraday/response/logger_spec.rb
140
251
  - spec/faraday/response/middleware_spec.rb
141
252
  - spec/faraday/response/raise_error_spec.rb
@@ -157,7 +268,7 @@ licenses:
157
268
  - MIT
158
269
  metadata:
159
270
  homepage_uri: https://lostisland.github.io/faraday
160
- changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.1.0
271
+ changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.10.3
161
272
  source_code_uri: https://github.com/lostisland/faraday
162
273
  bug_tracker_uri: https://github.com/lostisland/faraday/issues
163
274
  post_install_message:
@@ -176,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
287
  - !ruby/object:Gem::Version
177
288
  version: '0'
178
289
  requirements: []
179
- rubygems_version: 3.0.3
290
+ rubygems_version: 3.1.6
180
291
  signing_key:
181
292
  specification_version: 4
182
293
  summary: HTTP/REST API client library.
@@ -1,286 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Faraday
4
- class Adapter
5
- # EventMachine adapter. This adapter is useful for either asynchronous
6
- # requests when in an EM reactor loop, or for making parallel requests in
7
- # synchronous code.
8
- class EMHttp < Faraday::Adapter
9
- # Options is a module containing helpers to convert the Faraday env object
10
- # into options hashes for EMHTTP method calls.
11
- module Options
12
- # @return [Hash]
13
- def connection_config(env)
14
- options = {}
15
- configure_proxy(options, env)
16
- configure_timeout(options, env)
17
- configure_socket(options, env)
18
- configure_ssl(options, env)
19
- options
20
- end
21
-
22
- def request_config(env)
23
- options = {
24
- body: read_body(env),
25
- head: env[:request_headers]
26
- # keepalive: true,
27
- # file: 'path/to/file', # stream data off disk
28
- }
29
- configure_compression(options, env)
30
- options
31
- end
32
-
33
- def read_body(env)
34
- body = env[:body]
35
- body.respond_to?(:read) ? body.read : body
36
- end
37
-
38
- # Reads out proxy settings from env into options
39
- def configure_proxy(options, env)
40
- proxy = request_options(env)[:proxy]
41
- return unless proxy
42
-
43
- options[:proxy] = {
44
- host: proxy[:uri].host,
45
- port: proxy[:uri].port,
46
- authorization: [proxy[:user], proxy[:password]]
47
- }
48
- end
49
-
50
- # Reads out host and port settings from env into options
51
- def configure_socket(options, env)
52
- bind = request_options(env)[:bind]
53
- return unless bind
54
-
55
- options[:bind] = {
56
- host: bind[:host],
57
- port: bind[:port]
58
- }
59
- end
60
-
61
- # Reads out SSL certificate settings from env into options
62
- def configure_ssl(options, env)
63
- return unless env[:url].scheme == 'https' && env[:ssl]
64
-
65
- options[:ssl] = {
66
- cert_chain_file: env[:ssl][:ca_file],
67
- verify_peer: env[:ssl].fetch(:verify, true)
68
- }
69
- end
70
-
71
- # Reads out timeout settings from env into options
72
- def configure_timeout(options, env)
73
- req = request_options(env)
74
- options[:inactivity_timeout] = request_timeout(:read, req)
75
- options[:connect_timeout] = request_timeout(:open, req)
76
- end
77
-
78
- # Reads out compression header settings from env into options
79
- def configure_compression(options, env)
80
- return unless (env[:method] == :get) &&
81
- !options[:head].key?('accept-encoding')
82
-
83
- options[:head]['accept-encoding'] = 'gzip, compressed'
84
- end
85
-
86
- def request_options(env)
87
- env[:request]
88
- end
89
- end
90
-
91
- include Options
92
-
93
- dependency 'em-http'
94
-
95
- self.supports_parallel = true
96
-
97
- # @return [Manager]
98
- def self.setup_parallel_manager(_options = nil)
99
- Manager.new
100
- end
101
-
102
- def call(env)
103
- super
104
- perform_request env
105
- @app.call env
106
- end
107
-
108
- def perform_request(env)
109
- if parallel?(env)
110
- manager = env[:parallel_manager]
111
- manager.add do
112
- perform_single_request(env)
113
- .callback { env[:response].finish(env) }
114
- end
115
- elsif EventMachine.reactor_running?
116
- # EM is running: instruct upstream that this is an async request
117
- env[:parallel_manager] = true
118
- perform_single_request(env)
119
- .callback { env[:response].finish(env) }
120
- .errback do
121
- # TODO: no way to communicate the error in async mode
122
- raise NotImplementedError
123
- end
124
- else
125
- error = nil
126
- # start EM, block until request is completed
127
- EventMachine.run do
128
- perform_single_request(env)
129
- .callback { EventMachine.stop }
130
- .errback do |client|
131
- error = error_message(client)
132
- EventMachine.stop
133
- end
134
- end
135
- raise_error(error) if error
136
- end
137
- rescue EventMachine::Connectify::CONNECTError => e
138
- if e.message.include?('Proxy Authentication Required')
139
- raise Faraday::ConnectionFailed,
140
- %(407 "Proxy Authentication Required ")
141
- end
142
-
143
- raise Faraday::ConnectionFailed, e
144
- rescue StandardError => e
145
- if defined?(::OpenSSL::SSL::SSLError) && \
146
- e.is_a?(::OpenSSL::SSL::SSLError)
147
- raise Faraday::SSLError, e
148
- end
149
-
150
- raise
151
- end
152
-
153
- # TODO: reuse the connection to support pipelining
154
- def perform_single_request(env)
155
- req = create_request(env)
156
- req = req.setup_request(env[:method], request_config(env))
157
- req.callback do |client|
158
- if env[:request].stream_response?
159
- warn "Streaming downloads for #{self.class.name} " \
160
- 'are not yet implemented.'
161
- env[:request].on_data.call(
162
- client.response,
163
- client.response.bytesize
164
- )
165
- end
166
- status = client.response_header.status
167
- reason = client.response_header.http_reason
168
- save_response(env, status, client.response, nil, reason) do |headers|
169
- client.response_header.each do |name, value|
170
- headers[name.to_sym] = value
171
- end
172
- end
173
- end
174
- end
175
-
176
- def create_request(env)
177
- EventMachine::HttpRequest.new(
178
- env[:url], connection_config(env).merge(@connection_options)
179
- )
180
- end
181
-
182
- def error_message(client)
183
- client.error || 'request failed'
184
- end
185
-
186
- def raise_error(msg)
187
- error_class = Faraday::ClientError
188
- if timeout_message?(msg)
189
- error_class = Faraday::TimeoutError
190
- msg = 'request timed out'
191
- elsif msg == Errno::ECONNREFUSED
192
- error_class = Faraday::ConnectionFailed
193
- msg = 'connection refused'
194
- elsif msg == 'connection closed by server'
195
- error_class = Faraday::ConnectionFailed
196
- end
197
- raise error_class, msg
198
- end
199
-
200
- def timeout_message?(msg)
201
- msg == Errno::ETIMEDOUT ||
202
- (msg.is_a?(String) && msg.include?('timeout error'))
203
- end
204
-
205
- # @return [Boolean]
206
- def parallel?(env)
207
- !!env[:parallel_manager]
208
- end
209
-
210
- # This parallel manager is designed to start an EventMachine loop
211
- # and block until all registered requests have been completed.
212
- class Manager
213
- # @see reset
214
- def initialize
215
- reset
216
- end
217
-
218
- # Re-initializes instance variables
219
- def reset
220
- @registered_procs = []
221
- @num_registered = 0
222
- @num_succeeded = 0
223
- @errors = []
224
- @running = false
225
- end
226
-
227
- # @return [Boolean]
228
- def running?
229
- @running
230
- end
231
-
232
- def add(&block)
233
- if running?
234
- perform_request(&block)
235
- else
236
- @registered_procs << block
237
- end
238
- @num_registered += 1
239
- end
240
-
241
- def run
242
- if @num_registered.positive?
243
- @running = true
244
- EventMachine.run do
245
- @registered_procs.each do |proc|
246
- perform_request(&proc)
247
- end
248
- end
249
- unless @errors.empty?
250
- raise Faraday::ClientError, @errors.first || 'connection failed'
251
- end
252
- end
253
- ensure
254
- reset
255
- end
256
-
257
- def perform_request
258
- client = yield
259
- client.callback do
260
- @num_succeeded += 1
261
- check_finished
262
- end
263
- client.errback do
264
- @errors << client.error
265
- check_finished
266
- end
267
- end
268
-
269
- def check_finished
270
- EventMachine.stop if @num_succeeded + @errors.size == @num_registered
271
- end
272
- end
273
- end
274
- end
275
- end
276
-
277
- if Faraday::Adapter::EMHttp.loaded?
278
- begin
279
- require 'openssl'
280
- rescue LoadError
281
- warn 'Warning: no such file to load -- openssl. ' \
282
- 'Make sure it is installed if you want HTTPS support'
283
- else
284
- require 'faraday/adapter/em_http_ssl_patch'
285
- end
286
- end
@@ -1,62 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'openssl'
4
- require 'em-http'
5
-
6
- # EventMachine patch to make SSL work.
7
- module EmHttpSslPatch
8
- def ssl_verify_peer(cert_string)
9
- begin
10
- @last_seen_cert = OpenSSL::X509::Certificate.new(cert_string)
11
- rescue OpenSSL::X509::CertificateError
12
- return false
13
- end
14
-
15
- unless certificate_store.verify(@last_seen_cert)
16
- raise OpenSSL::SSL::SSLError,
17
- %(unable to verify the server certificate for "#{host}")
18
- end
19
-
20
- begin
21
- certificate_store.add_cert(@last_seen_cert)
22
- rescue OpenSSL::X509::StoreError => e
23
- raise e unless e.message == 'cert already in hash table'
24
- end
25
- true
26
- end
27
-
28
- def ssl_handshake_completed
29
- return true unless verify_peer?
30
-
31
- unless verified_cert_identity?
32
- raise OpenSSL::SSL::SSLError,
33
- %(host "#{host}" does not match the server certificate)
34
- end
35
-
36
- true
37
- end
38
-
39
- def verify_peer?
40
- parent.connopts.tls[:verify_peer]
41
- end
42
-
43
- def verified_cert_identity?
44
- OpenSSL::SSL.verify_certificate_identity(@last_seen_cert, host)
45
- end
46
-
47
- def host
48
- parent.uri.host
49
- end
50
-
51
- def certificate_store
52
- @certificate_store ||= begin
53
- store = OpenSSL::X509::Store.new
54
- store.set_default_paths
55
- ca_file = parent.connopts.tls[:cert_chain_file]
56
- store.add_file(ca_file) if ca_file
57
- store
58
- end
59
- end
60
- end
61
-
62
- EventMachine::HttpStubConnection.include(EmHttpSslPatch)
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Faraday
4
- class Adapter
5
- class EMSynchrony < Faraday::Adapter
6
- # A parallel manager for EMSynchrony.
7
- class ParallelManager
8
- # Add requests to queue.
9
- #
10
- # @param request [EM::HttpRequest]
11
- # @param method [Symbol, String] HTTP method
12
- # @param args [Array] the rest of the positional arguments
13
- def add(request, method, *args, &block)
14
- queue << {
15
- request: request,
16
- method: method,
17
- args: args,
18
- block: block
19
- }
20
- end
21
-
22
- # Run all requests on queue with `EM::Synchrony::Multi`, wrapping
23
- # it in a reactor and fiber if needed.
24
- def run
25
- result = nil
26
- if !EM.reactor_running?
27
- EM.run do
28
- Fiber.new do
29
- result = perform
30
- EM.stop
31
- end.resume
32
- end
33
- else
34
- result = perform
35
- end
36
- result
37
- end
38
-
39
- private
40
-
41
- # The request queue.
42
- def queue
43
- @queue ||= []
44
- end
45
-
46
- # Main `EM::Synchrony::Multi` performer.
47
- def perform
48
- multi = ::EM::Synchrony::Multi.new
49
-
50
- queue.each do |item|
51
- method = "a#{item[:method]}".to_sym
52
-
53
- req = item[:request].send(method, *item[:args])
54
- req.callback(&item[:block])
55
-
56
- req_name = "req_#{multi.requests.size}".to_sym
57
- multi.add(req_name, req)
58
- end
59
-
60
- # Clear the queue, so parallel manager objects can be reused.
61
- @queue = []
62
-
63
- # Block fiber until all requests have returned.
64
- multi.perform
65
- end
66
- end
67
- end
68
- end
69
- end