faraday 0.17.5 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (134) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +52 -8
  3. data/LICENSE.md +1 -1
  4. data/README.md +17 -358
  5. data/Rakefile +1 -7
  6. data/examples/client_spec.rb +65 -0
  7. data/examples/client_test.rb +79 -0
  8. data/lib/faraday/adapter/em_http.rb +143 -100
  9. data/lib/faraday/adapter/em_http_ssl_patch.rb +24 -18
  10. data/lib/faraday/adapter/em_synchrony/parallel_manager.rb +18 -15
  11. data/lib/faraday/adapter/em_synchrony.rb +104 -60
  12. data/lib/faraday/adapter/excon.rb +98 -56
  13. data/lib/faraday/adapter/httpclient.rb +83 -59
  14. data/lib/faraday/adapter/net_http.rb +129 -63
  15. data/lib/faraday/adapter/net_http_persistent.rb +50 -27
  16. data/lib/faraday/adapter/patron.rb +80 -43
  17. data/lib/faraday/adapter/rack.rb +30 -13
  18. data/lib/faraday/adapter/test.rb +86 -53
  19. data/lib/faraday/adapter/typhoeus.rb +4 -1
  20. data/lib/faraday/adapter.rb +83 -22
  21. data/lib/faraday/adapter_registry.rb +30 -0
  22. data/lib/faraday/autoload.rb +47 -36
  23. data/lib/faraday/connection.rb +312 -182
  24. data/lib/faraday/dependency_loader.rb +39 -0
  25. data/lib/faraday/encoders/flat_params_encoder.rb +105 -0
  26. data/lib/faraday/encoders/nested_params_encoder.rb +176 -0
  27. data/lib/faraday/error.rb +17 -35
  28. data/lib/faraday/file_part.rb +128 -0
  29. data/lib/faraday/logging/formatter.rb +105 -0
  30. data/lib/faraday/middleware.rb +12 -28
  31. data/lib/faraday/middleware_registry.rb +129 -0
  32. data/lib/faraday/options/connection_options.rb +22 -0
  33. data/lib/faraday/options/env.rb +181 -0
  34. data/lib/faraday/options/proxy_options.rb +28 -0
  35. data/lib/faraday/options/request_options.rb +22 -0
  36. data/lib/faraday/options/ssl_options.rb +59 -0
  37. data/lib/faraday/options.rb +36 -191
  38. data/lib/faraday/param_part.rb +53 -0
  39. data/lib/faraday/parameters.rb +4 -197
  40. data/lib/faraday/rack_builder.rb +76 -64
  41. data/lib/faraday/request/authorization.rb +44 -30
  42. data/lib/faraday/request/basic_authentication.rb +14 -7
  43. data/lib/faraday/request/instrumentation.rb +45 -27
  44. data/lib/faraday/request/multipart.rb +86 -48
  45. data/lib/faraday/request/retry.rb +197 -171
  46. data/lib/faraday/request/token_authentication.rb +15 -10
  47. data/lib/faraday/request/url_encoded.rb +43 -23
  48. data/lib/faraday/request.rb +86 -46
  49. data/lib/faraday/response/logger.rb +22 -69
  50. data/lib/faraday/response/raise_error.rb +49 -18
  51. data/lib/faraday/response.rb +24 -14
  52. data/lib/faraday/utils/headers.rb +139 -0
  53. data/lib/faraday/utils/params_hash.rb +61 -0
  54. data/lib/faraday/utils.rb +38 -247
  55. data/lib/faraday.rb +94 -175
  56. data/spec/external_adapters/faraday_specs_setup.rb +14 -0
  57. data/spec/faraday/adapter/em_http_spec.rb +47 -0
  58. data/spec/faraday/adapter/em_synchrony_spec.rb +16 -0
  59. data/spec/faraday/adapter/excon_spec.rb +49 -0
  60. data/spec/faraday/adapter/httpclient_spec.rb +73 -0
  61. data/spec/faraday/adapter/net_http_persistent_spec.rb +57 -0
  62. data/spec/faraday/adapter/net_http_spec.rb +64 -0
  63. data/spec/faraday/adapter/patron_spec.rb +18 -0
  64. data/spec/faraday/adapter/rack_spec.rb +8 -0
  65. data/spec/faraday/adapter/test_spec.rb +260 -0
  66. data/spec/faraday/adapter/typhoeus_spec.rb +7 -0
  67. data/spec/faraday/adapter_registry_spec.rb +28 -0
  68. data/spec/faraday/adapter_spec.rb +55 -0
  69. data/spec/faraday/composite_read_io_spec.rb +80 -0
  70. data/spec/faraday/connection_spec.rb +691 -0
  71. data/spec/faraday/error_spec.rb +0 -57
  72. data/spec/faraday/middleware_spec.rb +26 -0
  73. data/spec/faraday/options/env_spec.rb +70 -0
  74. data/spec/faraday/options/options_spec.rb +297 -0
  75. data/spec/faraday/options/proxy_options_spec.rb +37 -0
  76. data/spec/faraday/options/request_options_spec.rb +19 -0
  77. data/spec/faraday/params_encoders/flat_spec.rb +42 -0
  78. data/spec/faraday/params_encoders/nested_spec.rb +142 -0
  79. data/spec/faraday/rack_builder_spec.rb +345 -0
  80. data/spec/faraday/request/authorization_spec.rb +88 -0
  81. data/spec/faraday/request/instrumentation_spec.rb +76 -0
  82. data/spec/faraday/request/multipart_spec.rb +302 -0
  83. data/spec/faraday/request/retry_spec.rb +242 -0
  84. data/spec/faraday/request/url_encoded_spec.rb +83 -0
  85. data/spec/faraday/request_spec.rb +120 -0
  86. data/spec/faraday/response/logger_spec.rb +220 -0
  87. data/spec/faraday/response/middleware_spec.rb +68 -0
  88. data/spec/faraday/response/raise_error_spec.rb +48 -15
  89. data/spec/faraday/response_spec.rb +75 -0
  90. data/spec/faraday/utils/headers_spec.rb +82 -0
  91. data/spec/faraday/utils_spec.rb +56 -0
  92. data/spec/faraday_spec.rb +37 -0
  93. data/spec/spec_helper.rb +63 -36
  94. data/spec/support/disabling_stub.rb +14 -0
  95. data/spec/support/fake_safe_buffer.rb +15 -0
  96. data/spec/support/helper_methods.rb +133 -0
  97. data/spec/support/shared_examples/adapter.rb +104 -0
  98. data/spec/support/shared_examples/params_encoder.rb +18 -0
  99. data/spec/support/shared_examples/request_method.rb +234 -0
  100. data/spec/support/streaming_response_checker.rb +35 -0
  101. data/spec/support/webmock_rack_app.rb +68 -0
  102. metadata +81 -38
  103. data/lib/faraday/deprecate.rb +0 -109
  104. data/lib/faraday/upload_io.rb +0 -67
  105. data/spec/faraday/deprecate_spec.rb +0 -147
  106. data/test/adapters/default_test.rb +0 -14
  107. data/test/adapters/em_http_test.rb +0 -30
  108. data/test/adapters/em_synchrony_test.rb +0 -32
  109. data/test/adapters/excon_test.rb +0 -30
  110. data/test/adapters/httpclient_test.rb +0 -34
  111. data/test/adapters/integration.rb +0 -263
  112. data/test/adapters/logger_test.rb +0 -136
  113. data/test/adapters/net_http_persistent_test.rb +0 -114
  114. data/test/adapters/net_http_test.rb +0 -79
  115. data/test/adapters/patron_test.rb +0 -40
  116. data/test/adapters/rack_test.rb +0 -38
  117. data/test/adapters/test_middleware_test.rb +0 -157
  118. data/test/adapters/typhoeus_test.rb +0 -38
  119. data/test/authentication_middleware_test.rb +0 -65
  120. data/test/composite_read_io_test.rb +0 -109
  121. data/test/connection_test.rb +0 -738
  122. data/test/env_test.rb +0 -268
  123. data/test/helper.rb +0 -75
  124. data/test/live_server.rb +0 -67
  125. data/test/middleware/instrumentation_test.rb +0 -88
  126. data/test/middleware/retry_test.rb +0 -282
  127. data/test/middleware_stack_test.rb +0 -260
  128. data/test/multibyte.txt +0 -1
  129. data/test/options_test.rb +0 -333
  130. data/test/parameters_test.rb +0 -157
  131. data/test/request_middleware_test.rb +0 -126
  132. data/test/response_middleware_test.rb +0 -72
  133. data/test/strawberry.rb +0 -2
  134. data/test/utils_test.rb +0 -98
