faraday 1.4.1 → 1.10.3

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 (44) hide show
  1. checksums.yaml +4 -4
  2. data/examples/client_spec.rb +34 -2
  3. data/examples/client_test.rb +41 -2
  4. data/lib/faraday/adapter/test.rb +59 -43
  5. data/lib/faraday/adapter.rb +1 -6
  6. data/lib/faraday/autoload.rb +1 -6
  7. data/lib/faraday/connection.rb +33 -6
  8. data/lib/faraday/dependency_loader.rb +3 -1
  9. data/lib/faraday/deprecate.rb +110 -0
  10. data/lib/faraday/error.rb +0 -6
  11. data/lib/faraday/options/proxy_options.rb +4 -0
  12. data/lib/faraday/request/authorization.rb +14 -7
  13. data/lib/faraday/request/json.rb +55 -0
  14. data/lib/faraday/request.rb +10 -12
  15. data/lib/faraday/response/json.rb +54 -0
  16. data/lib/faraday/response/logger.rb +2 -4
  17. data/lib/faraday/response.rb +3 -1
  18. data/lib/faraday/version.rb +1 -1
  19. data/lib/faraday.rb +19 -4
  20. data/spec/faraday/adapter/em_http_spec.rb +39 -37
  21. data/spec/faraday/adapter/em_synchrony_spec.rb +11 -9
  22. data/spec/faraday/adapter/test_spec.rb +117 -0
  23. data/spec/faraday/connection_spec.rb +15 -0
  24. data/spec/faraday/deprecate_spec.rb +147 -0
  25. data/spec/faraday/options/proxy_options_spec.rb +7 -0
  26. data/spec/faraday/request/authorization_spec.rb +8 -0
  27. data/spec/faraday/request/json_spec.rb +111 -0
  28. data/spec/faraday/request_spec.rb +1 -1
  29. data/spec/faraday/response/json_spec.rb +119 -0
  30. data/spec/spec_helper.rb +2 -0
  31. metadata +99 -28
  32. data/lib/faraday/adapter/em_http.rb +0 -289
  33. data/lib/faraday/adapter/em_http_ssl_patch.rb +0 -62
  34. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +0 -69
  35. data/lib/faraday/adapter/em_synchrony.rb +0 -153
  36. data/lib/faraday/adapter/httpclient.rb +0 -152
  37. data/lib/faraday/adapter/patron.rb +0 -132
  38. data/lib/faraday/adapter/rack.rb +0 -75
  39. data/lib/faraday/file_part.rb +0 -128
  40. data/lib/faraday/param_part.rb +0 -53
  41. data/lib/faraday/request/multipart.rb +0 -106
  42. data/lib/faraday/request/retry.rb +0 -239
  43. data/spec/faraday/request/multipart_spec.rb +0 -302
  44. data/spec/faraday/request/retry_spec.rb +0 -242
@@ -14,6 +14,13 @@ RSpec.describe Faraday::ProxyOptions do
14
14
  expect(options.inspect).to match('#<Faraday::ProxyOptions uri=')
15
15
  end
16
16
 
17
+ it 'defaults to http' do
18
+ options = Faraday::ProxyOptions.from 'example.org'
19
+ expect(options.port).to eq(80)
20
+ expect(options.host).to eq('example.org')
21
+ expect(options.scheme).to eq('http')
22
+ end
23
+
17
24
  it 'works with nil' do
18
25
  options = Faraday::ProxyOptions.from nil
19
26
  expect(options).to be_a_kind_of(Faraday::ProxyOptions)
@@ -84,5 +84,13 @@ RSpec.describe Faraday::Request::Authorization do
84
84
 
85
85
  include_examples 'does not interfere with existing authentication'
86
86
  end
87
+
88
+ context 'when passed a string and a proc' do
89
+ let(:auth_config) { ['Bearer', -> { 'custom_from_proc' }] }
90
+
91
+ it { expect(response.body).to eq('Bearer custom_from_proc') }
92
+
93
+ include_examples 'does not interfere with existing authentication'
94
+ end
87
95
  end
