faraday 1.10.5 → 2.0.0.alpha.pre.1

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +111 -1
  3. data/README.md +16 -9
  4. data/examples/client_test.rb +1 -1
  5. data/lib/faraday/adapter/test.rb +2 -0
  6. data/lib/faraday/adapter.rb +0 -5
  7. data/lib/faraday/connection.rb +3 -86
  8. data/lib/faraday/encoders/nested_params_encoder.rb +2 -2
  9. data/lib/faraday/error.rb +7 -0
  10. data/lib/faraday/file_part.rb +122 -0
  11. data/lib/faraday/logging/formatter.rb +1 -0
  12. data/lib/faraday/middleware.rb +0 -1
  13. data/lib/faraday/middleware_registry.rb +15 -79
  14. data/lib/faraday/options.rb +3 -3
  15. data/lib/faraday/param_part.rb +53 -0
  16. data/lib/faraday/rack_builder.rb +1 -1
  17. data/lib/faraday/request/authorization.rb +26 -40
  18. data/lib/faraday/request/instrumentation.rb +2 -0
  19. data/lib/faraday/request/multipart.rb +108 -0
  20. data/lib/faraday/request/retry.rb +241 -0
  21. data/lib/faraday/request/url_encoded.rb +2 -0
  22. data/lib/faraday/request.rb +8 -24
  23. data/lib/faraday/response/json.rb +4 -4
  24. data/lib/faraday/response/logger.rb +2 -0
  25. data/lib/faraday/response/raise_error.rb +9 -1
  26. data/lib/faraday/response.rb +7 -20
  27. data/lib/faraday/utils/headers.rb +1 -1
  28. data/lib/faraday/utils.rb +9 -4
  29. data/lib/faraday/version.rb +1 -1
  30. data/lib/faraday.rb +6 -45
  31. data/spec/faraday/connection_spec.rb +78 -84
  32. data/spec/faraday/options/env_spec.rb +2 -2
  33. data/spec/faraday/rack_builder_spec.rb +5 -43
  34. data/spec/faraday/request/authorization_spec.rb +14 -36
  35. data/spec/faraday/request/instrumentation_spec.rb +5 -7
  36. data/spec/faraday/request/multipart_spec.rb +302 -0
  37. data/spec/faraday/request/retry_spec.rb +254 -0
  38. data/spec/faraday/request_spec.rb +0 -11
  39. data/spec/faraday/response/json_spec.rb +4 -6
  40. data/spec/faraday/response/raise_error_spec.rb +7 -4
  41. data/spec/faraday/utils_spec.rb +1 -1
  42. data/spec/spec_helper.rb +0 -2
  43. data/spec/support/fake_safe_buffer.rb +1 -1
  44. data/spec/support/shared_examples/request_method.rb +5 -5
  45. metadata +25 -156
  46. data/lib/faraday/adapter/typhoeus.rb +0 -15
  47. data/lib/faraday/autoload.rb +0 -89
  48. data/lib/faraday/dependency_loader.rb +0 -39
  49. data/lib/faraday/deprecate.rb +0 -110
  50. data/lib/faraday/request/basic_authentication.rb +0 -20
  51. data/lib/faraday/request/token_authentication.rb +0 -20
  52. data/spec/faraday/adapter/em_http_spec.rb +0 -49
  53. data/spec/faraday/adapter/em_synchrony_spec.rb +0 -18
  54. data/spec/faraday/adapter/excon_spec.rb +0 -49
  55. data/spec/faraday/adapter/httpclient_spec.rb +0 -73
  56. data/spec/faraday/adapter/net_http_spec.rb +0 -64
  57. data/spec/faraday/adapter/patron_spec.rb +0 -18
  58. data/spec/faraday/adapter/rack_spec.rb +0 -8
  59. data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
  60. data/spec/faraday/deprecate_spec.rb +0 -147
  61. data/spec/faraday/response/middleware_spec.rb +0 -68
  62. data/spec/support/webmock_rack_app.rb +0 -68
@@ -111,7 +111,7 @@ module Faraday
111
111
  def parse(header_string)
112
112
  return unless header_string && !header_string.empty?
113
113
 
114
- headers = header_string.split(/\r\n/)
114
+ headers = header_string.split("\r\n")
115
115
 