@@ -0,0 +1,234 @@
1
+ # frozen_string_literal: true
2
+
3
+ shared_examples 'a request method' do |http_method|
4
+ let(:query_or_body) { method_with_body?(http_method) ? :body : :query }
5
+ let(:response) { conn.public_send(http_method, '/') }
6
+
7
+ unless http_method == :head && feature?(:skip_response_body_on_head)
8
+ it 'retrieves the response body' do
9
+ res_body = 'test'
10
+ request_stub.to_return(body: res_body)
11
+ expect(conn.public_send(http_method, '/').body).to eq(res_body)
12
+ end
13
+ end
14
+
15
+ it 'handles headers with multiple values' do
16
+ request_stub.to_return(headers: { 'Set-Cookie' => 'name=value' })
17
+ expect(response.headers['set-cookie']).to eq('name=value')
18
+ end
19
+
20
+ it 'retrieves the response headers' do
21
+ request_stub.to_return(headers: { 'Content-Type' => 'text/plain' })
22
+ expect(response.headers['Content-Type']).to match(%r{text/plain})
23
+ expect(response.headers['content-type']).to match(%r{text/plain})
24
+ end
25
+
26
+ it 'sends user agent' do
27
+ request_stub.with(headers: { 'User-Agent' => 'Agent Faraday' })
28
+ conn.public_send(http_method, '/', nil, user_agent: 'Agent Faraday')
29
+ end
30
+
31
+ it 'represents empty body response as blank string' do
32
+ expect(response.body).to eq('')
33
+ end
34
+
35
+ it 'handles connection error' do
36
+ request_stub.disable
37
+ expect { conn.public_send(http_method, 'http://localhost:4') }.to raise_error(Faraday::ConnectionFailed)
38
+ end
39
+
40
+ on_feature :local_socket_binding do
41
+ it 'binds local socket' do
42
+ stub_request(http_method, 'http://example.com')
43
+
44
+ host = '1.2.3.4'
45
+ port = 1234
46
+ conn_options[:request] = { bind: { host: host, port: port } }
47
+
48
+ conn.public_send(http_method, '/')
49
+
50
+ expect(conn.options[:bind][:host]).to eq(host)
51
+ expect(conn.options[:bind][:port]).to eq(port)
52
+ end
53
+ end
54
+
55
+ # context 'when wrong ssl certificate is provided' do
56
+ # let(:ca_file_path) { 'tmp/faraday-different-ca-cert.crt' }
57
+ # before { conn_options.merge!(ssl: { ca_file: ca_file_path }) }
58
+ #
59
+ # it do
60
+ # expect { conn.public_send(http_method, '/') }.to raise_error(Faraday::SSLError) # do |ex|
61
+ # expect(ex.message).to include?('certificate')
62
+ # end
63
+ # end
64
+ # end
65
+
66
+ on_feature :request_body_on_query_methods do
67
+ it 'sends request body' do
68
+ request_stub.with(Hash[:body, 'test'])
69
+ res = if query_or_body == :body
70
+ conn.public_send(http_method, '/', 'test')
71
+ else
72
+ conn.public_send(http_method, '/') do |req|
73
+ req.body = 'test'
74
+ end
75
+ end
76
+ expect(res.env.request_body).to eq('test')
77
+ end
78
+ end
79
+
80
+ it 'sends url encoded parameters' do
81
+ payload = { name: 'zack' }
82
+ request_stub.with(Hash[query_or_body, payload])
83
+ res = conn.public_send(http_method, '/', payload)
84
+ if query_or_body == :query
85
+ expect(res.env.request_body).to be_nil
86
+ else
87
+ expect(res.env.request_body).to eq('name=zack')
88
+ end
89
+ end
90
+
91
+ it 'sends url encoded nested parameters' do
92
+ payload = { name: { first: 'zack' } }
93
+ request_stub.with(Hash[query_or_body, payload])
94
+ conn.public_send(http_method, '/', payload)
95
+ end
96
+
97
+ # TODO: This needs reimplementation: see https://github.com/lostisland/faraday/issues/718
98
+ # Should raise Faraday::TimeoutError
99
+ it 'supports timeout option' do
100
+ conn_options[:request] = { timeout: 1 }
101
+ request_stub.to_timeout
102
+ exc = adapter == 'NetHttp' ? Faraday::ConnectionFailed : Faraday::TimeoutError
103
+ expect { conn.public_send(http_method, '/') }.to raise_error(exc)
104
+ end
105
+
106
+ # TODO: This needs reimplementation: see https://github.com/lostisland/faraday/issues/718
107
+ # Should raise Faraday::ConnectionFailed
108
+ it 'supports open_timeout option' do
109
+ conn_options[:request] = { open_timeout: 1 }
110
+ request_stub.to_timeout
111
+ exc = adapter == 'NetHttp' ? Faraday::ConnectionFailed : Faraday::TimeoutError
112
+ expect { conn.public_send(http_method, '/') }.to raise_error(exc)
113
+ end
114
+
115
+ # Can't send files on get, head and delete methods
116
+ if method_with_body?(http_method)
117
+ it 'sends files' do
118
+ payload = { uploaded_file: multipart_file }
119
+ request_stub.with(headers: { 'Content-Type' => %r{\Amultipart/form-data} }) do |request|
120
+ # WebMock does not support matching body for multipart/form-data requests yet :(
121
+ # https://github.com/bblimke/webmock/issues/623
122
+ request.body.include?('RubyMultipartPost')
123
+ end
124
+ conn.public_send(http_method, '/', payload)
125
+ end
126
+ end
127
+
128
+ on_feature :reason_phrase_parse do
129
+ it 'parses the reason phrase' do
130
+ request_stub.to_return(status: [200, 'OK'])
131
+ expect(response.reason_phrase).to eq('OK')
132
+ end
133
+ end
134
+
135
+ on_feature :compression do
136
+ # Accept-Encoding header not sent for HEAD requests as body is not expected in the response.
137
+ unless http_method == :head
138
+ it 'handles gzip compression' do
139
+ request_stub.with(headers: { 'Accept-Encoding' => /\bgzip\b/ })
140
+ conn.public_send(http_method, '/')
141
+ end
142
+
143
+ it 'handles deflate compression' do
144
+ request_stub.with(headers: { 'Accept-Encoding' => /\bdeflate\b/ })
145
+ conn.public_send(http_method, '/')
146
+ end
147
+ end
148
+ end
149
+
150
+ on_feature :streaming do
151
+ describe 'streaming' do
152
+ let(:streamed) { [] }
153
+
154
+ context 'when response is empty' do
155
+ it do
156
+ conn.public_send(http_method, '/') do |req|
157
+ req.options.on_data = proc { |*args| streamed << args }
158
+ end
159
+
160
+ expect(streamed).to eq([['', 0]])
161
+ end
162
+ end
163
+
164
+ context 'when response contains big data' do
165
+ before { request_stub.to_return(body: big_string) }
166
+
167
+ it 'handles streaming' do
168
+ response = conn.public_send(http_method, '/') do |req|
169
+ req.options.on_data = proc { |*args| streamed << args }
170
+ end
171
+
172
+ expect(response.body).to eq('')
173
+ check_streaming_response(streamed, chunk_size: 16 * 1024)
174
+ end
175
+ end
176
+ end
177
+ end
178
+
179
+ on_feature :parallel do
180
+ context 'with parallel setup' do
181
+ before do
182
+ @resp1 = nil
183
+ @resp2 = nil
184
+ @payload1 = { a: '1' }
185
+ @payload2 = { b: '2' }
186
+
187
+ request_stub
188
+ .with(Hash[query_or_body, @payload1])
189
+ .to_return(body: @payload1.to_json)
190
+
191
+ stub_request(http_method, remote)
192
+ .with(Hash[query_or_body, @payload2])
193
+ .to_return(body: @payload2.to_json)
194
+
195
+ conn.in_parallel do
196
+ @resp1 = conn.public_send(http_method, '/', @payload1)
197
+ @resp2 = conn.public_send(http_method, '/', @payload2)
198
+
199
+ expect(conn.in_parallel?).to be_truthy
200
+ expect(@resp1.body).to be_nil
201
+ expect(@resp2.body).to be_nil
202
+ end
203
+
204
+ expect(conn.in_parallel?).to be_falsey
205
+ end
206
+
207
+ it 'handles parallel requests status' do
208
+ expect(@resp1&.status).to eq(200)
209
+ expect(@resp2&.status).to eq(200)
210
+ end
211
+
212
+ unless http_method == :head && feature?(:skip_response_body_on_head)
213
+ it 'handles parallel requests body' do
214
+ expect(@resp1&.body).to eq(@payload1.to_json)
215
+ expect(@resp2&.body).to eq(@payload2.to_json)
216
+ end
217
+ end
218
+ end
219
+ end
220
+
221
+ it 'handles requests with proxy' do
222
+ conn_options[:proxy] = 'http://google.co.uk'
223
+
224
+ res = conn.public_send(http_method, '/')
225
+ expect(res.status).to eq(200)
226
+ end
227
+
228
+ it 'handles proxy failures' do
229
+ conn_options[:proxy] = 'http://google.co.uk'
230
+ request_stub.to_return(status: 407)
231
+
232
+ expect { conn.public_send(http_method, '/') }.to raise_error(Faraday::ProxyAuthError)
233
+ end
234
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Faraday
4
+ module StreamingResponseChecker
5
+ def check_streaming_response(streamed, options = {})
6
+ opts = {
7
+ prefix: '',
8
+ streaming?: true
9
+ }.merge(options)
10
+
11
+ expected_response = opts[:prefix] + big_string
12
+
13
+ chunks, sizes = streamed.transpose
14
+
15
+ # Check that the total size of the chunks (via the last size returned)
16
+ # is the same size as the expected_response
17
+ expect(sizes.last).to eq(expected_response.bytesize)
18
+
19
+ start_index = 0
20
+ expected_chunks = []
21
+ chunks.each do |actual_chunk|
22
+ expected_chunk = expected_response[start_index..((start_index + actual_chunk.bytesize) - 1)]
23
+ expected_chunks << expected_chunk
24
+ start_index += expected_chunk.bytesize
25
+ end
26
+
27
+ # it's easier to read a smaller portion, so we check that first
28
+ expect(expected_chunks[0][0..255]).to eq(chunks[0][0..255])
29
+
30
+ [expected_chunks, chunks].transpose.each do |expected, actual|
31
+ expect(actual).to eq(expected)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Rack app used to test the Rack adapter.
4
+ # Uses Webmock to check if requests are registered, in which case it returns
5
+ # the registered response.
6
+ class WebmockRackApp
7
+ def call(env)
8
+ req_signature = WebMock::RequestSignature.new(
9
+ req_method(env),
10
+ req_uri(env),
11
+ body: req_body(env),
12
+ headers: req_headers(env)
13
+ )
14
+
15
+ WebMock::RequestRegistry
16
+ .instance
17
+ .requested_signatures
18
+ .put(req_signature)
19
+
20
+ process_response(req_signature)
21
+ end
22
+
23
+ def req_method(env)
24
+ env['REQUEST_METHOD'].downcase.to_sym
25
+ end
26
+
27
+ def req_uri(env)
28
+ scheme = env['rack.url_scheme']
29
+ host = env['SERVER_NAME']
30
+ port = env['SERVER_PORT']
31
+ path = env['PATH_INFO']
32
+ query = env['QUERY_STRING']
33
+
34
+ url = +"#{scheme}://#{host}:#{port}#{path}"
35
+ url += "?#{query}" if query
36
+
37
+ uri = WebMock::Util::URI.heuristic_parse(url)
38
+ uri.path = uri.normalized_path.gsub('[^:]//', '/')
39
+ uri
40
+ end
41
+
42
+ def req_headers(env)
43
+ http_headers = env.select { |k, _| k.start_with?('HTTP_') }
44
+ .map { |k, v| [k[5..-1], v] }
45
+ .to_h
46
+
47
+ special_headers = Faraday::Adapter::Rack::SPECIAL_HEADERS
48
+ http_headers.merge(env.select { |k, _| special_headers.include?(k) })
49
+ end
50
+
51
+ def req_body(env)
52
+ env['rack.input'].read
53
+ end
54
+
55
+ def process_response(req_signature)
56
+ res = WebMock::StubRegistry.instance.response_for_request(req_signature)
57
+
58
+ if res.nil? && req_signature.uri.host == 'localhost'
59
+ raise Faraday::ConnectionFailed, 'Trying to connect to localhost'
60
+ end
61
+
62
+ raise WebMock::NetConnectNotAllowedError, req_signature unless res
63
+
64
+ raise Faraday::TimeoutError if res.should_timeout
65
+
66
+ [res.status[0], res.headers || {}, [res.body || '']]
67
+ end
68
+ end
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: 0.17.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - "@technoweenie"
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2022-02-21 00:00:00.000000000 Z
13
+ date: 2020-10-17 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: multipart-post
@@ -32,6 +32,20 @@ dependencies:
32
32
  - - "<"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '3'
