faraday 2.0.0.alpha.pre.4 → 2.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +77 -3
- data/README.md +0 -5
- data/examples/client_spec.rb +19 -19
- data/examples/client_test.rb +22 -22
- data/lib/faraday/adapter/test.rb +8 -4
- data/lib/faraday/connection.rb +8 -8
- data/lib/faraday/error.rb +2 -8
- data/lib/faraday/middleware_registry.rb +19 -1
- data/lib/faraday/rack_builder.rb +23 -20
- data/lib/faraday/request.rb +0 -2
- data/lib/faraday/version.rb +1 -1
- data/lib/faraday.rb +7 -4
- data/spec/faraday/connection_spec.rb +38 -35
- data/spec/faraday/middleware_registry_spec.rb +31 -0
- data/spec/faraday/rack_builder_spec.rb +29 -19
- data/spec/faraday/request/url_encoded_spec.rb +0 -1
- data/spec/faraday/request_spec.rb +4 -4
- data/spec/faraday/utils/headers_spec.rb +2 -2
- data/spec/support/helper_methods.rb +0 -37
- data/spec/support/shared_examples/adapter.rb +0 -1
- data/spec/support/shared_examples/request_method.rb +0 -13
- metadata +11 -23
- data/lib/faraday/file_part.rb +0 -122
- data/lib/faraday/param_part.rb +0 -53
- data/lib/faraday/request/multipart.rb +0 -108
- data/lib/faraday/request/retry.rb +0 -241
- data/spec/faraday/composite_read_io_spec.rb +0 -80
- data/spec/faraday/request/multipart_spec.rb +0 -302
- data/spec/faraday/request/retry_spec.rb +0 -254
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: eaa5f5a3ea91b21a40ad7872a8eda558226e1d5f4d8f9875ecf9ece44e0181e4
|
|
4
|
+
data.tar.gz: 51af319bffd649b4b828cfed91b2a419211b1c2b171a3016949388b1a749c1ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b68ff300b45dbe3a7f85ab40f7a23c86b2c373a1672841a96230179f415da3f3bcf2123251235c4399575826043f7221fe81615171fbfd3af4d33a21410f8670
|
|
7
|
+
data.tar.gz: 41cd332afaf70ea6e306247b3f2ea9d9e38ed248e381aef798f914773b1dd7c7473ab9a6fcb5e03cb8e7163c0f81f26e813877bb5f7412964e55ddb9866ffe20
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,79 @@
|
|
|
1
1
|
# Faraday Changelog
|
|
2
2
|
|
|
3
|
+
## The changelog has moved!
|
|
4
|
+
|
|
5
|
+
This file is not being updated anymore. Instead, please check the [Releases](https://github.com/lostisland/faraday/releases) page.
|
|
6
|
+
|
|
7
|
+
## [2.1.0](https://github.com/lostisland/faraday/compare/v2.0.1...v2.1.0) (2022-01-15)
|
|
8
|
+
|
|
9
|
+
* Fix test adapter thread safety by @iMacTia in [#1380](https://github.com/lostisland/faraday/pull/1380)
|
|
10
|
+
* Add default adapter options by @hirasawayuki in [#1382](https://github.com/lostisland/faraday/pull/1382)
|
|
11
|
+
* CI: Add Ruby 3.1 to matrix by @petergoldstein in [#1374](https://github.com/lostisland/faraday/pull/1374)
|
|
12
|
+
* docs: fix regex pattern in logger.md examples by @hirasawayuki in [#1378](https://github.com/lostisland/faraday/pull/1378)
|
|
13
|
+
|
|
14
|
+
## [2.0.1](https://github.com/lostisland/faraday/compare/v2.0.0...v2.0.1) (2022-01-05)
|
|
15
|
+
|
|
16
|
+
* Re-add `faraday-net_http` as default adapter by @iMacTia in [#1366](https://github.com/lostisland/faraday/pull/1366)
|
|
17
|
+
* Updated sample format in UPGRADING.md by @vimutter in [#1361](https://github.com/lostisland/faraday/pull/1361)
|
|
18
|
+
* docs: Make UPGRADING examples more copyable by @olleolleolle in [#1363](https://github.com/lostisland/faraday/pull/1363)
|
|
19
|
+
|
|
20
|
+
## [2.0.0](https://github.com/lostisland/faraday/compare/v1.8.0...v2.0.0) (2022-01-04)
|
|
21
|
+
|
|
22
|
+
The next major release is here, and it comes almost 2 years after the release of v1.0!
|
|
23
|
+
|
|
24
|
+
This release changes the way you use Faraday and embraces a new paradigm of Faraday as an ecosystem, rather than a library.
|
|
25
|
+
|
|
26
|
+
What does that mean? It means that Faraday is less of a bundled tool and more of a framework for the community to build on top of.
|
|
27
|
+
|
|
28
|
+
As a result, all adapters and some middleware have moved out and are now shipped as standalone gems 🙌!
|
|
29
|
+
|
|
30
|
+
But this doesn't mean that upgrading from Faraday 1.x to Faraday 2.0 should be hard, in fact we've listed everything you need to do in the [UPGRADING.md](https://github.com/lostisland/faraday/blob/main/UPGRADING.md) doc.
|
|
31
|
+
|
|
32
|
+
Moreover, we've setup a new [awesome-faraday](https://github.com/lostisland/awesome-faraday) repository that will showcase a curated list of adapters and middleware 😎.
|
|
33
|
+
|
|
34
|
+
This release was the result of the efforts of the core team and all the contributors, new and old, that have helped achieve this milestone 👏.
|
|
35
|
+
|
|
36
|
+
## What's Changed
|
|
37
|
+
|
|
38
|
+
* Autoloading, dependency loading and middleware registry cleanup by @iMacTia in [#1301](https://github.com/lostisland/faraday/pull/1301)
|
|
39
|
+
* Move JSON middleware (request and response) from faraday_middleware by @iMacTia in [#1300](https://github.com/lostisland/faraday/pull/1300)
|
|
40
|
+
* Remove deprecated `Faraday::Request#method` by @olleolleolle in [#1303](https://github.com/lostisland/faraday/pull/1303)
|
|
41
|
+
* Remove deprecated `Faraday::UploadIO` by @iMacTia in [#1307](https://github.com/lostisland/faraday/pull/1307)
|
|
42
|
+
* [1.x] Deprecate Authorization helpers in `Faraday::Connection` by @iMacTia in [#1306](https://github.com/lostisland/faraday/pull/1306)
|
|
43
|
+
* Drop deprecated auth helpers from Connection and refactor auth middleware by @iMacTia in [#1308](https://github.com/lostisland/faraday/pull/1308)
|
|
44
|
+
* Add Faraday 1.x examples in authentication.md docs by @iMacTia in [#1320](https://github.com/lostisland/faraday/pull/1320)
|
|
45
|
+
* Fix passing a URL with embedded basic auth by @iMacTia in [#1324](https://github.com/lostisland/faraday/pull/1324)
|
|
46
|
+
* Register JSON middleware by @mollerhoj in [#1331](https://github.com/lostisland/faraday/pull/1331)
|
|
47
|
+
* Retry middleware should handle string exception class name consistently by @jrochkind in [#1334](https://github.com/lostisland/faraday/pull/1334)
|
|
48
|
+
* Improve request info in exceptions raised by RaiseError Middleware by @willianzocolau in [#1335](https://github.com/lostisland/faraday/pull/1335)
|
|
49
|
+
* Remove net-http adapter and update docs by @iMacTia in [#1336](https://github.com/lostisland/faraday/pull/1336)
|
|
50
|
+
* Explain plan for faraday_middleware in UPGRADING.md by @iMacTia in [#1339](https://github.com/lostisland/faraday/pull/1339)
|
|
51
|
+
* Scripts folder cleanup by @iMacTia in [#1340](https://github.com/lostisland/faraday/pull/1340)
|
|
52
|
+
* Replace `Hash#merge` with `Utils#deep_merge` for connection options by @xkwd in [#1343](https://github.com/lostisland/faraday/pull/1343)
|
|
53
|
+
* Callable authorizers by @sled in [#1345](https://github.com/lostisland/faraday/pull/1345)
|
|
54
|
+
* Default value for exc error by @DariuszMusielak in [#1351](https://github.com/lostisland/faraday/pull/1351)
|
|
55
|
+
* Don't call `retry_block` unless a retry is going to happen by @jrochkind in [#1350](https://github.com/lostisland/faraday/pull/1350)
|
|
56
|
+
* Improve documentation for v2 by @iMacTia in [#1353](https://github.com/lostisland/faraday/pull/1353)
|
|
57
|
+
* Remove default `default_adapter` (yes, you read that right) by @iMacTia in [#1354](https://github.com/lostisland/faraday/pull/1354)
|
|
58
|
+
* Remove retry middleware by @iMacTia in [#1356](https://github.com/lostisland/faraday/pull/1356)
|
|
59
|
+
* Remove multipart middleware and all its documentation and tests by @iMacTia in [#1357](https://github.com/lostisland/faraday/pull/1357)
|
|
60
|
+
|
|
61
|
+
## [1.9.3](https://github.com/lostisland/faraday/compare/v1.9.2...v1.9.3) (2022-01-06)
|
|
62
|
+
|
|
63
|
+
* Re-add support for Ruby 2.4+ by @iMacTia in [#1371](https://github.com/lostisland/faraday/pull/1371)
|
|
64
|
+
|
|
65
|
+
## [1.9.2](https://github.com/lostisland/faraday/compare/v1.9.1...v1.9.2) (2022-01-06)
|
|
66
|
+
|
|
67
|
+
* Add alias with legacy name to gemified middleware by @iMacTia in [#1372](https://github.com/lostisland/faraday/pull/1372)
|
|
68
|
+
|
|
69
|
+
## [1.9.1](https://github.com/lostisland/faraday/compare/v1.9.0...v1.9.1) (2022-01-06)
|
|
70
|
+
|
|
71
|
+
* Update adapter dependencies in Gemspec by @iMacTia in [#1370](https://github.com/lostisland/faraday/pull/1370)
|
|
72
|
+
|
|
73
|
+
## [1.9.0](https://github.com/lostisland/faraday/compare/v1.8.0...v1.9.0) (2022-01-06)
|
|
74
|
+
|
|
75
|
+
* Use external multipart and retry middleware by @iMacTia in [#1367](https://github.com/lostisland/faraday/pull/1367)
|
|
76
|
+
|
|
3
77
|
## [1.8.0](https://github.com/lostisland/faraday/releases/tag/v1.8.0) (2021-09-18)
|
|
4
78
|
|
|
5
79
|
### Features
|
|
@@ -65,7 +139,7 @@
|
|
|
65
139
|
|
|
66
140
|
### Highlights
|
|
67
141
|
|
|
68
|
-
With this release, we continue the work of gradually moving out adapters into their own gems 🎉
|
|
142
|
+
With this release, we continue the work of gradually moving out adapters into their own gems 🎉
|
|
69
143
|
Thanks to @MikeRogers0 for helping the Faraday team in progressing with this quest 👏
|
|
70
144
|
|
|
71
145
|
And thanks to @olleolleolle efforts, Faraday is becoming more inclusive than ever 🤗
|
|
@@ -112,7 +186,7 @@ Checkout the "Misc" section below for more details 🙌 !
|
|
|
112
186
|
## [v1.3.0](https://github.com/lostisland/faraday/releases/tag/v1.3.0) (2020-12-31)
|
|
113
187
|
|
|
114
188
|
### Highlights
|
|
115
|
-
Faraday v1.3.0 is the first release to officially support Ruby 3.0 in the CI pipeline 🎉 🍾!
|
|
189
|
+
Faraday v1.3.0 is the first release to officially support Ruby 3.0 in the CI pipeline 🎉 🍾!
|
|
116
190
|
|
|
117
191
|
This is also the first release with a previously "included" adapter (Net::HTTP) being isolated into a [separate gem](https://github.com/lostisland/faraday-net_http) 🎊!
|
|
118
192
|
The new adapter is added to Faraday as a dependency for now, so that means full backwards-compatibility, but just to be safe be careful when upgrading!
|
|
@@ -203,7 +277,7 @@ Many thanks to the Faraday Team, @JanDintel and everyone who attended the [ROSS
|
|
|
203
277
|
* Allows `parse` method to be private/protected in response middleware (#1123)
|
|
204
278
|
* Encode Spaces in Query Strings as '%20' Instead of '+' (#1125)
|
|
205
279
|
* Limits rack to v2.0.x (#1127)
|
|
206
|
-
* Adapter Registry reads also use mutex (#1136)
|
|
280
|
+
* Adapter Registry reads also use mutex (#1136)
|
|
207
281
|
|
|
208
282
|
### Documentation
|
|
209
283
|
|
data/README.md
CHANGED
|
@@ -10,11 +10,6 @@ adapters (such as Net::HTTP) and embraces the concept of Rack middleware when pr
|
|
|
10
10
|
You probably don't want to use Faraday directly in your project, as it will lack an actual client library to perform
|
|
11
11
|
requests. Instead, you probably want to have a look at [Awesome Faraday][awesome] for a list of available adapters.
|
|
12
12
|
|
|
13
|
-
## FARADAY 2.0
|
|
14
|
-
|
|
15
|
-
You're reading the README and looking at the code of our upcoming v2.0 release (the `main` branch, currently in alpha).
|
|
16
|
-
If you're here to read about our latest v1.x release, then please head over to the [1.x branch](https://github.com/lostisland/faraday/tree/1.x).
|
|
17
|
-
|
|
18
13
|
## Getting Started
|
|
19
14
|
|
|
20
15
|
The best starting point is the [Faraday Website][website], with its introduction and explanation.
|
data/examples/client_spec.rb
CHANGED
|
@@ -12,10 +12,10 @@ class Client
|
|
|
12
12
|
@conn = conn
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
def
|
|
15
|
+
def httpbingo(jname, params: {})
|
|
16
16
|
res = @conn.get("/#{jname}", params)
|
|
17
17
|
data = JSON.parse(res.body)
|
|
18
|
-
data['
|
|
18
|
+
data['origin']
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
@@ -24,42 +24,42 @@ RSpec.describe Client do
|
|
|
24
24
|
let(:conn) { Faraday.new { |b| b.adapter(:test, stubs) } }
|
|
25
25
|
let(:client) { Client.new(conn) }
|
|
26
26
|
|
|
27
|
-
it 'parses
|
|
28
|
-
stubs.get('/
|
|
27
|
+
it 'parses origin' do
|
|
28
|
+
stubs.get('/ip') do |env|
|
|
29
29
|
# optional: you can inspect the Faraday::Env
|
|
30
|
-
expect(env.url.path).to eq('/
|
|
30
|
+
expect(env.url.path).to eq('/ip')
|
|
31
31
|
[
|
|
32
32
|
200,
|
|
33
33
|
{ 'Content-Type': 'application/javascript' },
|
|
34
|
-
'{"
|
|
34
|
+
'{"origin": "127.0.0.1"}'
|
|
35
35
|
]
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
# uncomment to trigger stubs.verify_stubbed_calls failure
|
|
39
39
|
# stubs.get('/unused') { [404, {}, ''] }
|
|
40
40
|
|
|
41
|
-
expect(client.
|
|
41
|
+
expect(client.httpbingo('ip')).to eq('127.0.0.1')
|
|
42
42
|
stubs.verify_stubbed_calls
|
|
43
43
|
end
|
|
44
44
|
|
|
45
45
|
it 'handles 404' do
|
|
46
|
-
stubs.get('/
|
|
46
|
+
stubs.get('/api') do
|
|
47
47
|
[
|
|
48
48
|
404,
|
|
49
49
|
{ 'Content-Type': 'application/javascript' },
|
|
50
50
|
'{}'
|
|
51
51
|
]
|
|
52
52
|
end
|
|
53
|
-
expect(client.
|
|
53
|
+
expect(client.httpbingo('api')).to be_nil
|
|
54
54
|
stubs.verify_stubbed_calls
|
|
55
55
|
end
|
|
56
56
|
|
|
57
57
|
it 'handles exception' do
|
|
58
|
-
stubs.get('/
|
|
59
|
-
raise Faraday::ConnectionFailed
|
|
58
|
+
stubs.get('/api') do
|
|
59
|
+
raise Faraday::ConnectionFailed
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
expect { client.
|
|
62
|
+
expect { client.httpbingo('api') }.to raise_error(Faraday::ConnectionFailed)
|
|
63
63
|
stubs.verify_stubbed_calls
|
|
64
64
|
end
|
|
65
65
|
|
|
@@ -67,17 +67,17 @@ RSpec.describe Client do
|
|
|
67
67
|
let(:stubs) { Faraday::Adapter::Test::Stubs.new(strict_mode: true) }
|
|
68
68
|
|
|
69
69
|
it 'verifies the all parameter values are identical' do
|
|
70
|
-
stubs.get('/
|
|
70
|
+
stubs.get('/api?abc=123') do
|
|
71
71
|
[
|
|
72
72
|
200,
|
|
73
73
|
{ 'Content-Type': 'application/javascript' },
|
|
74
|
-
'{"
|
|
74
|
+
'{"origin": "127.0.0.1"}'
|
|
75
75
|
]
|
|
76
76
|
end
|
|
77
77
|
|
|
78
78
|
# uncomment to raise Stubs::NotFound
|
|
79
|
-
# expect(client.
|
|
80
|
-
expect(client.
|
|
79
|
+
# expect(client.httpbingo('api', params: { abc: 123, foo: 'Kappa' })).to eq('127.0.0.1')
|
|
80
|
+
expect(client.httpbingo('api', params: { abc: 123 })).to eq('127.0.0.1')
|
|
81
81
|
stubs.verify_stubbed_calls
|
|
82
82
|
end
|
|
83
83
|
end
|
|
@@ -86,11 +86,11 @@ RSpec.describe Client do
|
|
|
86
86
|
let(:conn) { Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) { |b| b.adapter(:test, stubs) } }
|
|
87
87
|
|
|
88
88
|
it 'handles the same multiple URL parameters' do
|
|
89
|
-
stubs.get('/
|
|
89
|
+
stubs.get('/api?a=x&a=y&a=z') { [200, { 'Content-Type' => 'application/json' }, '{"origin": "127.0.0.1"}'] }
|
|
90
90
|
|
|
91
91
|
# uncomment to raise Stubs::NotFound
|
|
92
|
-
# expect(client.
|
|
93
|
-
expect(client.
|
|
92
|
+
# expect(client.httpbingo('api', params: { a: %w[x y] })).to eq('127.0.0.1')
|
|
93
|
+
expect(client.httpbingo('api', params: { a: %w[x y z] })).to eq('127.0.0.1')
|
|
94
94
|
stubs.verify_stubbed_calls
|
|
95
95
|
end
|
|
96
96
|
end
|
data/examples/client_test.rb
CHANGED
|
@@ -13,24 +13,24 @@ class Client
|
|
|
13
13
|
@conn = conn
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
def
|
|
16
|
+
def httpbingo(jname, params: {})
|
|
17
17
|
res = @conn.get("/#{jname}", params)
|
|
18
18
|
data = JSON.parse(res.body)
|
|
19
|
-
data['
|
|
19
|
+
data['origin']
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
# Example API client test
|
|
24
24
|
class ClientTest < Test::Unit::TestCase
|
|
25
|
-
def
|
|
25
|
+
def test_httpbingo_name
|
|
26
26
|
stubs = Faraday::Adapter::Test::Stubs.new
|
|
27
|
-
stubs.get('/
|
|
27
|
+
stubs.get('/api') do |env|
|
|
28
28
|
# optional: you can inspect the Faraday::Env
|
|
29
|
-
assert_equal '/
|
|
29
|
+
assert_equal '/api', env.url.path
|
|
30
30
|
[
|
|
31
31
|
200,
|
|
32
32
|
{ 'Content-Type': 'application/javascript' },
|
|
33
|
-
'{"
|
|
33
|
+
'{"origin": "127.0.0.1"}'
|
|
34
34
|
]
|
|
35
35
|
end
|
|
36
36
|
|
|
@@ -38,13 +38,13 @@ class ClientTest < Test::Unit::TestCase
|
|
|
38
38
|
# stubs.get('/unused') { [404, {}, ''] }
|
|
39
39
|
|
|
40
40
|
cli = client(stubs)
|
|
41
|
-
assert_equal '
|
|
41
|
+
assert_equal '127.0.0.1', cli.httpbingo('api')
|
|
42
42
|
stubs.verify_stubbed_calls
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
def
|
|
45
|
+
def test_httpbingo_not_found
|
|
46
46
|
stubs = Faraday::Adapter::Test::Stubs.new
|
|
47
|
-
stubs.get('/
|
|
47
|
+
stubs.get('/api') do
|
|
48
48
|
[
|
|
49
49
|
404,
|
|
50
50
|
{ 'Content-Type': 'application/javascript' },
|
|
@@ -53,48 +53,48 @@ class ClientTest < Test::Unit::TestCase
|
|
|
53
53
|
end
|
|
54
54
|
|
|
55
55
|
cli = client(stubs)
|
|
56
|
-
assert_nil cli.
|
|
56
|
+
assert_nil cli.httpbingo('api')
|
|
57
57
|
stubs.verify_stubbed_calls
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
-
def
|
|
60
|
+
def test_httpbingo_exception
|
|
61
61
|
stubs = Faraday::Adapter::Test::Stubs.new
|
|
62
|
-
stubs.get('/
|
|
63
|
-
raise Faraday::ConnectionFailed
|
|
62
|
+
stubs.get('/api') do
|
|
63
|
+
raise Faraday::ConnectionFailed
|
|
64
64
|
end
|
|
65
65
|
|
|
66
66
|
cli = client(stubs)
|
|
67
67
|
assert_raise Faraday::ConnectionFailed do
|
|
68
|
-
cli.
|
|
68
|
+
cli.httpbingo('api')
|
|
69
69
|
end
|
|
70
70
|
stubs.verify_stubbed_calls
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
def test_strict_mode
|
|
74
74
|
stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true)
|
|
75
|
-
stubs.get('/
|
|
75
|
+
stubs.get('/api?abc=123') do
|
|
76
76
|
[
|
|
77
77
|
200,
|
|
78
78
|
{ 'Content-Type': 'application/javascript' },
|
|
79
|
-
'{"
|
|
79
|
+
'{"origin": "127.0.0.1"}'
|
|
80
80
|
]
|
|
81
81
|
end
|
|
82
82
|
|
|
83
83
|
cli = client(stubs)
|
|
84
|
-
assert_equal '
|
|
84
|
+
assert_equal '127.0.0.1', cli.httpbingo('api', params: { abc: 123 })
|
|
85
85
|
|
|
86
86
|
# uncomment to raise Stubs::NotFound
|
|
87
|
-
# assert_equal '
|
|
87
|
+
# assert_equal '127.0.0.1', cli.httpbingo('api', params: { abc: 123, foo: 'Kappa' })
|
|
88
88
|
stubs.verify_stubbed_calls
|
|
89
89
|
end
|
|
90
90
|
|
|
91
91
|
def test_non_default_params_encoder
|
|
92
92
|
stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true)
|
|
93
|
-
stubs.get('/
|
|
93
|
+
stubs.get('/api?a=x&a=y&a=z') do
|
|
94
94
|
[
|
|
95
95
|
200,
|
|
96
96
|
{ 'Content-Type': 'application/javascript' },
|
|
97
|
-
'{"
|
|
97
|
+
'{"origin": "127.0.0.1"}'
|
|
98
98
|
]
|
|
99
99
|
end
|
|
100
100
|
conn = Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) do |builder|
|
|
@@ -102,10 +102,10 @@ class ClientTest < Test::Unit::TestCase
|
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
cli = Client.new(conn)
|
|
105
|
-
assert_equal '
|
|
105
|
+
assert_equal '127.0.0.1', cli.httpbingo('api', params: { a: %w[x y z] })
|
|
106
106
|
|
|
107
107
|
# uncomment to raise Stubs::NotFound
|
|
108
|
-
# assert_equal '
|
|
108
|
+
# assert_equal '127.0.0.1', cli.httpbingo('api', params: { a: %w[x y] })
|
|
109
109
|
stubs.verify_stubbed_calls
|
|
110
110
|
end
|
|
111
111
|
|
data/lib/faraday/adapter/test.rb
CHANGED
|
@@ -55,6 +55,7 @@ module Faraday
|
|
|
55
55
|
@stack = {}
|
|
56
56
|
@consumed = {}
|
|
57
57
|
@strict_mode = strict_mode
|
|
58
|
+
@stubs_mutex = Monitor.new
|
|
58
59
|
yield(self) if block_given?
|
|
59
60
|
end
|
|
60
61
|
|
|
@@ -70,10 +71,13 @@ module Faraday
|
|
|
70
71
|
stack = @stack[request_method]
|
|
71
72
|
consumed = (@consumed[request_method] ||= [])
|
|
72
73
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
@stubs_mutex.synchronize do
|
|
75
|
+
stub, meta = matches?(stack, env)
|
|
76
|
+
if stub
|
|
77
|
+
removed = stack.delete(stub)
|
|
78
|
+
consumed << removed unless removed.nil?
|
|
79
|
+
return stub, meta
|
|
80
|
+
end
|
|
77
81
|
end
|
|
78
82
|
matches?(consumed, env)
|
|
79
83
|
end
|
data/lib/faraday/connection.rb
CHANGED
|
@@ -6,9 +6,9 @@ module Faraday
|
|
|
6
6
|
#
|
|
7
7
|
# @example
|
|
8
8
|
#
|
|
9
|
-
# conn = Faraday::Connection.new 'http://
|
|
9
|
+
# conn = Faraday::Connection.new 'http://httpbingo.org'
|
|
10
10
|
#
|
|
11
|
-
# # GET http://
|
|
11
|
+
# # GET http://httpbingo.org/nigiri
|
|
12
12
|
# conn.get 'nigiri'
|
|
13
13
|
# # => #<Faraday::Response>
|
|
14
14
|
#
|
|
@@ -117,7 +117,7 @@ module Faraday
|
|
|
117
117
|
|
|
118
118
|
extend Forwardable
|
|
119
119
|
|
|
120
|
-
def_delegators :builder, :
|
|
120
|
+
def_delegators :builder, :use, :request, :response, :adapter, :app
|
|
121
121
|
|
|
122
122
|
# Closes the underlying resources and/or connections. In the case of
|
|
123
123
|
# persistent connections, this closes all currently open connections
|
|
@@ -349,11 +349,11 @@ module Faraday
|
|
|
349
349
|
# @example
|
|
350
350
|
#
|
|
351
351
|
# conn = Faraday::Connection.new { ... }
|
|
352
|
-
# conn.url_prefix = "https://
|
|
352
|
+
# conn.url_prefix = "https://httpbingo.org/api"
|
|
353
353
|
# conn.scheme # => https
|
|
354
354
|
# conn.path_prefix # => "/api"
|
|
355
355
|
#
|
|
356
|
-
# conn.get("nigiri?page=2") # accesses https://
|
|
356
|
+
# conn.get("nigiri?page=2") # accesses https://httpbingo.org/api/nigiri
|
|
357
357
|
def url_prefix=(url, encoder = nil)
|
|
358
358
|
uri = @url_prefix = Utils.URI(url)
|
|
359
359
|
self.path_prefix = uri.path
|
|
@@ -395,15 +395,15 @@ module Faraday
|
|
|
395
395
|
#
|
|
396
396
|
# @example
|
|
397
397
|
# conn = Faraday::Connection.new { ... }
|
|
398
|
-
# conn.url_prefix = "https://
|
|
398
|
+
# conn.url_prefix = "https://httpbingo.org/api?token=abc"
|
|
399
399
|
# conn.scheme # => https
|
|
400
400
|
# conn.path_prefix # => "/api"
|
|
401
401
|
#
|
|
402
402
|
# conn.build_url("nigiri?page=2")
|
|
403
|
-
# # => https://
|
|
403
|
+
# # => https://httpbingo.org/api/nigiri?token=abc&page=2
|
|
404
404
|
#
|
|
405
405
|
# conn.build_url("nigiri", page: 2)
|
|
406
|
-
# # => https://
|
|
406
|
+
# # => https://httpbingo.org/api/nigiri?token=abc&page=2
|
|
407
407
|
#
|
|
408
408
|
def build_url(url = nil, extra_params = nil)
|
|
409
409
|
uri = build_exclusive_url(url)
|
data/lib/faraday/error.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Faraday
|
|
|
6
6
|
class Error < StandardError
|
|
7
7
|
attr_reader :response, :wrapped_exception
|
|
8
8
|
|
|
9
|
-
def initialize(exc, response = nil)
|
|
9
|
+
def initialize(exc = nil, response = nil)
|
|
10
10
|
@wrapped_exception = nil unless defined?(@wrapped_exception)
|
|
11
11
|
@response = nil unless defined?(@response)
|
|
12
12
|
super(exc_msg_and_response!(exc, response))
|
|
@@ -141,13 +141,7 @@ module Faraday
|
|
|
141
141
|
class SSLError < Error
|
|
142
142
|
end
|
|
143
143
|
|
|
144
|
-
# Raised by
|
|
144
|
+
# Raised by middlewares that parse the response, like the JSON response middleware.
|
|
145
145
|
class ParsingError < Error
|
|
146
146
|
end
|
|
147
|
-
|
|
148
|
-
# Exception used to control the Retry middleware.
|
|
149
|
-
#
|
|
150
|
-
# @see Faraday::Request::Retry
|
|
151
|
-
class RetriableResponse < Error
|
|
152
|
-
end
|
|
153
147
|
end
|
|
@@ -53,13 +53,31 @@ module Faraday
|
|
|
53
53
|
# Faraday::Middleware.lookup_middleware(:foo)
|
|
54
54
|
# # => Faraday::Whatever
|
|
55
55
|
def lookup_middleware(key)
|
|
56
|
-
|
|
56
|
+
load_middleware(key) ||
|
|
57
57
|
raise(Faraday::Error, "#{key.inspect} is not registered on #{self}")
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
private
|
|
61
|
+
|
|
60
62
|
def middleware_mutex(&block)
|
|
61
63
|
@middleware_mutex ||= Monitor.new
|
|
62
64
|
@middleware_mutex.synchronize(&block)
|
|
63
65
|
end
|
|
66
|
+
|
|
67
|
+
def load_middleware(key)
|
|
68
|
+
value = registered_middleware[key]
|
|
69
|
+
case value
|
|
70
|
+
when Module
|
|
71
|
+
value
|
|
72
|
+
when Symbol, String
|
|
73
|
+
middleware_mutex do
|
|
74
|
+
@registered_middleware[key] = const_get(value)
|
|
75
|
+
end
|
|
76
|
+
when Proc
|
|
77
|
+
middleware_mutex do
|
|
78
|
+
@registered_middleware[key] = value.call
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
64
82
|
end
|
|
65
83
|
end
|
data/lib/faraday/rack_builder.rb
CHANGED
|
@@ -8,7 +8,7 @@ module Faraday
|
|
|
8
8
|
# middleware stack (heavily inspired by Rack).
|
|
9
9
|
#
|
|
10
10
|
# @example
|
|
11
|
-
# Faraday::Connection.new(url: 'http://
|
|
11
|
+
# Faraday::Connection.new(url: 'http://httpbingo.org') do |builder|
|
|
12
12
|
# builder.request :url_encoded # Faraday::Request::UrlEncoded
|
|
13
13
|
# builder.adapter :net_http # Faraday::Adapter::NetHttp
|
|
14
14
|
# end
|
|
@@ -58,23 +58,22 @@ module Faraday
|
|
|
58
58
|
end
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
def initialize(
|
|
62
|
-
@adapter =
|
|
63
|
-
@handlers =
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
def initialize(&block)
|
|
62
|
+
@adapter = nil
|
|
63
|
+
@handlers = []
|
|
64
|
+
build(&block)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def initialize_dup(original)
|
|
68
|
+
super
|
|
69
|
+
@adapter = original.adapter
|
|
70
|
+
@handlers = original.handlers.dup
|
|
71
71
|
end
|
|
72
72
|
|
|
73
|
-
def build
|
|
73
|
+
def build
|
|
74
74
|
raise_if_locked
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
adapter(Faraday.default_adapter) unless @adapter
|
|
75
|
+
block_given? ? yield(self) : request(:url_encoded)
|
|
76
|
+
adapter(Faraday.default_adapter, **Faraday.default_adapter_options) unless @adapter
|
|
78
77
|
end
|
|
79
78
|
|
|
80
79
|
def [](idx)
|
|
@@ -109,7 +108,7 @@ module Faraday
|
|
|
109
108
|
end
|
|
110
109
|
|
|
111
110
|
ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block)
|
|
112
|
-
return @adapter if klass == NO_ARGUMENT
|
|
111
|
+
return @adapter if klass == NO_ARGUMENT || klass.nil?
|
|
113
112
|
|
|
114
113
|
klass = Faraday::Adapter.lookup_middleware(klass) if klass.is_a?(Symbol)
|
|
115
114
|
@adapter = self.class::Handler.new(klass, *args, &block)
|
|
@@ -164,6 +163,7 @@ module Faraday
|
|
|
164
163
|
def app
|
|
165
164
|
@app ||= begin
|
|
166
165
|
lock!
|
|
166
|
+
ensure_adapter!
|
|
167
167
|
to_app
|
|
168
168
|
end
|
|
169
169
|
end
|
|
@@ -182,10 +182,6 @@ module Faraday
|
|
|
182
182
|
@adapter == other.adapter
|
|
183
183
|
end
|
|
184
184
|
|
|
185
|
-
def dup
|
|
186
|
-
self.class.new(@handlers.dup, @adapter.dup)
|
|
187
|
-
end
|
|
188
|
-
|
|
189
185
|
# ENV Keys
|
|
190
186
|
# :http_method - a symbolized request HTTP method (:get, :post)
|
|
191
187
|
# :body - the request body that will eventually be converted to a string.
|
|
@@ -216,6 +212,9 @@ module Faraday
|
|
|
216
212
|
private
|
|
217
213
|
|
|
218
214
|
LOCK_ERR = "can't modify middleware stack after making a request"
|
|
215
|
+
MISSING_ADAPTER_ERROR = "An attempt to run a request with a Faraday::Connection without adapter has been made.\n" \
|
|
216
|
+
"Please set Faraday.default_adapter or provide one when initializing the connection.\n" \
|
|
217
|
+
'For more info, check https://lostisland.github.io/faraday/usage/.'
|
|
219
218
|
|
|
220
219
|
def raise_if_locked
|
|
221
220
|
raise StackLocked, LOCK_ERR if locked?
|
|
@@ -227,6 +226,10 @@ module Faraday
|
|
|
227
226
|
raise 'Adapter should be set using the `adapter` method, not `use`'
|
|
228
227
|
end
|
|
229
228
|
|
|
229
|
+
def ensure_adapter!
|
|
230
|
+
raise MISSING_ADAPTER_ERROR unless @adapter
|
|
231
|
+
end
|
|
232
|
+
|
|
230
233
|
def adapter_set?
|
|
231
234
|
!@adapter.nil?
|
|
232
235
|
end
|
data/lib/faraday/request.rb
CHANGED
data/lib/faraday/version.rb
CHANGED
data/lib/faraday.rb
CHANGED
|
@@ -17,9 +17,7 @@ require 'faraday/middleware'
|
|
|
17
17
|
require 'faraday/adapter'
|
|
18
18
|
require 'faraday/request'
|
|
19
19
|
require 'faraday/response'
|
|
20
|
-
require 'faraday/
|
|
21
|
-
require 'faraday/param_part'
|
|
22
|
-
|
|
20
|
+
require 'faraday/net_http'
|
|
23
21
|
# This is the main namespace for Faraday.
|
|
24
22
|
#
|
|
25
23
|
# It provides methods to create {Connection} objects, and HTTP-related
|
|
@@ -56,6 +54,10 @@ module Faraday
|
|
|
56
54
|
# @return [Symbol] the new default_adapter.
|
|
57
55
|
attr_reader :default_adapter
|
|
58
56
|
|
|
57
|
+
# Option for the default_adapter
|
|
58
|
+
# @return [Hash] default_adapter options
|
|
59
|
+
attr_accessor :default_adapter_options
|
|
60
|
+
|
|
59
61
|
# Documented below, see default_connection
|
|
60
62
|
attr_writer :default_connection
|
|
61
63
|
|
|
@@ -150,5 +152,6 @@ module Faraday
|
|
|
150
152
|
self.ignore_env_proxy = false
|
|
151
153
|
self.root_path = File.expand_path __dir__
|
|
152
154
|
self.lib_path = File.expand_path 'faraday', __dir__
|
|
153
|
-
self.default_adapter = :
|
|
155
|
+
self.default_adapter = :net_http
|
|
156
|
+
self.default_adapter_options = {}
|
|
154
157
|
end
|