116
116
  # Find the last set of response headers.
117
117
  start_index = headers.rindex { |x| x.start_with?('HTTP/') } || 0
data/lib/faraday/utils.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'base64'
4
+ require 'uri'
3
5
  require 'faraday/utils/headers'
4
6
  require 'faraday/utils/params_hash'
5
7
 
@@ -51,6 +53,12 @@ module Faraday
51
53
  @default_params_encoder ||= NestedParamsEncoder
52
54
  end
53
55
 
56
+ def basic_header_from(login, pass)
57
+ value = Base64.encode64("#{login}:#{pass}")
58
+ value.delete!("\n")
59
+ "Basic #{value}"
60
+ end
61
+
54
62
  class << self
55
63
  attr_writer :default_params_encoder
56
64
  end
@@ -71,10 +79,7 @@ module Faraday
71
79
  end
72
80
 
73
81
  def default_uri_parser
74
- @default_uri_parser ||= begin
75
- require 'uri'
76
- Kernel.method(:URI)
77
- end
82
+ @default_uri_parser ||= Kernel.method(:URI)
78
83
  end
79
84
 
80
85
  def default_uri_parser=(parser)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faraday
4
- VERSION = '1.10.5'
4
+ VERSION = '2.0.0.alpha-1'
5
5
  end
data/lib/faraday.rb CHANGED
@@ -4,16 +4,10 @@ require 'cgi'
4
4
  require 'date'
5
5
  require 'set'
6
6
  require 'forwardable'
7
- require 'faraday/middleware_registry'
8
- require 'faraday/dependency_loader'
9
-
10
- unless defined?(::Faraday::Timer)
11
- require 'timeout'
12
- ::Faraday::Timer = Timeout
13
- end
14
-
15
7
  require 'faraday/version'
16
8
  require 'faraday/methods'
9
+ require 'faraday/error'
10
+ require 'faraday/middleware_registry'
17
11
  require 'faraday/utils'
18
12
  require 'faraday/options'
19
13
  require 'faraday/connection'
@@ -23,26 +17,8 @@ require 'faraday/middleware'
23
17
  require 'faraday/adapter'
24
18
  require 'faraday/request'
25
19
  require 'faraday/response'
26
- require 'faraday/error'
27
- require 'faraday/request/url_encoded' # needed by multipart
28
-
29
- # External Middleware gems and their aliases
30
- require 'faraday/multipart'
31
- require 'faraday/retry'
32
- Faraday::Request::Multipart = Faraday::Multipart::Middleware
33
- Faraday::Request::Retry = Faraday::Retry::Middleware
34
-
35
- # External Adapters gems
36
- unless defined?(JRUBY_VERSION)
37
- require 'faraday/em_http'
38
- require 'faraday/em_synchrony'
39
- end
40
- require 'faraday/excon'
41
- require 'faraday/httpclient'
42
- require 'faraday/net_http'
43
- require 'faraday/net_http_persistent'
44
- require 'faraday/patron'
45
- require 'faraday/rack'
20
+ require 'faraday/file_part'
21
+ require 'faraday/param_part'
46
22
 
47
23
  # This is the main namespace for Faraday.
48
24
  #
@@ -73,7 +49,7 @@ module Faraday
73
49
 
74
50
  # @overload default_adapter
75
51
  # Gets the Symbol key identifying a default Adapter to use
76
- # for the default {Faraday::Connection}. Defaults to `:net_http`.
52
+ # for the default {Faraday::Connection}. Defaults to `:test`.
77
53
  # @return [Symbol] the default adapter
78
54
  # @overload default_adapter=(adapter)
79
55
  # Updates default adapter while resetting {.default_connection}.
@@ -120,19 +96,6 @@ module Faraday
120
96
  Faraday::Connection.new(url, options, &block)
121
97
  end
122
98
 
123
- # @private
124
- # Internal: Requires internal Faraday libraries.
125
- #
126
- # @param libs [Array] one or more relative String names to Faraday classes.
127
- # @return [void]
128
- def require_libs(*libs)
129
- libs.each do |lib|
130
- require "#{lib_path}/#{lib}"
131
- end
132
- end
133
-
134
- alias require_lib require_libs
135
-
136
99
  # Documented elsewhere, see default_adapter reader