35
+ - !ruby/object:Gem::Dependency
36
+ name: ruby2_keywords
37
+ requirement: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ type: :runtime
43
+ prerelease: false
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
35
49
  description:
36
50
  email: technoweenie@gmail.com
37
51
  executables: []
@@ -42,6 +56,8 @@ files:
42
56
  - LICENSE.md
43
57
  - README.md
44
58
  - Rakefile
59
+ - examples/client_spec.rb
60
+ - examples/client_test.rb
45
61
  - lib/faraday.rb
46
62
  - lib/faraday/adapter.rb
47
63
  - lib/faraday/adapter/em_http.rb
@@ -56,12 +72,24 @@ files:
56
72
  - lib/faraday/adapter/rack.rb
57
73
  - lib/faraday/adapter/test.rb
58
74
  - lib/faraday/adapter/typhoeus.rb
75
+ - lib/faraday/adapter_registry.rb
59
76
  - lib/faraday/autoload.rb
60
77
  - lib/faraday/connection.rb
61
- - lib/faraday/deprecate.rb
78
+ - lib/faraday/dependency_loader.rb
79
+ - lib/faraday/encoders/flat_params_encoder.rb
80
+ - lib/faraday/encoders/nested_params_encoder.rb
62
81
  - lib/faraday/error.rb
