faraday 2.3.0 → 2.5.2
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.
- checksums.yaml +4 -4
- data/LICENSE.md +1 -1
- data/README.md +1 -1
- data/examples/client_spec.rb +22 -0
- data/examples/client_test.rb +26 -0
- data/lib/faraday/adapter/test.rb +33 -3
- data/lib/faraday/adapter.rb +2 -2
- data/lib/faraday/connection.rb +1 -1
- data/lib/faraday/options/env.rb +18 -0
- data/lib/faraday/options/ssl_options.rb +11 -1
- data/lib/faraday/version.rb +1 -1
- data/spec/faraday/adapter/test_spec.rb +36 -0
- data/spec/faraday/connection_spec.rb +13 -7
- data/spec/faraday/options/env_spec.rb +6 -0
- data/spec/faraday/request_spec.rb +1 -0
- data/spec/faraday/utils_spec.rb +2 -1
- data/spec/support/shared_examples/adapter.rb +2 -1
- data/spec/support/shared_examples/request_method.rb +17 -3
- metadata +11 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a5bf37c33313ee7027a44ba34906e46285c4bf4c51205f58e3ad50c0d5b7a3ab
|
|
4
|
+
data.tar.gz: 1bc57e0e2909550e60575320fbaa4bb75d17e914462ed57d06fe2cccd81804fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ed0374b593a768aad905cf1c175cc86fc0892757a3b549def26e09a84016ffd6674d8e920e6c14b7709bf505a3b0a682b0191b2239b4eefe1f09ce23fad999b2
|
|
7
|
+
data.tar.gz: 59ce275bfb56375648ee5966e0fd2b7326117bd2d62789533d4856021a2c6a96f859f813dc4c9b472cd0c7579fa38765ba027193b69352a6e4740e21fd0bc3b8
|
data/LICENSE.md
CHANGED
data/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Open the issues page and check for the `help wanted` label!
|
|
|
42
42
|
But before you start coding, please read our [Contributing Guide][contributing]
|
|
43
43
|
|
|
44
44
|
## Copyright
|
|
45
|
-
© 2009 -
|
|
45
|
+
© 2009 - 2022, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
|
|
46
46
|
|
|
47
47
|
[awesome]: https://github.com/lostisland/awesome-faraday/#adapters
|
|
48
48
|
[website]: https://lostisland.github.io/faraday
|
data/examples/client_spec.rb
CHANGED
|
@@ -17,6 +17,11 @@ class Client
|
|
|
17
17
|
data = JSON.parse(res.body)
|
|
18
18
|
data['origin']
|
|
19
19
|
end
|
|
20
|
+
|
|
21
|
+
def foo(params)
|
|
22
|
+
res = @conn.post('/foo', JSON.dump(params))
|
|
23
|
+
res.status
|
|
24
|
+
end
|
|
20
25
|
end
|
|
21
26
|
|
|
22
27
|
RSpec.describe Client do
|
|
@@ -94,4 +99,21 @@ RSpec.describe Client do
|
|
|
94
99
|
stubs.verify_stubbed_calls
|
|
95
100
|
end
|
|
96
101
|
end
|
|
102
|
+
|
|
103
|
+
context 'When you want to test the body, you can use a proc as well as string' do
|
|
104
|
+
it 'tests with a string' do
|
|
105
|
+
stubs.post('/foo', '{"name":"YK"}') { [200, {}, ''] }
|
|
106
|
+
|
|
107
|
+
expect(client.foo(name: 'YK')).to eq 200
|
|
108
|
+
stubs.verify_stubbed_calls
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it 'tests with a proc' do
|
|
112
|
+
check = ->(request_body) { JSON.parse(request_body).slice('name') == { 'name' => 'YK' } }
|
|
113
|
+
stubs.post('/foo', check) { [200, {}, ''] }
|
|
114
|
+
|
|
115
|
+
expect(client.foo(name: 'YK', created_at: Time.now)).to eq 200
|
|
116
|
+
stubs.verify_stubbed_calls
|
|
117
|
+
end
|
|
118
|
+
end
|
|
97
119
|
end
|
data/examples/client_test.rb
CHANGED
|
@@ -18,6 +18,11 @@ class Client
|
|
|
18
18
|
data = JSON.parse(res.body)
|
|
19
19
|
data['origin']
|
|
20
20
|
end
|
|
21
|
+
|
|
22
|
+
def foo(params)
|
|
23
|
+
res = @conn.post('/foo', JSON.dump(params))
|
|
24
|
+
res.status
|
|
25
|
+
end
|
|
21
26
|
end
|
|
22
27
|
|
|
23
28
|
# Example API client test
|
|
@@ -109,6 +114,27 @@ class ClientTest < Test::Unit::TestCase
|
|
|
109
114
|
stubs.verify_stubbed_calls
|
|
110
115
|
end
|
|
111
116
|
|
|
117
|
+
def test_with_string_body
|
|
118
|
+
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
|
119
|
+
stub.post('/foo', '{"name":"YK"}') { [200, {}, ''] }
|
|
120
|
+
end
|
|
121
|
+
cli = client(stubs)
|
|
122
|
+
assert_equal 200, cli.foo(name: 'YK')
|
|
123
|
+
|
|
124
|
+
stubs.verify_stubbed_calls
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def test_with_proc_body
|
|
128
|
+
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
|
|
129
|
+
check = ->(request_body) { JSON.parse(request_body).slice('name') == { 'name' => 'YK' } }
|
|
130
|
+
stub.post('/foo', check) { [200, {}, ''] }
|
|
131
|
+
end
|
|
132
|
+
cli = client(stubs)
|
|
133
|
+
assert_equal 200, cli.foo(name: 'YK', created_at: Time.now)
|
|
134
|
+
|
|
135
|
+
stubs.verify_stubbed_calls
|
|
136
|
+
end
|
|
137
|
+
|
|
112
138
|
def client(stubs)
|
|
113
139
|
conn = Faraday.new do |builder|
|
|
114
140
|
builder.adapter :test, stubs
|
data/lib/faraday/adapter/test.rb
CHANGED
|
@@ -26,6 +26,15 @@ module Faraday
|
|
|
26
26
|
# ]
|
|
27
27
|
# end
|
|
28
28
|
#
|
|
29
|
+
# # Test the request body is the same as the stubbed body
|
|
30
|
+
# stub.post('/bar', 'name=YK&word=call') { [200, {}, ''] }
|
|
31
|
+
#
|
|
32
|
+
# # You can pass a proc as a stubbed body and check the request body in your way.
|
|
33
|
+
# # In this case, the proc should return true or false.
|
|
34
|
+
# stub.post('/foo', ->(request_body) do
|
|
35
|
+
# JSON.parse(request_body).slice('name') == { 'name' => 'YK' } }) { [200, {}, '']
|
|
36
|
+
# end
|
|
37
|
+
#
|
|
29
38
|
# # You can set strict_mode to exactly match the stubbed requests.
|
|
30
39
|
# stub.strict_mode = true
|
|
31
40
|
# end
|
|
@@ -42,6 +51,12 @@ module Faraday
|
|
|
42
51
|
#
|
|
43
52
|
# resp = test.get '/items/2'
|
|
44
53
|
# resp.body # => 'showing item: 2'
|
|
54
|
+
#
|
|
55
|
+
# resp = test.post '/bar', 'name=YK&word=call'
|
|
56
|
+
# resp.status # => 200
|
|
57
|
+
#
|
|
58
|
+
# resp = test.post '/foo', JSON.dump(name: 'YK', created_at: Time.now)
|
|
59
|
+
# resp.status # => 200
|
|
45
60
|
class Test < Faraday::Adapter
|
|
46
61
|
attr_accessor :stubs
|
|
47
62
|
|
|
@@ -181,7 +196,7 @@ module Faraday
|
|
|
181
196
|
[(host.nil? || host == request_host) &&
|
|
182
197
|
path_match?(request_path, meta) &&
|
|
183
198
|
params_match?(env) &&
|
|
184
|
-
(
|
|
199
|
+
body_match?(request_body) &&
|
|
185
200
|
headers_match?(request_headers), meta]
|
|
186
201
|
end
|
|
187
202
|
|
|
@@ -222,6 +237,17 @@ module Faraday
|
|
|
222
237
|
end
|
|
223
238
|
end
|
|
224
239
|
|
|
240
|
+
def body_match?(request_body)
|
|
241
|
+
return true if body.to_s.size.zero?
|
|
242
|
+
|
|
243
|
+
case body
|
|
244
|
+
when Proc
|
|
245
|
+
body.call(request_body)
|
|
246
|
+
else
|
|
247
|
+
request_body == body
|
|
248
|
+
end
|
|
249
|
+
end
|
|
250
|
+
|
|
225
251
|
def to_s
|
|
226
252
|
"#{path} #{body}"
|
|
227
253
|
end
|
|
@@ -246,7 +272,7 @@ module Faraday
|
|
|
246
272
|
stub, meta = stubs.match(env)
|
|
247
273
|
|
|
248
274
|
unless stub
|
|
249
|
-
raise Stubs::NotFound, "no stubbed request for #{env[:method]} "\
|
|
275
|
+
raise Stubs::NotFound, "no stubbed request for #{env[:method]} " \
|
|
250
276
|
"#{env[:url]} #{env[:body]}"
|
|
251
277
|
end
|
|
252
278
|
|
|
@@ -257,7 +283,11 @@ module Faraday
|
|
|
257
283
|
else
|
|
258
284
|
stub.block.call(env, meta)
|
|
259
285
|
end
|
|
260
|
-
|
|
286
|
+
|
|
287
|
+
# We need to explicitly pass `reason_phrase = nil` here to avoid keyword args conflicts.
|
|
288
|
+
# See https://github.com/lostisland/faraday/issues/1444
|
|
289
|
+
# TODO: remove `nil` explicit reason_phrase once Ruby 3.0 becomes minimum req. version
|
|
290
|
+
save_response(env, status, body, headers, nil)
|
|
261
291
|
|
|
262
292
|
@app.call(env)
|
|
263
293
|
end
|
data/lib/faraday/adapter.rb
CHANGED
|
@@ -59,7 +59,7 @@ module Faraday
|
|
|
59
59
|
|
|
60
60
|
private
|
|
61
61
|
|
|
62
|
-
def save_response(env, status, body, headers = nil, reason_phrase = nil)
|
|
62
|
+
def save_response(env, status, body, headers = nil, reason_phrase = nil, finished: true)
|
|
63
63
|
env.status = status
|
|
64
64
|
env.body = body
|
|
65
65
|
env.reason_phrase = reason_phrase&.to_s&.strip
|
|
@@ -68,7 +68,7 @@ module Faraday
|
|
|
68
68
|
yield(response_headers) if block_given?
|
|
69
69
|
end
|
|
70
70
|
|
|
71
|
-
env.response.finish(env) unless env.parallel?
|
|
71
|
+
env.response.finish(env) unless env.parallel? || !finished
|
|
72
72
|
env.response
|
|
73
73
|
end
|
|
74
74
|
|
data/lib/faraday/connection.rb
CHANGED
data/lib/faraday/options/env.rb
CHANGED
|
@@ -157,6 +157,24 @@ module Faraday
|
|
|
157
157
|
%(#<#{self.class}#{attrs.join(' ')}>)
|
|
158
158
|
end
|
|
159
159
|
|
|
160
|
+
def stream_response?
|
|
161
|
+
request.stream_response?
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
def stream_response(&block)
|
|
165
|
+
size = 0
|
|
166
|
+
yielded = false
|
|
167
|
+
block_result = block.call do |chunk| # rubocop:disable Performance/RedundantBlockCall
|
|
168
|
+
if chunk.bytesize.positive? || size.positive?
|
|
169
|
+
yielded = true
|
|
170
|
+
size += chunk.bytesize
|
|
171
|
+
request.on_data.call(chunk, size, self)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
request.on_data.call(+'', 0, self) unless yielded
|
|
175
|
+
block_result
|
|
176
|
+
end
|
|
177
|
+
|
|
160
178
|
# @private
|
|
161
179
|
def custom_members
|
|
162
180
|
@custom_members ||= {}
|
|
@@ -6,6 +6,10 @@ module Faraday
|
|
|
6
6
|
# @!attribute verify
|
|
7
7
|
# @return [Boolean] whether to verify SSL certificates or not
|
|
8
8
|
#
|
|
9
|
+
# @!attribute verify_hostname
|
|
10
|
+
# @return [Boolean] whether to enable hostname verification on server certificates
|
|
11
|
+
# during the handshake or not (see https://github.com/ruby/openssl/pull/60)
|
|
12
|
+
#
|
|
9
13
|
# @!attribute ca_file
|
|
10
14
|
# @return [String] CA file
|
|
11
15
|
#
|
|
@@ -41,7 +45,8 @@ module Faraday
|
|
|
41
45
|
#
|
|
42
46
|
# @!attribute max_version
|
|
43
47
|
# @return [String, Symbol] maximum SSL version (see https://ruby-doc.org/stdlib-2.5.1/libdoc/openssl/rdoc/OpenSSL/SSL/SSLContext.html#method-i-max_version-3D)
|
|
44
|
-
class SSLOptions < Options.new(:verify, :
|
|
48
|
+
class SSLOptions < Options.new(:verify, :verify_hostname,
|
|
49
|
+
:ca_file, :ca_path, :verify_mode,
|
|
45
50
|
:cert_store, :client_cert, :client_key,
|
|
46
51
|
:certificate, :private_key, :verify_depth,
|
|
47
52
|
:version, :min_version, :max_version)
|
|
@@ -55,5 +60,10 @@ module Faraday
|
|
|
55
60
|
def disable?
|
|
56
61
|
!verify?
|
|
57
62
|
end
|
|
63
|
+
|
|
64
|
+
# @return [Boolean] true if should verify_hostname
|
|
65
|
+
def verify_hostname?
|
|
66
|
+
verify_hostname != false
|
|
67
|
+
end
|
|
58
68
|
end
|
|
59
69
|
end
|
data/lib/faraday/version.rb
CHANGED
|
@@ -373,5 +373,41 @@ RSpec.describe Faraday::Adapter::Test do
|
|
|
373
373
|
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent' }
|
|
374
374
|
it_behaves_like 'does not raise NotFound even when headers do not satisfy the strict check', '/with_user_agent', { authorization: 'Bearer m_ck', user_agent: 'My Agent', x_special: 'special' }
|
|
375
375
|
end
|
|
376
|
+
|
|
377
|
+
describe 'body_match?' do
|
|
378
|
+
let(:stubs) do
|
|
379
|
+
described_class::Stubs.new do |stubs|
|
|
380
|
+
stubs.post('/no_check') { [200, {}, 'ok'] }
|
|
381
|
+
stubs.post('/with_string', 'abc') { [200, {}, 'ok'] }
|
|
382
|
+
stubs.post(
|
|
383
|
+
'/with_proc',
|
|
384
|
+
->(request_body) { JSON.parse(request_body, symbolize_names: true) == { x: '!', a: [{ m: [{ a: true }], n: 123 }] } },
|
|
385
|
+
{ content_type: 'application/json' }
|
|
386
|
+
) do
|
|
387
|
+
[200, {}, 'ok']
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
end
|
|
391
|
+
|
|
392
|
+
context 'when trying without any args for body' do
|
|
393
|
+
subject(:without_body) { connection.post('/no_check') }
|
|
394
|
+
|
|
395
|
+
it { expect(without_body.status).to eq 200 }
|
|
396
|
+
end
|
|
397
|
+
|
|
398
|
+
context 'when trying with string body stubs' do
|
|
399
|
+
subject(:with_string) { connection.post('/with_string', 'abc') }
|
|
400
|
+
|
|
401
|
+
it { expect(with_string.status).to eq 200 }
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
context 'when trying with proc body stubs' do
|
|
405
|
+
subject(:with_proc) do
|
|
406
|
+
connection.post('/with_proc', JSON.dump(a: [{ n: 123, m: [{ a: true }] }], x: '!'), { 'Content-Type' => 'application/json' })
|
|
407
|
+
end
|
|
408
|
+
|
|
409
|
+
it { expect(with_proc.status).to eq 200 }
|
|
410
|
+
end
|
|
411
|
+
end
|
|
376
412
|
end
|
|
377
413
|
end
|
|
@@ -6,7 +6,7 @@ class CustomEncoder
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
def decode(params)
|
|
9
|
-
params.split(',').
|
|
9
|
+
params.split(',').to_h { |pair| pair.split('-') }
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -131,6 +131,12 @@ RSpec.describe Faraday::Connection do
|
|
|
131
131
|
it { expect(subject.ssl.verify?).to be_falsey }
|
|
132
132
|
end
|
|
133
133
|
|
|
134
|
+
context 'with verify_hostname false' do
|
|
135
|
+
let(:options) { { ssl: { verify_hostname: false } } }
|
|
136
|
+
|
|
137
|
+
it { expect(subject.ssl.verify_hostname?).to be_falsey }
|
|
138
|
+
end
|
|
139
|
+
|
|
134
140
|
context 'with empty block' do
|
|
135
141
|
let(:conn) { Faraday::Connection.new {} }
|
|
136
142
|
|
|
@@ -505,7 +511,7 @@ RSpec.describe Faraday::Connection do
|
|
|
505
511
|
it 'uses env http_proxy' do
|
|
506
512
|
with_env 'http_proxy' => 'http://proxy.com' do
|
|
507
513
|
conn = Faraday.new
|
|
508
|
-
expect(conn.instance_variable_get(
|
|
514
|
+
expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey
|
|
509
515
|
expect(conn.proxy_for_request('http://google.co.uk').host).to eq('proxy.com')
|
|
510
516
|
end
|
|
511
517
|
end
|
|
@@ -513,7 +519,7 @@ RSpec.describe Faraday::Connection do
|
|
|
513
519
|
it 'uses processes no_proxy before http_proxy' do
|
|
514
520
|
with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'google.co.uk' do
|
|
515
521
|
conn = Faraday.new
|
|
516
|
-
expect(conn.instance_variable_get(
|
|
522
|
+
expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey
|
|
517
523
|
expect(conn.proxy_for_request('http://google.co.uk')).to be_nil
|
|
518
524
|
end
|
|
519
525
|
end
|
|
@@ -521,7 +527,7 @@ RSpec.describe Faraday::Connection do
|
|
|
521
527
|
it 'uses env https_proxy' do
|
|
522
528
|
with_env 'https_proxy' => 'https://proxy.com' do
|
|
523
529
|
conn = Faraday.new
|
|
524
|
-
expect(conn.instance_variable_get(
|
|
530
|
+
expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey
|
|
525
531
|
expect(conn.proxy_for_request('https://google.co.uk').host).to eq('proxy.com')
|
|
526
532
|
end
|
|
527
533
|
end
|
|
@@ -529,7 +535,7 @@ RSpec.describe Faraday::Connection do
|
|
|
529
535
|
it 'uses processes no_proxy before https_proxy' do
|
|
530
536
|
with_env 'https_proxy' => 'https://proxy.com', 'no_proxy' => 'google.co.uk' do
|
|
531
537
|
conn = Faraday.new
|
|
532
|
-
expect(conn.instance_variable_get(
|
|
538
|
+
expect(conn.instance_variable_get(:@manual_proxy)).to be_falsey
|
|
533
539
|
expect(conn.proxy_for_request('https://google.co.uk')).to be_nil
|
|
534
540
|
end
|
|
535
541
|
end
|
|
@@ -539,7 +545,7 @@ RSpec.describe Faraday::Connection do
|
|
|
539
545
|
conn = Faraday.new
|
|
540
546
|
conn.proxy = 'http://proxy2.com'
|
|
541
547
|
|
|
542
|
-
expect(conn.instance_variable_get(
|
|
548
|
+
expect(conn.instance_variable_get(:@manual_proxy)).to be_truthy
|
|
543
549
|
expect(conn.proxy_for_request('https://google.co.uk').host).to eq('proxy2.com')
|
|
544
550
|
end
|
|
545
551
|
end
|
|
@@ -574,7 +580,7 @@ RSpec.describe Faraday::Connection do
|
|
|
574
580
|
end
|
|
575
581
|
|
|
576
582
|
conn.get(url)
|
|
577
|
-
expect(conn.instance_variable_get(
|
|
583
|
+
expect(conn.instance_variable_get(:@temp_proxy)).to be_nil
|
|
578
584
|
end
|
|
579
585
|
|
|
580
586
|
it 'dynamically check no proxy' do
|
|
@@ -27,6 +27,12 @@ RSpec.describe Faraday::Env do
|
|
|
27
27
|
expect(ssl.fetch(:verify, true)).to be_falsey
|
|
28
28
|
end
|
|
29
29
|
|
|
30
|
+
it 'handle verify_hostname when fetching' do
|
|
31
|
+
ssl = Faraday::SSLOptions.new
|
|
32
|
+
ssl.verify_hostname = true
|
|
33
|
+
expect(ssl.fetch(:verify_hostname, false)).to be_truthy
|
|
34
|
+
end
|
|
35
|
+
|
|
30
36
|
it 'retains custom members' do
|
|
31
37
|
env[:foo] = 'custom 1'
|
|
32
38
|
env[:bar] = :custom2
|
|
@@ -14,6 +14,7 @@ RSpec.describe Faraday::Request do
|
|
|
14
14
|
context 'when nothing particular is configured' do
|
|
15
15
|
it { expect(subject.http_method).to eq(:get) }
|
|
16
16
|
it { expect(subject.to_env(conn).ssl.verify).to be_falsey }
|
|
17
|
+
it { expect(subject.to_env(conn).ssl.verify_hostname).to be_falsey }
|
|
17
18
|
end
|
|
18
19
|
|
|
19
20
|
context 'when HTTP method is post' do
|
data/spec/faraday/utils_spec.rb
CHANGED
|
@@ -37,7 +37,8 @@ shared_examples 'adapter examples' do |**options|
|
|
|
37
37
|
|
|
38
38
|
let(:conn) do
|
|
39
39
|
conn_options[:ssl] ||= {}
|
|
40
|
-
conn_options[:ssl][:ca_file] ||= ENV
|
|
40
|
+
conn_options[:ssl][:ca_file] ||= ENV.fetch('SSL_FILE', nil)
|
|
41
|
+
conn_options[:ssl][:verify_hostname] ||= ENV['SSL_VERIFY_HOSTNAME'] == 'yes'
|
|
41
42
|
|
|
42
43
|
Faraday.new(remote, conn_options) do |conn|
|
|
43
44
|
conn.request :url_encoded
|
|
@@ -153,12 +153,19 @@ shared_examples 'a request method' do |http_method|
|
|
|
153
153
|
let(:streamed) { [] }
|
|
154
154
|
|
|
155
155
|
context 'when response is empty' do
|
|
156
|
-
it do
|
|
156
|
+
it 'handles streaming' do
|
|
157
|
+
env = nil
|
|
157
158
|
conn.public_send(http_method, '/') do |req|
|
|
158
|
-
req.options.on_data = proc
|
|
159
|
+
req.options.on_data = proc do |chunk, size, block_env|
|
|
160
|
+
streamed << [chunk, size]
|
|
161
|
+
env ||= block_env
|
|
162
|
+
end
|
|
159
163
|
end
|
|
160
164
|
|
|
161
165
|
expect(streamed).to eq([['', 0]])
|
|
166
|
+
# TODO: enable this after updating all existing adapters to the new streaming API
|
|
167
|
+
# expect(env).to be_a(Faraday::Env)
|
|
168
|
+
# expect(env.status).to eq(200)
|
|
162
169
|
end
|
|
163
170
|
end
|
|
164
171
|
|
|
@@ -166,12 +173,19 @@ shared_examples 'a request method' do |http_method|
|
|
|
166
173
|
before { request_stub.to_return(body: big_string) }
|
|
167
174
|
|
|
168
175
|
it 'handles streaming' do
|
|
176
|
+
env = nil
|
|
169
177
|
response = conn.public_send(http_method, '/') do |req|
|
|
170
|
-
req.options.on_data = proc
|
|
178
|
+
req.options.on_data = proc do |chunk, size, block_env|
|
|
179
|
+
streamed << [chunk, size]
|
|
180
|
+
env ||= block_env
|
|
181
|
+
end
|
|
171
182
|
end
|
|
172
183
|
|
|
173
184
|
expect(response.body).to eq('')
|
|
174
185
|
check_streaming_response(streamed, chunk_size: 16 * 1024)
|
|
186
|
+
# TODO: enable this after updating all existing adapters to the new streaming API
|
|
187
|
+
# expect(env).to be_a(Faraday::Env)
|
|
188
|
+
# expect(env.status).to eq(200)
|
|
175
189
|
end
|
|
176
190
|
end
|
|
177
191
|
end
|
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: 2.
|
|
4
|
+
version: 2.5.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- "@technoweenie"
|
|
@@ -10,22 +10,28 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2022-
|
|
13
|
+
date: 2022-08-11 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: faraday-net_http
|
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
|
18
18
|
requirements:
|
|
19
|
-
- - "
|
|
19
|
+
- - ">="
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
21
|
version: '2.0'
|
|
22
|
+
- - "<"
|
|
23
|
+
- !ruby/object:Gem::Version
|
|
24
|
+
version: '3.1'
|
|
22
25
|
type: :runtime
|
|
23
26
|
prerelease: false
|
|
24
27
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
28
|
requirements:
|
|
26
|
-
- - "
|
|
29
|
+
- - ">="
|
|
27
30
|
- !ruby/object:Gem::Version
|
|
28
31
|
version: '2.0'
|
|
32
|
+
- - "<"
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '3.1'
|
|
29
35
|
- !ruby/object:Gem::Dependency
|
|
30
36
|
name: ruby2_keywords
|
|
31
37
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -125,7 +131,7 @@ licenses:
|
|
|
125
131
|
- MIT
|
|
126
132
|
metadata:
|
|
127
133
|
homepage_uri: https://lostisland.github.io/faraday
|
|
128
|
-
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v2.
|
|
134
|
+
changelog_uri: https://github.com/lostisland/faraday/releases/tag/v2.5.2
|
|
129
135
|
source_code_uri: https://github.com/lostisland/faraday
|
|
130
136
|
bug_tracker_uri: https://github.com/lostisland/faraday/issues
|
|
131
137
|
post_install_message:
|