137
100
  def default_adapter=(adapter)
138
101
  @default_connection = nil
@@ -187,7 +150,5 @@ module Faraday
187
150
  self.ignore_env_proxy = false
188
151
  self.root_path = File.expand_path __dir__
189
152
  self.lib_path = File.expand_path 'faraday', __dir__
190
- self.default_adapter = :net_http
191
-
192
- require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
153
+ self.default_adapter = :test
193
154
  end
@@ -1,5 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ class CustomEncoder
4
+ def encode(params)
5
+ params.map { |k, v| "#{k.upcase}-#{v.to_s.upcase}" }.join(',')
6
+ end
7
+
8
+ def decode(params)
9
+ params.split(',').map { |pair| pair.split('-') }.to_h
10
+ end
11
+ end
12
+
3
13
  shared_examples 'initializer with url' do
4
14
  context 'with simple url' do
5
15
  let(:address) { 'http://sushi.com' }
@@ -103,6 +113,12 @@ RSpec.describe Faraday::Connection do
103
113
  it { expect(subject.params).to eq('a' => 3, 'b' => '2') }
104
114
  end
105
115
 
116
+ context 'with basic_auth in url' do
117
+ let(:url) { 'http://Aladdin:open%20sesame@sushi.com/fish' }
118
+
119
+ it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
120
+ end
121
+
106
122
  context 'with custom headers' do
107
123
  let(:options) { { headers: { user_agent: 'Faraday' } } }
108
124
 
@@ -124,7 +140,7 @@ RSpec.describe Faraday::Connection do
124
140
  context 'with block' do
125
141
  let(:conn) do
126
142
  Faraday::Connection.new(params: { 'a' => '1' }) do |faraday|
127
- faraday.adapter :net_http
143
+ faraday.adapter :test
128
144
  faraday.url_prefix = 'http://sushi.com/omnom'
129
145
  end
130
146
  end
@@ -141,28 +157,6 @@ RSpec.describe Faraday::Connection do
141
157
  end
142
158
  end
143
159
 
144
- describe 'basic_auth' do
145
- subject { conn }
146
-
147
- context 'calling the #basic_auth method' do
148
- before { subject.basic_auth 'Aladdin', 'open sesame' }
149
-
150
- it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
151
- end
152
-
153
- context 'adding basic auth info to url' do
154
- let(:url) { 'http://Aladdin:open%20sesame@sushi.com/fish' }
155
-
156
- it { expect(subject.headers['Authorization']).to eq('Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==') }
157
- end
158
- end
159
-
160
- describe '#token_auth' do
161
- before { subject.token_auth('abcdef', nonce: 'abc') }
162
-
163
- it { expect(subject.headers['Authorization']).to eq('Token nonce="abc", token="abcdef"') }
164
- end
165
-
166
160
  describe '#build_exclusive_url' do
167
161
  context 'with relative path' do
168
162
  subject { conn.build_exclusive_url('sake.html') }
@@ -307,39 +301,6 @@ RSpec.describe Faraday::Connection do
307
301
  expect(uri.to_s).to eq('http://service.com/api/service%3Asearch?limit=400')
308
302
  end
309
303
  end
310
-
311
- context 'with protocol-relative URL (CVE-2026-25765)' do
312
- it 'does not allow host override with //evil.com/path' do
313
- conn.url_prefix = 'http://httpbingo.org/api'
314
- uri = conn.build_exclusive_url('//evil.com/path')
315
- expect(uri.host).to eq('httpbingo.org')
316
- end
317
-
318
- it 'does not allow host override with //evil.com:8080/path' do
319
- conn.url_prefix = 'http://httpbingo.org/api'
320
- uri = conn.build_exclusive_url('//evil.com:8080/path')
321
- expect(uri.host).to eq('httpbingo.org')
322
- end
323
-
324
- it 'does not allow host override with //user:pass@evil.com/path' do
325
- conn.url_prefix = 'http://httpbingo.org/api'
326
- uri = conn.build_exclusive_url('//user:pass@evil.com/path')
327
- expect(uri.host).to eq('httpbingo.org')
328
- end
329
-
330
- it 'does not allow host override with ///evil.com' do
331
- conn.url_prefix = 'http://httpbingo.org/api'
332
- uri = conn.build_exclusive_url('///evil.com')
333
- expect(uri.host).to eq('httpbingo.org')
334
- end
335
-
336
- it 'still allows single-slash absolute paths' do
337
- conn.url_prefix = 'http://httpbingo.org/api'
338
- uri = conn.build_exclusive_url('/safe/path')
339
- expect(uri.host).to eq('httpbingo.org')
340
- expect(uri.path).to eq('/safe/path')
341
- end
342
- end
343
304
  end