82
+ - lib/faraday/file_part.rb
83
+ - lib/faraday/logging/formatter.rb
63
84
  - lib/faraday/middleware.rb
85
+ - lib/faraday/middleware_registry.rb
64
86
  - lib/faraday/options.rb
87
+ - lib/faraday/options/connection_options.rb
88
+ - lib/faraday/options/env.rb
89
+ - lib/faraday/options/proxy_options.rb
90
+ - lib/faraday/options/request_options.rb
91
+ - lib/faraday/options/ssl_options.rb
92
+ - lib/faraday/param_part.rb
65
93
  - lib/faraday/parameters.rb
66
94
  - lib/faraday/rack_builder.rb
67
95
  - lib/faraday/request.rb
@@ -75,65 +103,80 @@ files:
75
103
  - lib/faraday/response.rb
76
104
  - lib/faraday/response/logger.rb
77
105
  - lib/faraday/response/raise_error.rb
78
- - lib/faraday/upload_io.rb
79
106
  - lib/faraday/utils.rb
80
- - spec/faraday/deprecate_spec.rb
107
+ - lib/faraday/utils/headers.rb
108
+ - lib/faraday/utils/params_hash.rb
109
+ - spec/external_adapters/faraday_specs_setup.rb
110
+ - spec/faraday/adapter/em_http_spec.rb
111
+ - spec/faraday/adapter/em_synchrony_spec.rb
112
+ - spec/faraday/adapter/excon_spec.rb
113
+ - spec/faraday/adapter/httpclient_spec.rb
114
+ - spec/faraday/adapter/net_http_persistent_spec.rb
115
+ - spec/faraday/adapter/net_http_spec.rb
116
+ - spec/faraday/adapter/patron_spec.rb
117
+ - spec/faraday/adapter/rack_spec.rb
118
+ - spec/faraday/adapter/test_spec.rb
119
+ - spec/faraday/adapter/typhoeus_spec.rb
120
+ - spec/faraday/adapter_registry_spec.rb
121
+ - spec/faraday/adapter_spec.rb
122
+ - spec/faraday/composite_read_io_spec.rb
123
+ - spec/faraday/connection_spec.rb
81
124
  - spec/faraday/error_spec.rb
