faraday 1.10.4 → 2.14.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 +198 -4
- data/LICENSE.md +1 -1
- data/README.md +34 -20
- data/Rakefile +6 -1
- data/examples/client_spec.rb +41 -19
- data/examples/client_test.rb +48 -22
- data/lib/faraday/adapter/test.rb +62 -13
- data/lib/faraday/adapter.rb +6 -10
- data/lib/faraday/connection.rb +72 -150
- data/lib/faraday/encoders/flat_params_encoder.rb +2 -2
- data/lib/faraday/encoders/nested_params_encoder.rb +14 -7
- data/lib/faraday/error.rb +66 -10
- data/lib/faraday/logging/formatter.rb +30 -17
- data/lib/faraday/middleware.rb +43 -2
- data/lib/faraday/middleware_registry.rb +17 -63
- data/lib/faraday/options/connection_options.rb +7 -6
- data/lib/faraday/options/env.rb +85 -62
- data/lib/faraday/options/proxy_options.rb +11 -5
- data/lib/faraday/options/request_options.rb +7 -6
- data/lib/faraday/options/ssl_options.rb +62 -45
- data/lib/faraday/options.rb +7 -6
- data/lib/faraday/rack_builder.rb +44 -45
- data/lib/faraday/request/authorization.rb +33 -41
- data/lib/faraday/request/instrumentation.rb +5 -1
- data/lib/faraday/request/json.rb +18 -3
- data/lib/faraday/request/url_encoded.rb +5 -1
- data/lib/faraday/request.rb +15 -30
- data/lib/faraday/response/json.rb +25 -5
- data/lib/faraday/response/logger.rb +11 -3
- data/lib/faraday/response/raise_error.rb +45 -18
- data/lib/faraday/response.rb +14 -22
- data/lib/faraday/utils/headers.rb +15 -4
- data/lib/faraday/utils.rb +11 -7
- data/lib/faraday/version.rb +1 -1
- data/lib/faraday.rb +10 -45
- data/spec/faraday/adapter/test_spec.rb +65 -0
- data/spec/faraday/connection_spec.rb +165 -93
- data/spec/faraday/error_spec.rb +122 -7
- data/spec/faraday/middleware_registry_spec.rb +31 -0
- data/spec/faraday/middleware_spec.rb +161 -0
- data/spec/faraday/options/env_spec.rb +8 -2
- data/spec/faraday/options/options_spec.rb +1 -1
- data/spec/faraday/options/proxy_options_spec.rb +35 -0
- data/spec/faraday/params_encoders/nested_spec.rb +10 -1
- data/spec/faraday/rack_builder_spec.rb +26 -54
- data/spec/faraday/request/authorization_spec.rb +50 -28
- data/spec/faraday/request/instrumentation_spec.rb +5 -7
- data/spec/faraday/request/json_spec.rb +88 -0
- data/spec/faraday/request/url_encoded_spec.rb +12 -2
- data/spec/faraday/request_spec.rb +5 -15
- data/spec/faraday/response/json_spec.rb +93 -6
- data/spec/faraday/response/logger_spec.rb +83 -4
- data/spec/faraday/response/raise_error_spec.rb +133 -16
- data/spec/faraday/response_spec.rb +10 -1
- data/spec/faraday/utils/headers_spec.rb +31 -4
- data/spec/faraday/utils_spec.rb +65 -1
- data/spec/faraday_spec.rb +10 -4
- data/spec/spec_helper.rb +5 -6
- data/spec/support/fake_safe_buffer.rb +1 -1
- data/spec/support/faraday_middleware_subclasses.rb +18 -0
- data/spec/support/helper_methods.rb +0 -37
- data/spec/support/shared_examples/adapter.rb +2 -2
- data/spec/support/shared_examples/request_method.rb +22 -21
- metadata +24 -149
- data/lib/faraday/adapter/typhoeus.rb +0 -15
- data/lib/faraday/autoload.rb +0 -89
- data/lib/faraday/dependency_loader.rb +0 -39
- data/lib/faraday/deprecate.rb +0 -110
- data/lib/faraday/request/basic_authentication.rb +0 -20
- data/lib/faraday/request/token_authentication.rb +0 -20
- data/spec/faraday/adapter/em_http_spec.rb +0 -49
- data/spec/faraday/adapter/em_synchrony_spec.rb +0 -18
- data/spec/faraday/adapter/excon_spec.rb +0 -49
- data/spec/faraday/adapter/httpclient_spec.rb +0 -73
- data/spec/faraday/adapter/net_http_spec.rb +0 -64
- data/spec/faraday/adapter/patron_spec.rb +0 -18
- data/spec/faraday/adapter/rack_spec.rb +0 -8
- data/spec/faraday/adapter/typhoeus_spec.rb +0 -7
- data/spec/faraday/composite_read_io_spec.rb +0 -80
- data/spec/faraday/deprecate_spec.rb +0 -147
- data/spec/faraday/response/middleware_spec.rb +0 -68
- data/spec/support/webmock_rack_app.rb +0 -68
data/lib/faraday.rb
CHANGED
|
@@ -1,19 +1,14 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'cgi'
|
|
3
|
+
require 'cgi/escape'
|
|
4
|
+
require 'cgi/util' if RUBY_VERSION < '3.5'
|
|
4
5
|
require 'date'
|
|
5
6
|
require 'set'
|
|
6
7
|
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
8
|
require 'faraday/version'
|
|
16
9
|
require 'faraday/methods'
|
|
10
|
+
require 'faraday/error'
|
|
11
|
+
require 'faraday/middleware_registry'
|
|
17
12
|
require 'faraday/utils'
|
|
18
13
|
require 'faraday/options'
|
|
19
14
|
require 'faraday/connection'
|
|
@@ -23,27 +18,7 @@ require 'faraday/middleware'
|
|
|
23
18
|
require 'faraday/adapter'
|
|
24
19
|
require 'faraday/request'
|
|
25
20
|
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
21
|
require 'faraday/net_http'
|
|
43
|
-
require 'faraday/net_http_persistent'
|
|
44
|
-
require 'faraday/patron'
|
|
45
|
-
require 'faraday/rack'
|
|
46
|
-
|
|
47
22
|
# This is the main namespace for Faraday.
|
|
48
23
|
#
|
|
49
24
|
# It provides methods to create {Connection} objects, and HTTP-related
|
|
@@ -80,6 +55,10 @@ module Faraday
|
|
|
80
55
|
# @return [Symbol] the new default_adapter.
|
|
81
56
|
attr_reader :default_adapter
|
|
82
57
|
|
|
58
|
+
# Option for the default_adapter
|
|
59
|
+
# @return [Hash] default_adapter options
|
|
60
|
+
attr_accessor :default_adapter_options
|
|
61
|
+
|
|
83
62
|
# Documented below, see default_connection
|
|
84
63
|
attr_writer :default_connection
|
|
85
64
|
|
|
@@ -116,23 +95,10 @@ module Faraday
|
|
|
116
95
|
# params: { page: 1 }
|
|
117
96
|
# # => Faraday::Connection to http://faraday.com?page=1
|
|
118
97
|
def new(url = nil, options = {}, &block)
|
|
119
|
-
options =
|
|
98
|
+
options = Utils.deep_merge(default_connection_options, options)
|
|
120
99
|
Faraday::Connection.new(url, options, &block)
|
|
121
100
|
end
|
|
122
101
|
|
|
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
102
|
# Documented elsewhere, see default_adapter reader
|
|
137
103
|
def default_adapter=(adapter)
|
|
138
104
|
@default_connection = nil
|
|
@@ -188,6 +154,5 @@ module Faraday
|
|
|
188
154
|
self.root_path = File.expand_path __dir__
|
|
189
155
|
self.lib_path = File.expand_path 'faraday', __dir__
|
|
190
156
|
self.default_adapter = :net_http
|
|
191
|
-
|
|
192
|
-
require_lib 'autoload' unless ENV['FARADAY_NO_AUTOLOAD']
|
|
157
|
+
self.default_adapter_options = {}
|
|
193
158
|
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
|