88
96
  end
@@ -0,0 +1,111 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Faraday::Request::Json do
4
+ let(:middleware) { described_class.new(->(env) { Faraday::Response.new(env) }) }
5
+
6
+ def process(body, content_type = nil)
7
+ env = { body: body, request_headers: Faraday::Utils::Headers.new }
8
+ env[:request_headers]['content-type'] = content_type if content_type
9
+ middleware.call(Faraday::Env.from(env)).env
10
+ end
11
+
12
+ def result_body
13
+ result[:body]
14
+ end
15
+
16
+ def result_type
17
+ result[:request_headers]['content-type']
18
+ end
19
+
20
+ context 'no body' do
21
+ let(:result) { process(nil) }
22
+
23
+ it "doesn't change body" do
24
+ expect(result_body).to be_nil
25
+ end
26
+
27
+ it "doesn't add content type" do
28
+ expect(result_type).to be_nil
29
+ end
30
+ end
31
+
32
+ context 'empty body' do
33
+ let(:result) { process('') }
34
+
35
+ it "doesn't change body" do
36
+ expect(result_body).to be_empty
37
+ end
38
+
39
+ it "doesn't add content type" do
40
+ expect(result_type).to be_nil
41
+ end
42
+ end
43
+
44
+ context 'string body' do
45
+ let(:result) { process('{"a":1}') }
46
+
47
+ it "doesn't change body" do
48
+ expect(result_body).to eq('{"a":1}')
49
+ end
50
+
51
+ it 'adds content type' do
52
+ expect(result_type).to eq('application/json')
53
+ end
54
+ end
55
+
56
+ context 'object body' do
57
+ let(:result) { process(a: 1) }
58
+
59
+ it 'encodes body' do
60
+ expect(result_body).to eq('{"a":1}')
61
+ end
62
+
63
+ it 'adds content type' do
64
+ expect(result_type).to eq('application/json')
65
+ end
66
+ end
67
+
68
+ context 'empty object body' do
69
+ let(:result) { process({}) }
70
+
71
+ it 'encodes body' do
72
+ expect(result_body).to eq('{}')
73
+ end
74
+ end
75
+
76
+ context 'object body with json type' do
77
+ let(:result) { process({ a: 1 }, 'application/json; charset=utf-8') }
78
+
79
+ it 'encodes body' do
80
+ expect(result_body).to eq('{"a":1}')
81
+ end
82
+
83
+ it "doesn't change content type" do
84
+ expect(result_type).to eq('application/json; charset=utf-8')
85
+ end
86
+ end
87
+
88
+ context 'object body with vendor json type' do
89
+ let(:result) { process({ a: 1 }, 'application/vnd.myapp.v1+json; charset=utf-8') }
90
+
91
+ it 'encodes body' do
92
+ expect(result_body).to eq('{"a":1}')
93
+ end
94
+
95
+ it "doesn't change content type" do
96
+ expect(result_type).to eq('application/vnd.myapp.v1+json; charset=utf-8')
97
+ end
98
+ end
99
+
100
+ context 'object body with incompatible type' do
101
+ let(:result) { process({ a: 1 }, 'application/xml; charset=utf-8') }
102
+
103
+ it "doesn't change body" do
104
+ expect(result_body).to eq(a: 1)
105
+ end
106
+
107
+ it "doesn't change content type" do
108
+ expect(result_type).to eq('application/xml; charset=utf-8')
109
+ end
110
+ end
111
+ end
@@ -25,7 +25,7 @@ RSpec.describe Faraday::Request do
25
25
  describe 'deprecate method for HTTP method' do
26
26
  let(:http_method) { :post }
27
27
  let(:expected_warning) do