344
305
 
345
306
  describe '#build_url' do
@@ -589,26 +550,32 @@ RSpec.describe Faraday::Connection do
589
550
  end
590
551
 
591
552
  context 'performing a request' do
592
- before { stub_request(:get, 'http://example.com') }
553
+ let(:url) { 'http://example.com' }
554
+ let(:conn) do
555
+ Faraday.new do |f|
556
+ f.adapter :test do |stubs|
557
+ stubs.get(url) do
558
+ [200, {}, 'ok']
559
+ end
560
+ end
561
+ end
562
+ end
593
563
 
594
564
  it 'dynamically checks proxy' do
595
565
  with_env 'http_proxy' => 'http://proxy.com:80' do
596
- conn = Faraday.new
597
566
  expect(conn.proxy.uri.host).to eq('proxy.com')
598
567
 
599
- conn.get('http://example.com') do |req|
568
+ conn.get(url) do |req|
600
569
  expect(req.options.proxy.uri.host).to eq('proxy.com')
601
570
  end
602
571
  end
603
572
 
604
- conn.get('http://example.com')
573
+ conn.get(url)
605
574
  expect(conn.instance_variable_get('@temp_proxy')).to be_nil
606
575
  end
607
576
 
608
577
  it 'dynamically check no proxy' do
609
578
  with_env 'http_proxy' => 'http://proxy.com', 'no_proxy' => 'example.com' do
610
- conn = Faraday.new
611
-
612
579
  expect(conn.proxy.uri.host).to eq('proxy.com')
613
580
 
614
581
  conn.get('http://example.com') do |req|
@@ -638,7 +605,6 @@ RSpec.describe Faraday::Connection do
638
605
 
639
606
  context 'after manual changes' do
640
607
  before do
641
- subject.basic_auth('', '')
642
608
  subject.headers['content-length'] = 12
643
609
  subject.params['b'] = '2'
644
610
  subject.options[:open_timeout] = 10
@@ -678,9 +644,16 @@ RSpec.describe Faraday::Connection do
678
644
  describe 'request params' do
679
645
  context 'with simple url' do
680
646
  let(:url) { 'http://example.com' }
681
- let!(:stubbed) { stub_request(:get, 'http://example.com?a=a&p=3') }
647
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
648
+
649
+ before do
650
+ conn.adapter(:test, stubs)
651
+ stubs.get('http://example.com?a=a&p=3') do
652
+ [200, {}, 'ok']
653
+ end
654
+ end
682
655
 
683
- after { expect(stubbed).to have_been_made.once }
656
+ after { stubs.verify_stubbed_calls }
684
657
 
685
658
  it 'test_overrides_request_params' do
686
659
  conn.get('?p=2&a=a', p: 3)
@@ -702,15 +675,22 @@ RSpec.describe Faraday::Connection do
702
675
  context 'with url and extra params' do
703
676
  let(:url) { 'http://example.com?a=1&b=2' }
704
677
  let(:options) { { params: { c: 3 } } }
678
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
679
+
680
+ before do
681
+ conn.adapter(:test, stubs)
682
+ end
705
683
 
706
684
  it 'merges connection and request params' do
707
- stubbed = stub_request(:get, 'http://example.com?a=1&b=2&c=3&limit=5&page=1')
685
+ expected = 'http://example.com?a=1&b=2&c=3&limit=5&page=1'
686
+ stubs.get(expected) { [200, {}, 'ok'] }
708
687
  conn.get('?page=1', limit: 5)
709
- expect(stubbed).to have_been_made.once
688
+ stubs.verify_stubbed_calls
710
689
  end
