faraday 1.10.2 → 2.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +197 -3
  3. data/LICENSE.md +1 -1
  4. data/README.md +18 -16
  5. data/examples/client_spec.rb +41 -19
  6. data/examples/client_test.rb +48 -22
  7. data/lib/faraday/adapter/test.rb +59 -10
  8. data/lib/faraday/adapter.rb +5 -9
  9. data/lib/faraday/connection.rb +47 -129
  10. data/lib/faraday/encoders/nested_params_encoder.rb +13 -6
  11. data/lib/faraday/error.rb +3 -2
  12. data/lib/faraday/logging/formatter.rb +19 -2
  13. data/lib/faraday/middleware.rb +3 -1
  14. data/lib/faraday/middleware_registry.rb +17 -63
  15. data/lib/faraday/options/env.rb +31 -7
  16. data/lib/faraday/options/ssl_options.rb +11 -1
  17. data/lib/faraday/options.rb +3 -3
  18. data/lib/faraday/rack_builder.rb +23 -20
  19. data/lib/faraday/request/authorization.rb +33 -41
  20. data/lib/faraday/request/instrumentation.rb +2 -0
  21. data/lib/faraday/request/url_encoded.rb +5 -1
  22. data/lib/faraday/request.rb +7 -25
  23. data/lib/faraday/response/json.rb +4 -4
  24. data/lib/faraday/response/logger.rb +6 -0
  25. data/lib/faraday/response/raise_error.rb +9 -1
  26. data/lib/faraday/response.rb +9 -21
  27. data/lib/faraday/utils/headers.rb +7 -2
  28. data/lib/faraday/utils.rb +10 -5
  29. data/lib/faraday/version.rb +1 -1
  30. data/lib/faraday.rb +8 -44
  31. data/spec/faraday/adapter/test_spec.rb +65 -0
  32. data/spec/faraday/connection_spec.rb +163 -91
  33. data/spec/faraday/middleware_registry_spec.rb +31 -0
  34. data/spec/faraday/middleware_spec.rb +18 -0
  35. data/spec/faraday/options/env_spec.rb +8 -2
  36. data/spec/faraday/params_encoders/nested_spec.rb +8 -0
  37. data/spec/faraday/rack_builder_spec.rb +26 -54
  38. data/spec/faraday/request/authorization_spec.rb +50 -28
  39. data/spec/faraday/request/instrumentation_spec.rb +5 -7
  40. data/spec/faraday/request/url_encoded_spec.rb +12 -2
  41. data/spec/faraday/request_spec.rb +5 -15
  42. data/spec/faraday/response/json_spec.rb +4 -6
  43. data/spec/faraday/response/logger_spec.rb +28 -0
  44. data/spec/faraday/response/raise_error_spec.rb +7 -4
  45. data/spec/faraday/response_spec.rb +3 -1
  46. data/spec/faraday/utils/headers_spec.rb +22 -4
  47. data/spec/faraday/utils_spec.rb +63 -1
  48. data/spec/spec_helper.rb +0 -2
  49. data/spec/support/fake_safe_buffer.rb +1 -1
  50. data/spec/support/helper_methods.rb +0 -37
  51. data/spec/support/shared_examples/adapter.rb +2 -2
  52. data/spec/support/shared_examples/request_method.rb +22 -21
  53. metadata +14 -151
  54. data/lib/faraday/adapter/typhoeus.rb +0 -15
  55. data/lib/faraday/autoload.rb +0 -87
  56. data/lib/faraday/dependency_loader.rb +0 -37
  57. data/lib/faraday/deprecate.rb +0 -110
  58. data/lib/faraday/request/basic_authentication.rb +0 -20
  59. data/lib/faraday/request/token_authentication.rb +0 -20
  60. data/spec/faraday/adapter/em_http_spec.rb +0 -49
  61. data/spec/faraday/adapter/em_synchrony_spec.rb +0 -18
  62. data/spec/faraday/adapter/excon_spec.rb +0 -49
  63. data/spec/faraday/adapter/httpclient_spec.rb +0 -73
  64. data/spec/faraday/adapter/net_http_spec.rb +0 -64
  65. data/spec/faraday/adapter/patron_spec.rb +0 -18
  66. data/spec/faraday/adapter/rack_spec.rb +0 -8
  67. data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
  68. data/spec/faraday/composite_read_io_spec.rb +0 -80
  69. data/spec/faraday/deprecate_spec.rb +0 -147
  70. data/spec/faraday/response/middleware_spec.rb +0 -68
  71. data/spec/support/webmock_rack_app.rb +0 -68
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)
@@ -96,7 +101,7 @@ module Faraday
96
101
  # Recursive hash update
97
102
  def deep_merge!(target, hash)
98
103
  hash.each do |key, value|
99
- target[key] = if value.is_a?(Hash) && target[key].is_a?(Hash)
104
+ target[key] = if value.is_a?(Hash) && (target[key].is_a?(Hash) || target[key].is_a?(Options))
100
105
  deep_merge(target[key], value)
101
106
  else
102
107
  value
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Faraday
4
- VERSION = '1.10.2'
4
+ VERSION = '2.7.4'
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,27 +17,7 @@ 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
20
  require 'faraday/net_http'
43
- require 'faraday/net_http_persistent'
44
- require 'faraday/patron'
45
- require 'faraday/rack'
46
-
47
21
  # This is the main namespace for Faraday.
48
22
  #
49
23
  # It provides methods to create {Connection} objects, and HTTP-related
@@ -80,6 +54,10 @@ module Faraday
80
54
  # @return [Symbol] the new default_adapter.
81
55
  attr_reader :default_adapter
82
56
 
57
+ # Option for the default_adapter
58
+ # @return [Hash] default_adapter options
59
+ attr_accessor :default_adapter_options
60
+
83
61
  # Documented below, see default_connection
84
62
  attr_writer :default_connection
85
63
 
@@ -116,23 +94,10 @@ module Faraday
116
94
  # params: { page: 1 }
117
95
  # # => Faraday::Connection to http://faraday.com?page=1
118
96
  def new(url = nil, options = {}, &block)
119
- options = default_connection_options.merge(options)
97
+ options = Utils.deep_merge(default_connection_options, options)
120
98
  Faraday::Connection.new(url, options, &block)
121
99
  end
122
100
 
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
101
  # Documented elsewhere, see default_adapter reader
137
102
  def default_adapter=(adapter)
138
103
  @default_connection = nil
@@ -188,6 +153,5 @@ module Faraday
188
153
  self.root_path = File.expand_path __dir__
189
154
  self.lib_path = File.expand_path 'faraday', __dir__
190
155
  self.default_adapter = :net_http
191
-
192
- require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
156
+ self.default_adapter_options = {}
193
157
  end
@@ -373,5 +373,70 @@ 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
412
+ end
413
+
414
+ describe 'request timeout' do
415
+ subject(:request) do
416
+ connection.get('/sleep') do |req|
417
+ req.options.timeout = timeout
418
+ end
419
+ end
420
+
421
+ before do
422
+ stubs.get('/sleep') do
423
+ sleep(0.01)
424
+ [200, {}, '']
425
+ end
426
+ end
427
+
428
+ context 'when request is within timeout' do
429
+ let(:timeout) { 1 }
430
+
431
+ it { expect(request.status).to eq 200 }
432
+ end
433
+
434
+ context 'when request is too slow' do
435
+ let(:timeout) { 0.001 }
436
+
437
+ it 'raises an exception' do
438
+ expect { request }.to raise_error(Faraday::TimeoutError)
439
+ end
440
+ end
376
441
  end
377
442
  end