28
- %r{WARNING: `Faraday::Request#method` is deprecated; use `#http_method` instead. It will be removed in or after version 2.0.\n`Faraday::Request#method` called from .+/spec/faraday/request_spec.rb:\d+.}
28
+ %r{NOTE: Faraday::Request#method is deprecated; use http_method instead\. It will be removed in or after version 2.0 \nFaraday::Request#method called from .+/spec/faraday/request_spec.rb:\d+.}
29
29
  end
30
30
 
31
31
  it { expect(subject.method).to eq(:post) }
@@ -0,0 +1,119 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Faraday::Response::Json, type: :response do
4
+ let(:options) { {} }
5
+ let(:headers) { {} }
6
+ let(:middleware) do
7
+ described_class.new(lambda { |env|
8
+ Faraday::Response.new(env)
9
+ }, **options)
10
+ end
11
+
12
+ def process(body, content_type = 'application/json', options = {})
13
+ env = {
14
+ body: body, request: options,
15
+ request_headers: Faraday::Utils::Headers.new,
16
+ response_headers: Faraday::Utils::Headers.new(headers)
17
+ }
18
+ env[:response_headers]['content-type'] = content_type if content_type
19
+ yield(env) if block_given?
20
+ middleware.call(Faraday::Env.from(env))
21
+ end
22
+
23
+ context 'no type matching' do
24
+ it "doesn't change nil body" do
25
+ expect(process(nil).body).to be_nil
26
+ end
27
+
28
+ it 'nullifies empty body' do
29
+ expect(process('').body).to be_nil
30
+ end
31
+
32
+ it 'parses json body' do
33
+ response = process('{"a":1}')
34
+ expect(response.body).to eq('a' => 1)
35
+ expect(response.env[:raw_body]).to be_nil
36
+ end
37
+ end
38
+
39
+ context 'with preserving raw' do
40
+ let(:options) { { preserve_raw: true } }
41
+
42
+ it 'parses json body' do
43
+ response = process('{"a":1}')
44
+ expect(response.body).to eq('a' => 1)
45
+ expect(response.env[:raw_body]).to eq('{"a":1}')
46
+ end
47
+ end
48
+
49
+ context 'with default regexp type matching' do
50
+ it 'parses json body of correct type' do
51
+ response = process('{"a":1}', 'application/x-json')
52
+ expect(response.body).to eq('a' => 1)
53
+ end
54
+
55
+ it 'ignores json body of incorrect type' do
56
+ response = process('{"a":1}', 'text/json-xml')
57
+ expect(response.body).to eq('{"a":1}')
58
+ end
59
+ end
60
+
61
+ context 'with array type matching' do
62
+ let(:options) { { content_type: %w[a/b c/d] } }
63
+
64
+ it 'parses json body of correct type' do
65
+ expect(process('{"a":1}', 'a/b').body).to be_a(Hash)
66
+ expect(process('{"a":1}', 'c/d').body).to be_a(Hash)
67
+ end
68
+
69
+ it 'ignores json body of incorrect type' do
70
+ expect(process('{"a":1}', 'a/d').body).not_to be_a(Hash)
71
+ end
72
+ end
73
+
74
+ it 'chokes on invalid json' do
75
+ expect { process('{!') }.to raise_error(Faraday::ParsingError)
76
+ end
77
+
78
+ it 'includes the response on the ParsingError instance' do
79
+ begin
80
+ process('{') { |env| env[:response] = Faraday::Response.new }
81
+ raise 'Parsing should have failed.'
82
+ rescue Faraday::ParsingError => e
83
+ expect(e.response).to be_a(Faraday::Response)
84
+ end
85
+ end
86
+
87
+ context 'HEAD responses' do
88
+ it "nullifies the body if it's only one space" do
89
+ response = process(' ')
90
+ expect(response.body).to be_nil
91
+ end
92
+
93
+ it "nullifies the body if it's two spaces" do
94
+ response = process(' ')
95
+ expect(response.body).to be_nil
96
+ end
97
+ end
98
+
99
+ context 'JSON options' do
100
+ let(:body) { '{"a": 1}' }
101
+ let(:result) { { a: 1 } }
102
+ let(:options) do
103
+ {
104
+ parser_options: {
105
+ symbolize_names: true
106
+ }
107
+ }
108
+ end
109
+
110
+ it 'passes relevant options to JSON parse' do
111
+ expect(::JSON).to receive(:parse)
112
+ .with(body, options[:parser_options])
113
+ .and_return(result)
114
+
115
+ response = process(body)
116
+ expect(response.body).to eq(result)
117
+ end
118
+ end
119
+ end
data/spec/spec_helper.rb CHANGED
@@ -38,6 +38,8 @@ require 'pry'
38
38
 
39
39
  Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
40
40
 
41
+ Faraday::Deprecate.skip = false
42
+
41
43
  RSpec.configure do |config|
42
44
  # rspec-expectations config goes here. You can use an alternate
43
45
  # assertion/expectation library such as wrong or the stdlib/minitest
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.1
4
+ version: 1.10.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@technoweenie"
@@ -10,8 +10,36 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-04-18 00:00:00.000000000 Z
13
+ date: 2023-01-18 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: faraday-em_http
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '1.0'
29
+ - !ruby/object:Gem::Dependency
30
+ name: faraday-em_synchrony
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '1.0'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '1.0'
15
43
  - !ruby/object:Gem::Dependency
16
44
  name: faraday-excon
17
45
  requirement: !ruby/object:Gem::Requirement
@@ -26,6 +54,34 @@ dependencies:
26
54
  - - "~>"
27
55
  - !ruby/object:Gem::Version
28
56
  version: '1.1'
57
+ - !ruby/object:Gem::Dependency
58
+ name: faraday-httpclient
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '1.0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '1.0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: faraday-multipart
73
+ requirement: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.0'
78
+ type: :runtime
79
+ prerelease: false
80
+ version_requirements: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "~>"
83
+ - !ruby/object:Gem::Version
84
+ version: '1.0'
29
85
  - !ruby/object:Gem::Dependency
30
86
  name: faraday-net_http
31
87
  requirement: !ruby/object:Gem::Requirement
@@ -46,34 +102,56 @@ dependencies:
46
102
  requirements:
47
103
  - - "~>"
48
104
  - !ruby/object:Gem::Version
49
- version: '1.1'
105
+ version: '1.0'
50
106
  type: :runtime
51
107
  prerelease: false
52
108
  version_requirements: !ruby/object:Gem::Requirement
53
109
  requirements:
54
110
  - - "~>"
55
111
  - !ruby/object:Gem::Version
56
- version: '1.1'
112
+ version: '1.0'
57
113
  - !ruby/object:Gem::Dependency
58
- name: multipart-post
114
+ name: faraday-patron
59
115
  requirement: !ruby/object:Gem::Requirement
60
116
  requirements:
61
- - - ">="
117
+ - - "~>"
62
118
  - !ruby/object:Gem::Version
63
- version: '1.2'
64
- - - "<"
119
+ version: '1.0'
120
+ type: :runtime
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
65
125
  - !ruby/object:Gem::Version
66
- version: '3'
126
+ version: '1.0'
127
+ - !ruby/object:Gem::Dependency
128
+ name: faraday-rack
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: '1.0'
67
134
  type: :runtime
68
135
  prerelease: false
69
136
  version_requirements: !ruby/object:Gem::Requirement
70
137
  requirements:
71
- - - ">="
138
+ - - "~>"
72
139
  - !ruby/object:Gem::Version
73
- version: '1.2'
74
- - - "<"
140
+ version: '1.0'
141
+ - !ruby/object:Gem::Dependency
142
+ name: faraday-retry
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: '1.0'
148
+ type: :runtime
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
75
153
  - !ruby/object:Gem::Version
76
- version: '3'
154
+ version: '1.0'
77
155
  - !ruby/object:Gem::Dependency
78
156
  name: ruby2_keywords
79
157
  requirement: !ruby/object:Gem::Requirement
@@ -102,23 +180,16 @@ files:
102
180
  - examples/client_test.rb
103
181
  - lib/faraday.rb
104
182
  - lib/faraday/adapter.rb
105
- - lib/faraday/adapter/em_http.rb
106
- - lib/faraday/adapter/em_http_ssl_patch.rb
107
- - lib/faraday/adapter/em_synchrony.rb
108
- - lib/faraday/adapter/em_synchrony/parallel_manager.rb
109
- - lib/faraday/adapter/httpclient.rb
110
- - lib/faraday/adapter/patron.rb
111
- - lib/faraday/adapter/rack.rb
112
183
  - lib/faraday/adapter/test.rb
113
184
  - lib/faraday/adapter/typhoeus.rb
114
185
  - lib/faraday/adapter_registry.rb
115
186
  - lib/faraday/autoload.rb
116
187
  - lib/faraday/connection.rb
117
188
  - lib/faraday/dependency_loader.rb
189
+ - lib/faraday/deprecate.rb
118
190
  - lib/faraday/encoders/flat_params_encoder.rb
119
191
  - lib/faraday/encoders/nested_params_encoder.rb
120
192
  - lib/faraday/error.rb
121
- - lib/faraday/file_part.rb
122
193
  - lib/faraday/logging/formatter.rb
123
194
  - lib/faraday/methods.rb
124
195
  - lib/faraday/middleware.rb
@@ -129,18 +200,17 @@ files:
129
200
  - lib/faraday/options/proxy_options.rb
130
201
  - lib/faraday/options/request_options.rb
131
202
  - lib/faraday/options/ssl_options.rb
132
- - lib/faraday/param_part.rb
133
203
  - lib/faraday/parameters.rb
134
204
  - lib/faraday/rack_builder.rb
135
205
  - lib/faraday/request.rb
136
206
  - lib/faraday/request/authorization.rb
137
207
  - lib/faraday/request/basic_authentication.rb
138
208
  - lib/faraday/request/instrumentation.rb
139
- - lib/faraday/request/multipart.rb
140
- - lib/faraday/request/retry.rb
209
+ - lib/faraday/request/json.rb
141
210
  - lib/faraday/request/token_authentication.rb
142
211
  - lib/faraday/request/url_encoded.rb
143
212
  - lib/faraday/response.rb
213
+ - lib/faraday/response/json.rb
144
214
  - lib/faraday/response/logger.rb
145
215
  - lib/faraday/response/raise_error.rb
146
216
  - lib/faraday/utils.rb
@@ -161,6 +231,7 @@ files:
161
231
  - spec/faraday/adapter_spec.rb
162
232
  - spec/faraday/composite_read_io_spec.rb
163
233
  - spec/faraday/connection_spec.rb
234
+ - spec/faraday/deprecate_spec.rb
164
235
  - spec/faraday/error_spec.rb
165
236
  - spec/faraday/middleware_spec.rb
166
237
  - spec/faraday/options/env_spec.rb
@@ -172,10 +243,10 @@ files:
172
243
  - spec/faraday/rack_builder_spec.rb
173
244
  - spec/faraday/request/authorization_spec.rb
174
245
  - spec/faraday/request/instrumentation_spec.rb
175
- - spec/faraday/request/multipart_spec.rb
176
- - spec/faraday/request/retry_spec.rb
246
+ - spec/faraday/request/json_spec.rb
177
247
  - spec/faraday/request/url_encoded_spec.rb
178
248
  - spec/faraday/request_spec.rb
249
+ - spec/faraday/response/json_spec.rb
179
250
  - spec/faraday/response/logger_spec.rb
180
251
  - spec/faraday/response/middleware_spec.rb
181
252
  - spec/faraday/response/raise_error_spec.rb
@@ -197,7 +268,7 @@ licenses:
197
268
  - MIT
198
269
  metadata:
199
270
  homepage_uri: https://lostisland.github.io/faraday
200
- changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.4.1
271
+ changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.10.3
201
272
  source_code_uri: https://github.com/lostisland/faraday
202
273
  bug_tracker_uri: https://github.com/lostisland/faraday/issues
203
274
  post_install_message:
@@ -216,7 +287,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
216
287
  - !ruby/object:Gem::Version
217
288
  version: '0'
218
289
  requirements: []
219
- rubygems_version: 3.0.3.1
290
+ rubygems_version: 3.1.6
220
291
  signing_key:
221
292
  specification_version: 4
222
293
  summary: HTTP/REST API client library.