711
690
 
712
691
  it 'allows to override all params' do
713
- stubbed = stub_request(:get, 'http://example.com?b=b')
692
+ expected = 'http://example.com?b=b'
693
+ stubs.get(expected) { [200, {}, 'ok'] }
714
694
  conn.get('?p=1&a=a', p: 2) do |req|
715
695
  expect(req.params[:a]).to eq('a')
716
696
  expect(req.params['c']).to eq(3)
@@ -718,47 +698,61 @@ RSpec.describe Faraday::Connection do
718
698
  req.params = { b: 'b' }
719
699
  expect(req.params['b']).to eq('b')
720
700
  end
721
- expect(stubbed).to have_been_made.once
701
+ stubs.verify_stubbed_calls
722
702
  end
723
703
 
724
704
  it 'allows to set params_encoder for single request' do
725
- encoder = Object.new
726
- def encoder.encode(params)
727
- params.map { |k, v| "#{k.upcase}-#{v.to_s.upcase}" }.join(',')
728
- end
729
- stubbed = stub_request(:get, 'http://example.com/?A-1,B-2,C-3,FEELING-BLUE')
705
+ encoder = CustomEncoder.new
706
+ expected = 'http://example.com/?A-1,B-2,C-3,FEELING-BLUE'
707
+ stubs.get(expected) { [200, {}, 'ok'] }
730
708
 
731
- conn.get('/', feeling: 'blue') do |req|
709
+ conn.get('/', a: 1, b: 2, c: 3, feeling: 'blue') do |req|
732
710
  req.options.params_encoder = encoder
733
711
  end
734
- expect(stubbed).to have_been_made.once
712
+ stubs.verify_stubbed_calls
735
713
  end
736
714
  end
737
715
 
738
716
  context 'with default params encoder' do
739
- let!(:stubbed) { stub_request(:get, 'http://example.com?color%5B%5D=red&color%5B%5D=blue') }
740
- after { expect(stubbed).to have_been_made.once }
717
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
718
+
719
+ before do
720
+ conn.adapter(:test, stubs)
721
+ stubs.get('http://example.com?color%5B%5D=blue&color%5B%5D=red') do
722
+ [200, {}, 'ok']
723
+ end
724
+ end
725
+
726
+ after { stubs.verify_stubbed_calls }
741
727
 
742
728
  it 'supports array params in url' do
743
- conn.get('http://example.com?color[]=red&color[]=blue')
729
+ conn.get('http://example.com?color[]=blue&color[]=red')
744
730
  end
745
731
 
746
732
  it 'supports array params in params' do
747
- conn.get('http://example.com', color: %w[red blue])
733
+ conn.get('http://example.com', color: %w[blue red])
748
734
  end
749
735
  end
750
736
 
751
737
  context 'with flat params encoder' do
752
738
  let(:options) { { request: { params_encoder: Faraday::FlatParamsEncoder } } }
753
- let!(:stubbed) { stub_request(:get, 'http://example.com?color=blue') }
754
- after { expect(stubbed).to have_been_made.once }
739
+ let(:stubs) { Faraday::Adapter::Test::Stubs.new }
740
+
741
+ before do
742
+ conn.adapter(:test, stubs)
743
+ stubs.get('http://example.com?color=blue&color=red') do
744
+ [200, {}, 'ok']
745
+ end
746
+ end
747
+
748
+ after { stubs.verify_stubbed_calls }
755
749
 
756
750
  it 'supports array params in params' do
757
- conn.get('http://example.com', color: %w[red blue])
751
+ conn.get('http://example.com', color: %w[blue red])
758
752
  end
759
753
 
760
754
  context 'with array param in url' do
761
- let(:url) { 'http://example.com?color[]=red&color[]=blue' }
755
+ let(:url) { 'http://example.com?color[]=blue&color[]=red' }
762
756
 
763
757
  it do
764
758
  conn.get('/')
@@ -29,12 +29,12 @@ RSpec.describe Faraday::Env do
29
29
 
30
30
  it 'retains custom members' do
31
31
  env[:foo] = 'custom 1'
32
- env[:bar] = :custom_2
32
+ env[:bar] = :custom2
33
33
  env2 = Faraday::Env.from(env)