125
+ - spec/faraday/middleware_spec.rb
126
+ - spec/faraday/options/env_spec.rb
127
+ - spec/faraday/options/options_spec.rb
128
+ - spec/faraday/options/proxy_options_spec.rb
129
+ - spec/faraday/options/request_options_spec.rb
130
+ - spec/faraday/params_encoders/flat_spec.rb
131
+ - spec/faraday/params_encoders/nested_spec.rb
132
+ - spec/faraday/rack_builder_spec.rb
133
+ - spec/faraday/request/authorization_spec.rb
134
+ - spec/faraday/request/instrumentation_spec.rb
135
+ - spec/faraday/request/multipart_spec.rb
136
+ - spec/faraday/request/retry_spec.rb
137
+ - spec/faraday/request/url_encoded_spec.rb
138
+ - spec/faraday/request_spec.rb
139
+ - spec/faraday/response/logger_spec.rb
140
+ - spec/faraday/response/middleware_spec.rb
82
141
  - spec/faraday/response/raise_error_spec.rb
142
+ - spec/faraday/response_spec.rb
143
+ - spec/faraday/utils/headers_spec.rb
144
+ - spec/faraday/utils_spec.rb
145
+ - spec/faraday_spec.rb
83
146
  - spec/spec_helper.rb
84
- - test/adapters/default_test.rb
85
- - test/adapters/em_http_test.rb
86
- - test/adapters/em_synchrony_test.rb
87
- - test/adapters/excon_test.rb
88
- - test/adapters/httpclient_test.rb
89
- - test/adapters/integration.rb
90
- - test/adapters/logger_test.rb
91
- - test/adapters/net_http_persistent_test.rb
92
- - test/adapters/net_http_test.rb
93
- - test/adapters/patron_test.rb
94
- - test/adapters/rack_test.rb
95
- - test/adapters/test_middleware_test.rb
96
- - test/adapters/typhoeus_test.rb
97
- - test/authentication_middleware_test.rb
98
- - test/composite_read_io_test.rb
99
- - test/connection_test.rb
100
- - test/env_test.rb
101
- - test/helper.rb
102
- - test/live_server.rb
103
- - test/middleware/instrumentation_test.rb
104
- - test/middleware/retry_test.rb
105
- - test/middleware_stack_test.rb
106
- - test/multibyte.txt
107
- - test/options_test.rb
108
- - test/parameters_test.rb
109
- - test/request_middleware_test.rb
110
- - test/response_middleware_test.rb
111
- - test/strawberry.rb
112
- - test/utils_test.rb
147
+ - spec/support/disabling_stub.rb
148
+ - spec/support/fake_safe_buffer.rb
149
+ - spec/support/helper_methods.rb
150
+ - spec/support/shared_examples/adapter.rb
151
+ - spec/support/shared_examples/params_encoder.rb
152
+ - spec/support/shared_examples/request_method.rb
153
+ - spec/support/streaming_response_checker.rb
154
+ - spec/support/webmock_rack_app.rb
113
155
  homepage: https://lostisland.github.io/faraday
