faraday 1.7.0 → 2.0.0.alpha.pre.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -1
  3. data/README.md +16 -9
  4. data/examples/client_spec.rb +13 -0
  5. data/examples/client_test.rb +42 -3
  6. data/lib/faraday/adapter/test.rb +32 -43
  7. data/lib/faraday/adapter.rb +0 -5
  8. data/lib/faraday/connection.rb +8 -69
  9. data/lib/faraday/encoders/nested_params_encoder.rb +2 -2
  10. data/lib/faraday/error.rb +1 -0
  11. data/lib/faraday/file_part.rb +0 -6
  12. data/lib/faraday/logging/formatter.rb +1 -0
  13. data/lib/faraday/middleware.rb +0 -1
  14. data/lib/faraday/middleware_registry.rb +15 -79
  15. data/lib/faraday/options.rb +3 -3
  16. data/lib/faraday/rack_builder.rb +1 -1
  17. data/lib/faraday/request/authorization.rb +31 -38
  18. data/lib/faraday/request/instrumentation.rb +2 -0
  19. data/lib/faraday/request/json.rb +55 -0
  20. data/lib/faraday/request/multipart.rb +2 -0
  21. data/lib/faraday/request/retry.rb +3 -1
  22. data/lib/faraday/request/url_encoded.rb +2 -0
  23. data/lib/faraday/request.rb +13 -31
  24. data/lib/faraday/response/json.rb +54 -0
  25. data/lib/faraday/response/logger.rb +4 -4
  26. data/lib/faraday/response/raise_error.rb +9 -1
  27. data/lib/faraday/response.rb +8 -19
  28. data/lib/faraday/utils/headers.rb +1 -1
  29. data/lib/faraday/utils.rb +9 -4
  30. data/lib/faraday/version.rb +1 -1
  31. data/lib/faraday.rb +6 -37
  32. data/spec/faraday/adapter/test_spec.rb +32 -0
  33. data/spec/faraday/connection_spec.rb +78 -51
  34. data/spec/faraday/options/env_spec.rb +2 -2
  35. data/spec/faraday/rack_builder_spec.rb +5 -43
  36. data/spec/faraday/request/authorization_spec.rb +15 -29
  37. data/spec/faraday/request/instrumentation_spec.rb +5 -7
  38. data/spec/faraday/request/json_spec.rb +111 -0
  39. data/spec/faraday/request/multipart_spec.rb +5 -5
  40. data/spec/faraday/request/retry_spec.rb +13 -1
  41. data/spec/faraday/request_spec.rb +0 -11
  42. data/spec/faraday/response/json_spec.rb +117 -0
  43. data/spec/faraday/response/raise_error_spec.rb +7 -4
  44. data/spec/faraday/utils_spec.rb +1 -1
  45. data/spec/support/fake_safe_buffer.rb +1 -1
  46. data/spec/support/shared_examples/request_method.rb +5 -5
  47. metadata +11 -134
  48. data/lib/faraday/adapter/typhoeus.rb +0 -15
  49. data/lib/faraday/autoload.rb +0 -87
  50. data/lib/faraday/dependency_loader.rb +0 -37
  51. data/lib/faraday/request/basic_authentication.rb +0 -20
  52. data/lib/faraday/request/token_authentication.rb +0 -20
  53. data/spec/faraday/adapter/em_http_spec.rb +0 -49
  54. data/spec/faraday/adapter/em_synchrony_spec.rb +0 -18
  55. data/spec/faraday/adapter/excon_spec.rb +0 -49
  56. data/spec/faraday/adapter/httpclient_spec.rb +0 -73
  57. data/spec/faraday/adapter/net_http_spec.rb +0 -64
  58. data/spec/faraday/adapter/patron_spec.rb +0 -18
  59. data/spec/faraday/adapter/rack_spec.rb +0 -8
  60. data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
  61. data/spec/faraday/response/middleware_spec.rb +0 -68
  62. data/spec/support/webmock_rack_app.rb +0 -68
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e0b66c2e6b13140f2093c73a7b8dab39dd25690b15b1e5eadaba90a787d2fdf5
4
- data.tar.gz: af34783d38f124632f2e4edcfd7f6bf2d763bd5d6f36ad8b6de6cac675c9858d
3
+ metadata.gz: 07fafa8818a9063a9df90d878f7c6b79b0266f330fab9a9a271ac7b3d16e9bd8
4
+ data.tar.gz: ef16b014bc9ca58649557382c31817fba19c046029bb0c58c02a4b1a4654561e
5
5
  SHA512:
6
- metadata.gz: dd547129c965998e13208a5a0accab40ddee955f7a001365f2a951c6a0e7d7fefc9e61c5d708188deff9e8e239c991627485e3f07e9686a87a3cd30938a8f05b
7
- data.tar.gz: 81fdc31d08d17db983ea4a4c68951942c3673d5447096e1f51cd0f4eebac1289348b860a56e064131b65ef59e3ed6f63ce1fc004db435f7fb051460b98190b31
6
+ metadata.gz: ec0843f0b2e4f37732bc6acd0fd2fb5417ce965c597e3385207ae2893bbe359cf037121712d0cbd7ce69371629bef9587b00b33036ae5bd087a23f1f5112cd96
7
+ data.tar.gz: 933b84778e644221a00d472ae0e9478672fcc4946a512eb2e03902cd8c082f56c2064fc37fb05ea4e3d904a9e2c7bb192c32b0ff22ce8b790f7b5edf08c490f1
data/CHANGELOG.md CHANGED
@@ -1,5 +1,108 @@
1
1
  # Faraday Changelog
2
2
 
3
+ ## [v1.7.0](https://github.com/lostisland/faraday/releases/tag/v1.7.0) (2021-08-09)
4
+
5
+ ### Features
6
+
7
+ * Add strict_mode to Test::Stubs (#1298, @yykamei)
8
+
9
+ ## [v1.6.0](https://github.com/lostisland/faraday/releases/tag/v1.6.0) (2021-08-01)
10
+
11
+ ### Misc
12
+
13
+ * Use external Rack adapter (#1296, @iMacTia)
14
+
15
+ ## [v1.5.1](https://github.com/lostisland/faraday/releases/tag/v1.5.1) (2021-07-11)
16
+
17
+ ### Fixes
18
+
19
+ * Fix JRuby incompatibility after moving out EM adapters (#1294, @ahorek)
20
+
21
+ ### Documentation
22
+
23
+ * Update YARD to follow RackBuilder (#1292, @kachick)
24
+
25
+ ## [v1.5.0](https://github.com/lostisland/faraday/releases/tag/v1.5.0) (2021-07-04)
26
+
27
+ ### Misc
28
+
29
+ * Use external httpclient adapter (#1289, @iMacTia)
30
+ * Use external patron adapter (#1290, @iMacTia)
31
+
32
+ ## [v1.4.3](https://github.com/lostisland/faraday/releases/tag/v1.4.3) (2021-06-24)
33
+
34
+ ### Fixes
35
+
36
+ * Silence warning (#1286, @gurgeous)
37
+ * Always dup url_prefix in Connection#build_exclusive_url (#1288, @alexeyds)
38
+
39
+ ## [v1.4.2](https://github.com/lostisland/faraday/releases/tag/v1.4.2) (2021-05-22)
40
+
41
+ ### Fixes
42
+ * Add proxy setting when url_prefix is changed (#1276, @ci)
43
+ * Default proxy scheme to http:// if necessary, fixes #1282 (#1283, @gurgeous)
44
+
45
+ ### Documentation
46
+ * Improve introduction page (#1273, @gurgeous)
47
+ * Docs: add more middleware examples (#1277, @gurgeous)
48
+
49
+ ### Misc
50
+ * Use external `em_http` and `em_synchrony` adapters (#1274, @iMacTia)
51
+
52
+ ## [v1.4.1](https://github.com/lostisland/faraday/releases/tag/v1.4.1) (2021-04-18)
53
+
54
+ ### Fixes
55
+
56
+ * Fix dependencies from external adapter gems (#1269, @iMacTia)
57
+
58
+ ## [v1.4.0](https://github.com/lostisland/faraday/releases/tag/v1.4.0) (2021-04-16)
59
+
60
+ ### Highlights
61
+
62
+ With this release, we continue the work of gradually moving out adapters into their own gems 🎉
63
+ Thanks to @MikeRogers0 for helping the Faraday team in progressing with this quest 👏
64
+
65
+ And thanks to @olleolleolle efforts, Faraday is becoming more inclusive than ever 🤗
66
+ Faraday's `master` branch has been renamed into `main`, we have an official policy on inclusive language and even a rubocop plugin to check for non-inclusive words ❤️!
67
+ Checkout the "Misc" section below for more details 🙌 !
68
+
69
+ ### Fixes
70
+
71
+ * Fix NoMethodError undefined method 'coverage' (#1255, @Maroo-b)
72
+
73
+ ### Documentation
74
+
75
+ * Some docs on EventMachine adapters. (#1232, @damau)
76
+ * CONTRIBUTING: Fix grammar and layout (#1261, @olleolleolle)
77
+
78
+ ### Misc
79
+
80
+ * Replacing Net::HTTP::Persistent with faraday-net_http_persistent (#1250, @MikeRogers0)
81
+ * CI: Configure the regenerated Coveralls token (#1256, @olleolleolle)
82
+ * Replace Excon adapter with Faraday::Excon gem, and fix autoloading issue with Faraday::NetHttpPersistent (#1257, @iMacTia)
83
+ * Drop CodeClimate (#1259, @olleolleolle)
84
+ * CI: Rename default branch to main (#1263, @olleolleolle)
85
+ * Drop RDoc support file .document (#1264, @olleolleolle, @iMacTia)
86
+ * CONTRIBUTING: add a policy on inclusive language (#1262, @olleolleolle)
87
+ * Add rubocop-inclusivity (#1267, @olleolleolle, @iMacTia)
88
+
89
+ ## [v1.3.1](https://github.com/lostisland/faraday/releases/tag/v1.3.1) (2021-04-16)
90
+
91
+ ### Fixes
92
+
93
+ * Escape colon in path segment (#1237, @yarafan)
94
+ * Handle IPv6 address String on Faraday::Connection#proxy_from_env (#1252, @cosmo0920)
95
+
96
+ ### Documentation
97
+
98
+ * Fix broken Rubydoc.info links (#1236, @nickcampbell18)
99
+ * Add httpx to list of external adapters (#1246, @HoneyryderChuck)
100
+
101
+ ### Misc
102
+
103
+ * Refactor CI to remove duplicated line (#1230, @tricknotes)
104
+ * Gemspec: Pick a good ruby2_keywords release (#1241, @olleolleolle)
105
+
3
106
  ## [v1.3.0](https://github.com/lostisland/faraday/releases/tag/v1.3.0) (2020-12-31)
4
107
 
5
108
  ### Highlights
@@ -104,7 +207,7 @@ Many thanks to the Faraday Team, @JanDintel and everyone who attended the [ROSS
104
207
  * Website: add search bar (#1116)
105
208
  * Fix request/response mix-up in docs text (#1132)
106
209
 
107
- ## v1.0
210
+ ## [v1.0](https://github.com/lostisland/faraday/releases/tag/v1.0.0) (2020-01-22)
108
211
 
109
212
  Features:
110
213
 
@@ -148,6 +251,13 @@ Misc:
148
251
  * Describe clearing cached stubs #1045 (@viraptor)
149
252
  * Add project metadata to the gemspec #1046 (@orien)
150
253
 
254
+ ## v0.17.4
255
+
256
+ Fixes:
257
+
258
+ * NetHttp adapter: wrap Errno::EADDRNOTAVAIL (#1114, @embs)
259
+ * Fix === for subclasses of deprecated classes (#1243, @mervync)
260
+
151
261
  ## v0.17.3
152
262
 
153
263
  Fixes:
data/README.md CHANGED
@@ -2,12 +2,18 @@
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/faraday.svg)](https://rubygems.org/gems/faraday)
4
4
  [![GitHub Actions CI](https://github.com/lostisland/faraday/workflows/CI/badge.svg)](https://github.com/lostisland/faraday/actions?query=workflow%3ACI)
5
- [![Gitter](https://badges.gitter.im/lostisland/faraday.svg)](https://gitter.im/lostisland/faraday?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
5
+ [![GitHub Discussions](https://img.shields.io/github/discussions/lostisland/faraday?logo=github)](https://github.com/lostisland/faraday/discussions)
6
6
 
7
7
 
8
- Faraday is an HTTP client library that provides a common interface over many
9
- adapters (such as Net::HTTP) and embraces the concept of Rack middleware when
10
- processing the request/response cycle.
8
+ Faraday is an HTTP client library abstraction layer that provides a common interface over many
9
+ adapters (such as Net::HTTP) and embraces the concept of Rack middleware when processing the request/response cycle.
10
+ You probably don't want to use Faraday directly in your project, as it will lack an actual client library to perform
11
+ requests. Instead, you probably want to have a look at [Awesome Faraday][awesome] for a list of available adapters.
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).
11
17
 
12
18
  ## Getting Started
13
19
 
@@ -16,10 +22,10 @@ Need more details? See the [Faraday API Documentation][apidoc] to see how it wor
16
22
 
17
23
  ## Supported Ruby versions
18
24
 
19
- This library aims to support and is [tested against][actions] the following Ruby
20
- implementations:
21
-
22
- * Ruby 2.4+
25
+ This library aims to support and is [tested against][actions] the currently officially supported Ruby
26
+ implementations. This means that, even without a major release, we could add or drop support for Ruby versions,
27
+ following their [EOL](https://endoflife.date/ruby).
28
+ Currently that means we support Ruby 2.6+
23
29
 
24
30
  If something doesn't work on one of these Ruby versions, it's a bug.
25
31
 
@@ -41,8 +47,9 @@ Open the issues page and check for the `help wanted` label!
41
47
  But before you start coding, please read our [Contributing Guide][contributing]
42
48
 
43
49
  ## Copyright
44
- © 2009 - 2020, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
50
+ © 2009 - 2021, the [Faraday Team][faraday_team]. Website and branding design by [Elena Lo Piccolo](https://elelopic.design).
45
51
 
52
+ [awesome]: https://github.com/lostisland/awesome-faraday/#adapters
46
53
  [website]: https://lostisland.github.io/faraday
47
54
  [faraday_team]: https://lostisland.github.io/faraday/team
48
55
  [contributing]: https://github.com/lostisland/faraday/blob/master/.github/CONTRIBUTING.md
@@ -81,4 +81,17 @@ RSpec.describe Client do
81
81
  stubs.verify_stubbed_calls
82
82
  end
83
83
  end
84
+
85
+ context 'When the Faraday connection is configured with FlatParamsEncoder' do
86
+ let(:conn) { Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) { |b| b.adapter(:test, stubs) } }
87
+
88
+ it 'handles the same multiple URL parameters' do
89
+ stubs.get('/ebi?a=x&a=y&a=z') { [200, { 'Content-Type' => 'application/json' }, '{"name": "shrimp"}'] }
90
+
91
+ # uncomment to raise Stubs::NotFound
92
+ # expect(client.sushi('ebi', params: { a: %w[x y] })).to eq('shrimp')
93
+ expect(client.sushi('ebi', params: { a: %w[x y z] })).to eq('shrimp')
94
+ stubs.verify_stubbed_calls
95
+ end
96
+ end
84
97
  end
@@ -13,8 +13,8 @@ class Client
13
13
  @conn = conn
14
14
  end
15
15
 
16
- def sushi(jname)
17
- res = @conn.get("/#{jname}")
16
+ def sushi(jname, params: {})
17
+ res = @conn.get("/#{jname}", params)
18
18
  data = JSON.parse(res.body)
19
19
  data['name']
20
20
  end
@@ -42,7 +42,7 @@ class ClientTest < Test::Unit::TestCase
42
42
  stubs.verify_stubbed_calls
43
43
  end
44
44
 
45
- def test_sushi_404
45
+ def test_sushi_not_found
46
46
  stubs = Faraday::Adapter::Test::Stubs.new
47
47
  stubs.get('/ebi') do
48
48
  [
@@ -70,6 +70,45 @@ class ClientTest < Test::Unit::TestCase
70
70
  stubs.verify_stubbed_calls
71
71
  end
72
72
 
73
+ def test_strict_mode
74
+ stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true)
75
+ stubs.get('/ebi?abc=123') do
76
+ [
77
+ 200,
78
+ { 'Content-Type': 'application/javascript' },
79
+ '{"name": "shrimp"}'
80
+ ]
81
+ end
82
+
83
+ cli = client(stubs)
84
+ assert_equal 'shrimp', cli.sushi('ebi', params: { abc: 123 })
85
+
86
+ # uncomment to raise Stubs::NotFound
87
+ # assert_equal 'shrimp', cli.sushi('ebi', params: { abc: 123, foo: 'Kappa' })
88
+ stubs.verify_stubbed_calls
89
+ end
90
+
91
+ def test_non_default_params_encoder
92
+ stubs = Faraday::Adapter::Test::Stubs.new(strict_mode: true)
93
+ stubs.get('/ebi?a=x&a=y&a=z') do
94
+ [
95
+ 200,
96
+ { 'Content-Type': 'application/javascript' },
97
+ '{"name": "shrimp"}'
98
+ ]
99
+ end
100
+ conn = Faraday.new(request: { params_encoder: Faraday::FlatParamsEncoder }) do |builder|
101
+ builder.adapter :test, stubs
102
+ end
103
+
104
+ cli = Client.new(conn)
105
+ assert_equal 'shrimp', cli.sushi('ebi', params: { a: %w[x y z] })
106
+
107
+ # uncomment to raise Stubs::NotFound
108
+ # assert_equal 'shrimp', cli.sushi('ebi', params: { a: %w[x y] })
109
+ stubs.verify_stubbed_calls
110
+ end
111
+
73
112
  def client(stubs)
74
113
  conn = Faraday.new do |builder|
75
114
  builder.adapter :test, stubs
@@ -62,18 +62,20 @@ module Faraday
62
62
  @stack.empty?
63
63
  end
64
64
 
65
- def match(request_method, host, path, headers, body)
65
+ # @param env [Faraday::Env]
66
+ def match(env)
67
+ request_method = env[:method]
66
68
  return false unless @stack.key?(request_method)
67
69
 
68
70
  stack = @stack[request_method]
69
71
  consumed = (@consumed[request_method] ||= [])
70
72
 
71
- stub, meta = matches?(stack, host, path, headers, body)
73
+ stub, meta = matches?(stack, env)
72
74
  if stub
73
75
  consumed << stack.delete(stub)
74
76
  return stub, meta
75
77
  end
76
- matches?(consumed, host, path, headers, body)
78
+ matches?(consumed, env)
77
79
  end
78
80
 
79
81
  def get(path, headers = {}, &block)
@@ -142,15 +144,18 @@ module Faraday
142
144
  Faraday::Utils.URI(path).host
143
145
  ]
144
146
  end
145
-
147
+ path, query = normalized_path.respond_to?(:split) ? normalized_path.split('?') : normalized_path
146
148
  headers = Utils::Headers.new(headers)
147
- stub = Stub.new(host, normalized_path, headers, body, @strict_mode, block)
149
+
150
+ stub = Stub.new(host, path, query, headers, body, @strict_mode, block)
148
151
  (@stack[request_method] ||= []) << stub
149
152
  end
150
153
 
151
- def matches?(stack, host, path, headers, body)
154
+ # @param stack [Hash]
155
+ # @param env [Faraday::Env]
156
+ def matches?(stack, env)
152
157
  stack.each do |stub|
153
- match_result, meta = stub.matches?(host, path, headers, body)
158
+ match_result, meta = stub.matches?(env)
154
159
  return stub, meta if match_result
155
160
  end
156
161
  nil
@@ -158,35 +163,20 @@ module Faraday
158
163
  end
159
164
 
160
165
  # Stub request
161
- # rubocop:disable Style/StructInheritance
162
- class Stub < Struct.new(:host, :path, :params, :headers, :body, :strict_mode, :block)
163
- # rubocop:enable Style/StructInheritance
164
- def initialize(host, full, headers, body, strict_mode, block) # rubocop:disable Metrics/ParameterLists
165
- path, query = full.respond_to?(:split) ? full.split('?') : full
166
- params =
167
- if query
168
- Faraday::Utils.parse_nested_query(query)
169
- else
170
- {}
171
- end
172
-
173
- super(host, path, params, headers, body, strict_mode, block)
174
- end
166
+ class Stub < Struct.new(:host, :path, :query, :headers, :body, :strict_mode, :block) # rubocop:disable Style/StructInheritance
167
+ # @param env [Faraday::Env]
168
+ def matches?(env)
169
+ request_host = env[:url].host
170
+ request_path = Faraday::Utils.normalize_path(env[:url].path)
171
+ request_headers = env.request_headers
172
+ request_body = env[:body]
175
173
 
176
- def matches?(request_host, request_uri, request_headers, request_body)
177
- request_path, request_query = request_uri.split('?')
178
- request_params =
179
- if request_query
180
- Faraday::Utils.parse_nested_query(request_query)
181
- else
182
- {}
183
- end
184
174
  # meta is a hash used as carrier
185
175
  # that will be yielded to consumer block
186
176
  meta = {}
187
177
  [(host.nil? || host == request_host) &&
188
178
  path_match?(request_path, meta) &&
189
- params_match?(request_params) &&
179
+ params_match?(env) &&
190
180
  (body.to_s.size.zero? || request_body == body) &&
191
181
  headers_match?(request_headers), meta]
192
182
  end
@@ -199,7 +189,11 @@ module Faraday
199
189
  end
200
190
  end
201
191
 
202
- def params_match?(request_params)
192
+ # @param env [Faraday::Env]
193
+ def params_match?(env)
194
+ request_params = env[:params]
195
+ params = env.params_encoder.decode(query) || {}
196
+
203
197
  if strict_mode
204
198
  return Set.new(params) == Set.new(request_params)
205
199
  end
@@ -239,26 +233,19 @@ module Faraday
239
233
  yield(stubs)
240
234
  end
241
235
 
236
+ # @param env [Faraday::Env]
242
237
  def call(env)
243
238
  super
244
- host = env[:url].host
245
- normalized_path = Faraday::Utils.normalize_path(env[:url])
246
- params_encoder = env.request.params_encoder ||
247
- Faraday::Utils.default_params_encoder
248
239
 
249
- stub, meta = stubs.match(env[:method], host, normalized_path,
250
- env.request_headers, env[:body])
240
+ env.request.params_encoder ||= Faraday::Utils.default_params_encoder
241
+ env[:params] = env.params_encoder.decode(env[:url].query) || {}
242
+ stub, meta = stubs.match(env)
251
243
 
252
244
  unless stub
253
245
  raise Stubs::NotFound, "no stubbed request for #{env[:method]} "\
254
- "#{normalized_path} #{env[:body]}"
246
+ "#{env[:url]} #{env[:body]}"
255
247
  end
256
248
 
257
- env[:params] = if (query = env[:url].query)
258
- params_encoder.decode(query)
259
- else
260
- {}
261
- end
262
249
  block_arity = stub.block.arity
263
250
  status, headers, body =
264
251
  if block_arity >= 0
@@ -273,3 +260,5 @@ module Faraday
273
260
  end
274
261
  end
275
262
  end
263
+
264
+ Faraday::Adapter.register_middleware(test: Faraday::Adapter::Test)
@@ -5,14 +5,9 @@ module Faraday
5
5
  # responsible for fulfilling a Faraday request.
6
6
  class Adapter
7
7
  extend MiddlewareRegistry
8
- extend DependencyLoader
9
8
 
10
9
  CONTENT_LENGTH = 'Content-Length'
11
10
 
12
- register_middleware File.expand_path('adapter', __dir__),
13
- test: [:Test, 'test'],
14
- typhoeus: [:Typhoeus, 'typhoeus']
15
-
16
11
  # This module marks an Adapter as supporting parallel requests.
17
12
  module Parallelism
18
13
  attr_writer :supports_parallel
@@ -283,62 +283,6 @@ module Faraday
283
283
  RUBY
284
284
  end
285
285
 
286
- # Sets up the Authorization header with these credentials, encoded
287
- # with base64.
288
- #
289
- # @param login [String] The authentication login.
290
- # @param pass [String] The authentication password.
291
- #
292
- # @example
293
- #
294
- # conn.basic_auth 'Aladdin', 'open sesame'
295
- # conn.headers['Authorization']
296
- # # => "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
297
- #
298
- # @return [void]
299
- def basic_auth(login, pass)
300
- set_authorization_header(:basic_auth, login, pass)
301
- end
302
-
303
- # Sets up the Authorization header with the given token.
304
- #
305
- # @param token [String]
306
- # @param options [Hash] extra token options.
307
- #
308
- # @example
309
- #
310
- # conn.token_auth 'abcdef', foo: 'bar'
311
- # conn.headers['Authorization']
312
- # # => "Token token=\"abcdef\",
313
- # foo=\"bar\""
314
- #
315
- # @return [void]
316
- def token_auth(token, options = nil)
317
- set_authorization_header(:token_auth, token, options)
318
- end
319
-
320
- # Sets up a custom Authorization header.
321
- #
322
- # @param type [String] authorization type
323
- # @param token [String, Hash] token. A String value is taken literally, and
324
- # a Hash is encoded into comma-separated key/value pairs.
325
- #
326
- # @example
327
- #
328
- # conn.authorization :Bearer, 'mF_9.B5f-4.1JqM'
329
- # conn.headers['Authorization']
330
- # # => "Bearer mF_9.B5f-4.1JqM"
331
- #
332
- # conn.authorization :Token, token: 'abcdef', foo: 'bar'
333
- # conn.headers['Authorization']
334
- # # => "Token token=\"abcdef\",
335
- # foo=\"bar\""
336
- #
337
- # @return [void]
338
- def authorization(type, token)
339
- set_authorization_header(:authorization, type, token)
340
- end
341
-
342
286
  # Check if the adapter is parallel-capable.
343
287
  #
344
288
  # @yield if the adapter isn't parallel-capable, or if no adapter is set yet.
@@ -418,13 +362,18 @@ module Faraday
418
362
  uri.query = nil
419
363
 
420
364
  with_uri_credentials(uri) do |user, password|
421
- basic_auth user, password
365
+ set_basic_auth(user, password)
422
366
  uri.user = uri.password = nil
423
367
  end
424
368
 
425
369
  @proxy = proxy_from_env(url) unless @manual_proxy
426
370
  end
427
371
 
372
+ def set_basic_auth(user, password)
373
+ header = Faraday::Utils.basic_header_from(user, password)
374
+ headers[Faraday::Request::Authorization::KEY] = header
375
+ end
376
+
428
377
  # Sets the path prefix and ensures that it always has a leading
429
378
  # slash.
430
379
  #
@@ -525,14 +474,12 @@ module Faraday
525
474
  if url && base.path && base.path !~ %r{/$}
526
475
  base.path = "#{base.path}/" # ensure trailing slash
527
476
  end
528
- url = url && URI.parse(url.to_s).opaque ? url.to_s.gsub(':', '%3A') : url
477
+ url = url.to_s.gsub(':', '%3A') if url && URI.parse(url.to_s).opaque
529
478
  uri = url ? base + url : base
530
479
  if params
531
480
  uri.query = params.to_query(params_encoder || options.params_encoder)
532
481
  end
533
- # rubocop:disable Style/SafeNavigation
534
482
  uri.query = nil if uri.query && uri.query.empty?
535
- # rubocop:enable Style/SafeNavigation
536
483
  uri
537
484
  end
538
485
 
@@ -564,14 +511,6 @@ module Faraday
564
511
  yield(Utils.unescape(uri.user), Utils.unescape(uri.password))
565
512
  end
566
513
 
567
- def set_authorization_header(header_type, *args)
568
- header = Faraday::Request
569
- .lookup_middleware(header_type)
570
- .header(*args)
571
-
572
- headers[Faraday::Request::Authorization::KEY] = header
573
- end
574
-
575
514
  def proxy_from_env(url)
576
515
  return if Faraday.ignore_env_proxy
577
516
 
@@ -616,7 +555,7 @@ module Faraday
616
555
  end
617
556
 
618
557
  def support_parallel?(adapter)
619
- adapter&.respond_to?(:supports_parallel?) && adapter&.supports_parallel?
558
+ adapter.respond_to?(:supports_parallel?) && adapter&.supports_parallel?
620
559
  end
621
560
  end
622
561
  end
@@ -102,7 +102,7 @@ module Faraday
102
102
  subkeys = key.scan(SUBKEYS_REGEX)
103
103
  subkeys.each_with_index do |subkey, i|
104
104
  is_array = subkey =~ /[\[\]]+\Z/
105
- subkey = $` if is_array
105
+ subkey = Regexp.last_match.pre_match if is_array
106
106
  last_subkey = i == subkeys.length - 1
107
107
 
108
108
  context = prepare_context(context, subkey, is_array, last_subkey)
@@ -124,7 +124,7 @@ module Faraday
124
124
  value_type = is_array ? Array : Hash
125
125
  if context[subkey] && !context[subkey].is_a?(value_type)
126
126
  raise TypeError, "expected #{value_type.name} " \
127
- "(got #{context[subkey].class.name}) for param `#{subkey}'"
127
+ "(got #{context[subkey].class.name}) for param `#{subkey}'"
128
128
  end
129
129
 
130
130
  context[subkey] ||= value_type.new
data/lib/faraday/error.rb CHANGED
@@ -52,6 +52,7 @@ module Faraday
52
52
  # :body - Optional string HTTP response body.
53
53
  # :request - Hash
54
54
  # :method - Symbol with the request HTTP method.
55
+ # :url - URI object with the url requested.
55
56
  # :url_path - String with the url path requested.
56
57
  # :params - String key/value hash of query params
57
58
  # present in the request.
@@ -52,12 +52,6 @@ module Faraday
52
52
  # @return [IO]
53
53
  FilePart = ::UploadIO
54
54
 
55
- # Multipart value used to POST a file.
56
- #
57
- # @deprecated Use FilePart instead of this class. It behaves identically, with
58
- # a matching name to ParamPart.
59
- UploadIO = ::UploadIO
60
-
61
55
  Parts = ::Parts
62
56
 
63
57
  # Similar to, but not compatible with CompositeReadIO provided by the
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'pp'
4
+
4
5
  module Faraday
5
6
  module Logging
6
7
  # Serves as an integration point to customize logging
@@ -4,7 +4,6 @@ module Faraday
4
4
  # Middleware is the basic base class of any Faraday middleware.
5
5
  class Middleware
6
6
  extend MiddlewareRegistry
7
- extend DependencyLoader
8
7
 
9
8
  attr_reader :app, :options
10
9