34
34
  env2[:baz] = 'custom 3'
35
35
 
36
36
  expect(env2[:foo]).to eq('custom 1')
37
- expect(env2[:bar]).to eq(:custom_2)
37
+ expect(env2[:bar]).to eq(:custom2)
38
38
  expect(env[:baz]).to be_nil
39
39
  end
40
40
 
@@ -12,13 +12,11 @@ RSpec.describe Faraday::RackBuilder do
12
12
 
13
13
  class Apple < Handler
14
14
  end
15
+
15
16
  class Orange < Handler
16
17
  end
17
- class Banana < Handler
18
- end
19
18
 
20
- class Broken < Faraday::Middleware
21
- dependency 'zomg/i_dont/exist'
19
+ class Banana < Handler
22
20
  end
23
21
 
24
22
  subject { conn.builder }
@@ -127,24 +125,6 @@ RSpec.describe Faraday::RackBuilder do
127
125
  subject.use(:apple)
128
126
  expect(subject.handlers).to eq([Apple])
129
127
  end
130
-
131
- it 'allows to register with symbol' do
132
- Faraday::Middleware.register_middleware(apple: :Apple)
133
- subject.use(:apple)
134
- expect(subject.handlers).to eq([Apple])
135
- end
136
-
137
- it 'allows to register with string' do
138
- Faraday::Middleware.register_middleware(apple: 'Apple')
139
- subject.use(:apple)
140
- expect(subject.handlers).to eq([Apple])
141
- end
142
-
143
- it 'allows to register with Proc' do
144
- Faraday::Middleware.register_middleware(apple: -> { Apple })
145
- subject.use(:apple)
146
- expect(subject.handlers).to eq([Apple])
147
- end
148
128
  end
149
129
 
150
130
  context 'when having two handlers' do
@@ -176,24 +156,6 @@ RSpec.describe Faraday::RackBuilder do
176
156
  end
177
157
  end
178
158
 
179
- context 'when having a handler with broken dependency' do
180
- let(:conn) do
181
- Faraday::Connection.new do |builder|
182
- builder.adapter :test do |stub|
183
- stub.get('/') { |_| [200, {}, ''] }
184
- end
185
- end
186
- end
187
-
188
- before { subject.use(Broken) }
189
-
190
- it 'raises an error while making a request' do
191
- expect { conn.get('/') }.to raise_error(RuntimeError) do |err|
192
- expect(err.message).to match(%r{missing dependency for Broken: .+ -- zomg/i_dont/exist})
193
- end
194
- end
195
- end
196
-
197
159
  context 'when middleware is added with named arguments' do
198
160
  let(:conn) { Faraday::Connection.new {} }
199
161
 
@@ -220,7 +182,7 @@ RSpec.describe Faraday::RackBuilder do
220
182
  end
221
183
  end
222
184
 
223
- context 'when a request adapter is added with named arguments' do
185
+ context 'when a middleware is added with named arguments' do
224
186
  let(:conn) { Faraday::Connection.new {} }
225
187
 
226
188
  let(:cat_request) do
@@ -247,11 +209,11 @@ RSpec.describe Faraday::RackBuilder do
247
209
  end
248
210
  end
249
211
 
250
- context 'when a response adapter is added with named arguments' do
212
+ context 'when a middleware is added with named arguments' do
251
213
  let(:conn) { Faraday::Connection.new {} }
252
214
 
253
215
  let(:fish_response) do
254
- Class.new(Faraday::Response::Middleware) do
216
+ Class.new(Faraday::Middleware) do
255
217
  attr_accessor :name
256
218
 
257
219
  def initialize(app, name:)
@@ -3,7 +3,7 @@
3
3
  RSpec.describe Faraday::Request::Authorization do
4
4
  let(:conn) do
5
5
  Faraday.new do |b|
6
- b.request auth_type, *auth_config
6
+ b.request :authorization, auth_type, *auth_config
7
7
  b.adapter :test do |stub|
8
8
  stub.get('/auth-echo') do |env|
9
9
  [200, {}, env[:request_headers]['Authorization']]
@@ -14,10 +14,10 @@ RSpec.describe Faraday::Request::Authorization do
14
14
 
15
15
  shared_examples 'does not interfere with existing authentication' do