114
156
  licenses:
115
157
  - MIT
116
158
  metadata:
117
159
  homepage_uri: https://lostisland.github.io/faraday
118
- changelog_uri: https://github.com/lostisland/faraday/blob/master/CHANGELOG.md
119
- source_code_uri: https://github.com/lostisland/faraday/
160
+ changelog_uri: https://github.com/lostisland/faraday/releases/tag/v1.1.0
161
+ source_code_uri: https://github.com/lostisland/faraday
120
162
  bug_tracker_uri: https://github.com/lostisland/faraday/issues
121
163
  post_install_message:
122
164
  rdoc_options: []
123
165
  require_paths:
124
166
  - lib
167
+ - spec/external_adapters
125
168
  required_ruby_version: !ruby/object:Gem::Requirement
126
169
  requirements:
127
170
  - - ">="
128
171
  - !ruby/object:Gem::Version
129
- version: '1.9'
172
+ version: '2.4'
130
173
  required_rubygems_version: !ruby/object:Gem::Requirement
131
174
  requirements:
132
175
  - - ">="
133
176
  - !ruby/object:Gem::Version
134
177
  version: '0'
135
178
  requirements: []
136
- rubygems_version: 3.2.32
179
+ rubygems_version: 3.0.3
137
180
  signing_key:
138
181
  specification_version: 4
139
182
  summary: HTTP/REST API client library.
@@ -1,109 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Faraday
4
- # @param new_klass [Class] new Klass to use
5
- #
6
- # @return [Class] A modified version of new_klass that warns on
7
- # usage about deprecation.
8
- # @see Faraday::Deprecate
9
- module DeprecatedClass
10
- def self.proxy_class(origclass, ver = '1.0')
11
- proxy = Class.new(origclass) do
12
- const_set("ORIG_CLASS", origclass)
13
-
14
- class << self
15
- extend Faraday::Deprecate
16
-
17
- def ===(other)
18
- (superclass == const_get("ORIG_CLASS") && other.is_a?(superclass)) || super
19
- end
20
- end
21
- end
22
- proxy.singleton_class.send(:deprecate, :new, "#{origclass}.new", ver)
23
- proxy.singleton_class.send(:deprecate, :inherited, origclass.name, ver)
24
- proxy
25
- end
26
- end
27
-
28
- # Deprecation using semver instead of date, based on Gem::Deprecate
29
- # Provides a single method +deprecate+ to be used to declare when
30
- # something is going away.
31
- #
32
- # class Legacy
33
- # def self.klass_method
34
- # # ...
35
- # end
36
- #
37
- # def instance_method
38
- # # ...
39
- # end
40
- #
41
- # extend Faraday::Deprecate
42
- # deprecate :instance_method, "X.z", '1.0'
43
- #
44
- # class << self
45
- # extend Faraday::Deprecate
46
- # deprecate :klass_method, :none, '1.0'
47
- # end
48
- # end
49
- module Deprecate
50
- def self.skip # :nodoc:
51
- @skip ||= begin
52
- case ENV['FARADAY_DEPRECATE'].to_s.downcase
53
- when '1', 'warn' then :warn
54
- else :skip
55
- end
56
- end
57
- @skip == :skip
58
- end
59
-
60
- def self.skip=(value) # :nodoc:
61
- @skip = value ? :skip : :warn
62
- end
63
-
64
- # Temporarily turn off warnings. Intended for tests only.
65
- def skip_during
66
- original = Faraday::Deprecate.skip
67
- Faraday::Deprecate.skip, = true
68
- yield
69
- ensure
70
- Faraday::Deprecate.skip = original
71
- end
72
-
73
- # Simple deprecation method that deprecates +name+ by wrapping it up
74
- # in a dummy method. It warns on each call to the dummy method
75
- # telling the user of +repl+ (unless +repl+ is :none) and the
76
- # semver that it is planned to go away.
77
- # @param name [Symbol] the method symbol to deprecate
78
- # @param repl [#to_s, :none] the replacement to use, when `:none` it will
79
- # alert the user that no replacemtent is present.
80
- # @param ver [String] the semver the method will be removed.
81
- def deprecate(name, repl, ver)
82
- class_eval do
83
- gem_ver = Gem::Version.new(ver)
84
- old = "_deprecated_#{name}"
85
- alias_method old, name
86
- define_method name do |*args, &block|
87
- mod = is_a? Module
88
- target = mod ? "#{self}." : "#{self.class}#"
89
- target_message = if name == :inherited
90
- "Inheriting #{self}"
91
- else
92
- "#{target}#{name}"
93
- end
94
-
95
- msg = [
96
- "NOTE: #{target_message} is deprecated",
97
- repl == :none ? ' with no replacement' : "; use #{repl} instead. ",
98
- "It will be removed in or after version #{gem_ver}",
99
- "\n#{target}#{name} called from #{Gem.location_of_caller.join(':')}"
100
- ]
101
- warn "#{msg.join}." unless Faraday::Deprecate.skip
102
- send old, *args, &block
103
- end
104
- end
105
- end
106
-
107
- module_function :deprecate, :skip_during
108
- end
109
- end
@@ -1,67 +0,0 @@
1
- begin
2
- require 'composite_io'
3
- require 'parts'
4
- require 'stringio'
5
- rescue LoadError
6
- $stderr.puts "Install the multipart-post gem."
7
- raise
8
- end
9
-
10
- module Faraday
11
- # Similar but not compatible with ::CompositeReadIO provided by multipart-post.
12
- class CompositeReadIO
13
- def initialize(*parts)
14
- @parts = parts.flatten
15
- @ios = @parts.map { |part| part.to_io }
16
- @index = 0
17
- end
18
-
19
- def length
20
- @parts.inject(0) { |sum, part| sum + part.length }
21
- end
22
-
23
- def rewind
24
- @ios.each { |io| io.rewind }
25
- @index = 0
26
- end
27
-
28
- # Read from IOs in order until `length` bytes have been received.
29
- def read(length = nil, outbuf = nil)
30
- got_result = false
31
- outbuf = outbuf ? outbuf.replace("") : ""
32
-
33
- while io = current_io
34
- if result = io.read(length)
35
- got_result ||= !result.nil?
36
- result.force_encoding("BINARY") if result.respond_to?(:force_encoding)
37
- outbuf << result
38
- length -= result.length if length
39
- break if length == 0
40
- end
41
- advance_io
42
- end
43
- (!got_result && length) ? nil : outbuf
44
- end
45
-
46
- def close
47
- @ios.each { |io| io.close }
48
- end
49
-
50
- def ensure_open_and_readable
51
- # Rubinius compatibility
52
- end
53
-
54
- private
55
-
56
- def current_io
57
- @ios[@index]
58
- end
59
-
60
- def advance_io
61
- @index += 1
62
- end
63
- end
64
-
65
- UploadIO = ::UploadIO
66
- Parts = ::Parts
67
- end