16
16
  context 'and request already has an authentication header' do
17
- let(:response) { conn.get('/auth-echo', nil, authorization: 'Token token="bar"') }
17
+ let(:response) { conn.get('/auth-echo', nil, authorization: 'OAuth oauth_token') }
18
18
 
19
19
  it 'does not interfere with existing authorization' do
20
- expect(response.body).to eq('Token token="bar"')
20
+ expect(response.body).to eq('OAuth oauth_token')
21
21
  end
22
22
  end
23
23
  end
@@ -25,7 +25,7 @@ RSpec.describe Faraday::Request::Authorization do
25
25
  let(:response) { conn.get('/auth-echo') }
26
26
 
27
27
  describe 'basic_auth' do
28
- let(:auth_type) { :basic_auth }
28
+ let(:auth_type) { :basic }
29
29
 
30
30
  context 'when passed correct params' do
31
31
  let(:auth_config) { %w[aladdin opensesame] }
@@ -44,51 +44,29 @@ RSpec.describe Faraday::Request::Authorization do
44
44
  end
45
45
  end
46
46
 
47
- describe 'token_auth' do
48
- let(:auth_type) { :token_auth }
49
-
50
- context 'when passed correct params' do
51
- let(:auth_config) { 'quux' }
52
-
53
- it { expect(response.body).to eq('Token token="quux"') }
54
-
55
- include_examples 'does not interfere with existing authentication'
56
- end
57
-
58
- context 'when other values are provided' do
59
- let(:auth_config) { ['baz', { foo: 42 }] }
60
-
61
- it { expect(response.body).to match(/^Token /) }
62
- it { expect(response.body).to match(/token="baz"/) }
63
- it { expect(response.body).to match(/foo="42"/) }
64
-
65
- include_examples 'does not interfere with existing authentication'
66
- end
67
- end
68
-
69
47
  describe 'authorization' do
70
- let(:auth_type) { :authorization }
48
+ let(:auth_type) { :Bearer }
71
49
 
72
- context 'when passed two strings' do
73
- let(:auth_config) { ['custom', 'abc def'] }
50
+ context 'when passed a string' do
51
+ let(:auth_config) { ['custom'] }
74
52
 
75
- it { expect(response.body).to eq('custom abc def') }
53
+ it { expect(response.body).to eq('Bearer custom') }
76
54
 
77
55
  include_examples 'does not interfere with existing authentication'
78
56
  end
79
57
 
80
- context 'when passed a string and a hash' do
81
- let(:auth_config) { ['baz', { foo: 42 }] }
58
+ context 'when passed a proc' do
59
+ let(:auth_config) { [-> { 'custom_from_proc' }] }
82
60
 
83
- it { expect(response.body).to eq('baz foo="42"') }
61
+ it { expect(response.body).to eq('Bearer custom_from_proc') }
84
62
 
85
63
  include_examples 'does not interfere with existing authentication'
86
64
  end
87
65
 
88
- context 'when passed a string and a proc' do
89
- let(:auth_config) { ['Bearer', -> { 'custom_from_proc' }] }
66
+ context 'when passed too many arguments' do
67
+ let(:auth_config) { %w[baz foo] }
90
68
 
91
- it { expect(response.body).to eq('Bearer custom_from_proc') }
69
+ it { expect { response }.to raise_error(ArgumentError) }
92
70
 
93
71
  include_examples 'does not interfere with existing authentication'
94
72
  end
@@ -30,13 +30,11 @@ RSpec.describe Faraday::Request::Instrumentation do
30
30
 
31
31
  it { expect(options.name).to eq('request.faraday') }
32
32
  it 'defaults to ActiveSupport::Notifications' do
33
- begin
34
- res = options.instrumenter
35
- rescue NameError => e
36
- expect(e.to_s).to match('ActiveSupport')
37
- else
38
- expect(res).to eq(ActiveSupport::Notifications)
39
- end
33
+ res = options.instrumenter
34
+ rescue NameError => e
35
+ expect(e.to_s).to match('ActiveSupport')
36
+ else
37
+ expect(res).to eq(ActiveSupport::Notifications)
40
38
  end
41
39
 
42
40
  it 'instruments with default name' do