faraday 0.8.11 → 0.9.0.rc1
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.
- data/.document +6 -0
- data/CONTRIBUTING.md +36 -0
- data/Gemfile +7 -6
- data/LICENSE.md +1 -1
- data/README.md +38 -51
- data/Rakefile +2 -18
- data/faraday.gemspec +34 -0
- data/lib/faraday.rb +181 -67
- data/lib/faraday/adapter.rb +19 -34
- data/lib/faraday/adapter/em_http.rb +24 -10
- data/lib/faraday/adapter/em_synchrony.rb +1 -15
- data/lib/faraday/adapter/excon.rb +6 -12
- data/lib/faraday/adapter/httpclient.rb +92 -0
- data/lib/faraday/adapter/net_http.rb +2 -3
- data/lib/faraday/adapter/net_http_persistent.rb +3 -15
- data/lib/faraday/adapter/patron.rb +13 -21
- data/lib/faraday/adapter/rack.rb +0 -2
- data/lib/faraday/adapter/test.rb +35 -36
- data/lib/faraday/adapter/typhoeus.rb +10 -12
- data/lib/faraday/autoload.rb +87 -0
- data/lib/faraday/connection.rb +196 -99
- data/lib/faraday/error.rb +33 -33
- data/lib/faraday/options.rb +215 -0
- data/lib/faraday/parameters.rb +193 -0
- data/lib/faraday/{builder.rb → rack_builder.rb} +78 -21
- data/lib/faraday/request.rb +12 -25
- data/lib/faraday/request/authorization.rb +3 -3
- data/lib/faraday/request/basic_authentication.rb +1 -1
- data/lib/faraday/request/instrumentation.rb +38 -0
- data/lib/faraday/request/multipart.rb +10 -9
- data/lib/faraday/request/retry.rb +70 -6
- data/lib/faraday/request/token_authentication.rb +2 -2
- data/lib/faraday/request/url_encoded.rb +7 -6
- data/lib/faraday/response.rb +17 -22
- data/lib/faraday/response/logger.rb +4 -4
- data/lib/faraday/response/raise_error.rb +4 -5
- data/lib/faraday/utils.rb +54 -67
- data/script/console +7 -0
- data/script/release +6 -3
- data/script/server +3 -1
- data/script/test +7 -33
- data/test/adapters/em_http_test.rb +6 -1
- data/test/adapters/em_synchrony_test.rb +7 -1
- data/test/adapters/excon_test.rb +0 -7
- data/test/adapters/httpclient_test.rb +16 -0
- data/test/adapters/integration.rb +8 -39
- data/test/adapters/logger_test.rb +1 -1
- data/test/adapters/net_http_test.rb +0 -31
- data/test/adapters/patron_test.rb +1 -1
- data/test/adapters/rack_test.rb +0 -5
- data/test/adapters/test_middleware_test.rb +19 -4
- data/test/adapters/typhoeus_test.rb +20 -3
- data/test/authentication_middleware_test.rb +7 -7
- data/test/connection_test.rb +52 -75
- data/test/env_test.rb +33 -24
- data/test/helper.rb +15 -13
- data/test/live_server.rb +10 -4
- data/test/middleware/instrumentation_test.rb +75 -0
- data/test/middleware/retry_test.rb +44 -38
- data/test/middleware_stack_test.rb +12 -11
- data/test/options_test.rb +126 -0
- data/test/request_middleware_test.rb +17 -7
- data/test/response_middleware_test.rb +2 -4
- data/test/strawberry.rb +2 -0
- metadata +82 -28
- checksums.yaml +0 -7
- data/script/proxy-server +0 -41
- data/test/multibyte.txt +0 -1
- data/test/parameters_test.rb +0 -24
- data/test/utils_test.rb +0 -30
@@ -8,8 +8,13 @@ module Adapters
|
|
8
8
|
Integration.apply(self, :Parallel) do
|
9
9
|
# https://github.com/eventmachine/eventmachine/pull/289
|
10
10
|
undef :test_timeout
|
11
|
+
|
12
|
+
def test_binds_local_socket
|
13
|
+
host = '1.2.3.4'
|
14
|
+
conn = create_connection :request => { :bind => { :host => host } }
|
15
|
+
assert_equal host, conn.options[:bind][:host]
|
16
|
+
end
|
11
17
|
end unless jruby? and ssl_mode?
|
12
18
|
# https://github.com/eventmachine/eventmachine/issues/180
|
13
|
-
|
14
19
|
end
|
15
20
|
end
|
@@ -8,7 +8,13 @@ module Adapters
|
|
8
8
|
Integration.apply(self, :Parallel) do
|
9
9
|
# https://github.com/eventmachine/eventmachine/pull/289
|
10
10
|
undef :test_timeout
|
11
|
-
end unless RUBY_VERSION < '1.9' or jruby?
|
12
11
|
|
12
|
+
def test_binds_local_socket
|
13
|
+
host = '1.2.3.4'
|
14
|
+
conn = create_connection :request => { :bind => { :host => host } }
|
15
|
+
#put conn.get('/who-am-i').body
|
16
|
+
assert_equal host, conn.options[:bind][:host]
|
17
|
+
end
|
18
|
+
end unless RUBY_VERSION < '1.9' or jruby?
|
13
19
|
end
|
14
20
|
end
|
data/test/adapters/excon_test.rb
CHANGED
@@ -8,13 +8,6 @@ module Adapters
|
|
8
8
|
Integration.apply(self, :NonParallel) do
|
9
9
|
# https://github.com/geemus/excon/issues/126 ?
|
10
10
|
undef :test_timeout if ssl_mode?
|
11
|
-
|
12
|
-
# Excon lets OpenSSL::SSL::SSLError be raised without any way to
|
13
|
-
# distinguish whether it happened because of a 407 proxy response
|
14
|
-
undef :test_proxy_auth_fail if ssl_mode?
|
15
|
-
|
16
|
-
# https://github.com/geemus/excon/issues/358
|
17
|
-
undef :test_connection_error if RUBY_VERSION >= '2.1.0'
|
18
11
|
end
|
19
12
|
end
|
20
13
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../integration', __FILE__)
|
2
|
+
|
3
|
+
module Adapters
|
4
|
+
class HttpclientTest < Faraday::TestCase
|
5
|
+
|
6
|
+
def adapter() :httpclient end
|
7
|
+
|
8
|
+
Integration.apply(self, :NonParallel) do
|
9
|
+
def test_binds_local_socket
|
10
|
+
host = '1.2.3.4'
|
11
|
+
conn = create_connection :request => { :bind => { :host => host } }
|
12
|
+
assert_equal host, conn.options[:bind][:host]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'forwardable'
|
2
2
|
require File.expand_path("../../helper", __FILE__)
|
3
|
+
Faraday.require_lib 'autoload'
|
3
4
|
|
4
5
|
module Adapters
|
5
6
|
# Adapter integration tests. To use, implement two methods:
|
@@ -57,7 +58,7 @@ module Adapters
|
|
57
58
|
module Compression
|
58
59
|
def test_GET_handles_compression
|
59
60
|
res = get('echo_header', :name => 'accept-encoding')
|
60
|
-
assert_match
|
61
|
+
assert_match /gzip;.+\bdeflate\b/, res.body
|
61
62
|
end
|
62
63
|
end
|
63
64
|
|
@@ -117,7 +118,7 @@ module Adapters
|
|
117
118
|
resp = post('file') do |req|
|
118
119
|
req.body = {'uploaded_file' => Faraday::UploadIO.new(__FILE__, 'text/x-ruby')}
|
119
120
|
end
|
120
|
-
assert_equal "file integration.rb text/x-ruby
|
121
|
+
assert_equal "file integration.rb text/x-ruby", resp.body
|
121
122
|
end
|
122
123
|
|
123
124
|
def test_PUT_send_url_encoded_params
|
@@ -143,8 +144,7 @@ module Adapters
|
|
143
144
|
end
|
144
145
|
|
145
146
|
def test_HEAD_retrieves_no_response_body
|
146
|
-
|
147
|
-
assert_equal '', head('echo').body.to_s
|
147
|
+
assert_equal '', head('echo').body
|
148
148
|
end
|
149
149
|
|
150
150
|
def test_HEAD_retrieves_the_response_headers
|
@@ -161,45 +161,14 @@ module Adapters
|
|
161
161
|
|
162
162
|
def test_timeout
|
163
163
|
conn = create_connection(:request => {:timeout => 1, :open_timeout => 1})
|
164
|
-
|
164
|
+
assert_raises Faraday::Error::TimeoutError do
|
165
165
|
conn.get '/slow'
|
166
166
|
end
|
167
167
|
end
|
168
168
|
|
169
|
-
def
|
170
|
-
|
171
|
-
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
def test_proxy
|
176
|
-
proxy_uri = URI(ENV['LIVE_PROXY'])
|
177
|
-
conn = create_connection(:proxy => proxy_uri)
|
178
|
-
|
179
|
-
res = conn.get '/echo'
|
180
|
-
assert_equal 'get', res.body
|
181
|
-
|
182
|
-
unless self.class.ssl_mode?
|
183
|
-
# proxy can't append "Via" header for HTTPS responses
|
184
|
-
assert_match(/:#{proxy_uri.port}$/, res['via'])
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_proxy_auth_fail
|
189
|
-
proxy_uri = URI(ENV['LIVE_PROXY'])
|
190
|
-
proxy_uri.password = 'WRONG'
|
191
|
-
conn = create_connection(:proxy => proxy_uri)
|
192
|
-
|
193
|
-
err = assert_raise Faraday::Error::ConnectionFailed do
|
194
|
-
conn.get '/echo'
|
195
|
-
end
|
196
|
-
|
197
|
-
unless self.class.ssl_mode? && (self.class.jruby? ||
|
198
|
-
adapter == :em_http || adapter == :em_synchrony)
|
199
|
-
# JRuby raises "End of file reached" which cannot be distinguished from a 407
|
200
|
-
# EM raises "connection closed by server" due to https://github.com/igrigorik/em-socksify/pull/19
|
201
|
-
assert_equal %{407 "Proxy Authentication Required "}, err.message
|
202
|
-
end
|
169
|
+
def test_empty_body_response_represented_as_blank_string
|
170
|
+
response = get('204')
|
171
|
+
assert_equal '', response.body
|
203
172
|
end
|
204
173
|
|
205
174
|
def adapter
|
@@ -1,6 +1,4 @@
|
|
1
1
|
require File.expand_path('../integration', __FILE__)
|
2
|
-
require 'ostruct'
|
3
|
-
require 'uri'
|
4
2
|
|
5
3
|
module Adapters
|
6
4
|
class NetHttpTest < Faraday::TestCase
|
@@ -12,34 +10,5 @@ module Adapters
|
|
12
10
|
|
13
11
|
Integration.apply(self, *behaviors)
|
14
12
|
|
15
|
-
def test_no_explicit_http_port_number
|
16
|
-
url = URI('http://example.com')
|
17
|
-
url.port = nil
|
18
|
-
|
19
|
-
adapter = Faraday::Adapter::NetHttp.new
|
20
|
-
http = adapter.net_http_connection(:url => url, :request => {})
|
21
|
-
|
22
|
-
assert_equal 80, http.port
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_no_explicit_https_port_number
|
26
|
-
url = URI('https://example.com')
|
27
|
-
url.port = nil
|
28
|
-
|
29
|
-
adapter = Faraday::Adapter::NetHttp.new
|
30
|
-
http = adapter.net_http_connection(:url => url, :request => {})
|
31
|
-
|
32
|
-
assert_equal 443, http.port
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_explicit_port_number
|
36
|
-
url = URI('https://example.com:1234')
|
37
|
-
|
38
|
-
adapter = Faraday::Adapter::NetHttp.new
|
39
|
-
http = adapter.net_http_connection(:url => url, :request => {})
|
40
|
-
|
41
|
-
assert_equal 1234, http.port
|
42
|
-
end
|
43
|
-
|
44
13
|
end
|
45
14
|
end
|
data/test/adapters/rack_test.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
2
2
|
|
3
3
|
module Adapters
|
4
4
|
class TestMiddleware < Faraday::TestCase
|
5
|
+
Stubs = Faraday::Adapter.lookup_middleware(:test)::Stubs
|
5
6
|
def setup
|
6
|
-
@stubs =
|
7
|
+
@stubs = Stubs.new
|
7
8
|
@conn = Faraday.new do |builder|
|
8
9
|
builder.adapter :test, @stubs
|
9
10
|
end
|
@@ -36,11 +37,18 @@ module Adapters
|
|
36
37
|
@stubs.get('/optional?a=1') { [200, {}, 'a'] }
|
37
38
|
assert_equal 'a', @conn.get('/optional?a=1&b=1').body
|
38
39
|
assert_equal 'a', @conn.get('/optional?a=1').body
|
39
|
-
|
40
|
+
assert_raises Faraday::Adapter::Test::Stubs::NotFound do
|
40
41
|
@conn.get('/optional')
|
41
42
|
end
|
42
43
|
end
|
43
44
|
|
45
|
+
def test_middleware_with_http_headers
|
46
|
+
@stubs.get('/yo', { 'X-HELLO' => 'hello' }) { [200, {}, 'a'] }
|
47
|
+
@stubs.get('/yo') { [200, {}, 'b'] }
|
48
|
+
assert_equal 'a', @conn.get('/yo') { |env| env.headers['X-HELLO'] = 'hello' }.body
|
49
|
+
assert_equal 'b', @conn.get('/yo').body
|
50
|
+
end
|
51
|
+
|
44
52
|
def test_middleware_allow_different_outcomes_for_the_same_request
|
45
53
|
@stubs.get('/hello') { [200, {'Content-Type' => 'text/html'}, 'hello'] }
|
46
54
|
@stubs.get('/hello') { [200, {'Content-Type' => 'text/html'}, 'world'] }
|
@@ -62,9 +70,16 @@ module Adapters
|
|
62
70
|
end
|
63
71
|
|
64
72
|
def test_raises_an_error_if_no_stub_is_found_for_request
|
65
|
-
|
73
|
+
assert_raises Stubs::NotFound do
|
66
74
|
@conn.get('/invalid'){ [200, {}, []] }
|
67
75
|
end
|
68
76
|
end
|
77
|
+
|
78
|
+
def test_raises_an_error_if_no_stub_is_found_for_request_without_this_header
|
79
|
+
@stubs.get('/yo', { 'X-HELLO' => 'hello' }) { [200, {}, 'a'] }
|
80
|
+
assert_raises Faraday::Adapter::Test::Stubs::NotFound do
|
81
|
+
@conn.get('/yo')
|
82
|
+
end
|
83
|
+
end
|
69
84
|
end
|
70
85
|
end
|
@@ -13,9 +13,26 @@ module Adapters
|
|
13
13
|
# which libcurl seems to generate for this particular request:
|
14
14
|
undef :test_POST_sends_files
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
def test_binds_local_socket
|
17
|
+
host = '1.2.3.4'
|
18
|
+
conn = create_connection :request => { :bind => { :host => host } }
|
19
|
+
assert_equal host, conn.options[:bind][:host]
|
20
|
+
end
|
19
21
|
|
22
|
+
def test_GET_ssl_rejects_bad_hosts
|
23
|
+
original_ssl_file = ENV['SSL_FILE']
|
24
|
+
begin
|
25
|
+
ENV['SSL_FILE'] = 'tmp/faraday-different-ca-cert.crt'
|
26
|
+
conn = create_connection
|
27
|
+
expected = ''
|
28
|
+
response = conn.get('/ssl')
|
29
|
+
assert_equal expected, response.body
|
30
|
+
ensure
|
31
|
+
ENV['SSL_FILE'] = original_ssl_file
|
32
|
+
end
|
33
|
+
end if ssl_mode?
|
34
|
+
|
35
|
+
end unless jruby?
|
20
36
|
end
|
21
37
|
end
|
38
|
+
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
2
|
|
3
3
|
class AuthenticationMiddlewareTest < Faraday::TestCase
|
4
4
|
def conn
|
@@ -37,9 +37,9 @@ class AuthenticationMiddlewareTest < Faraday::TestCase
|
|
37
37
|
response = conn { |b|
|
38
38
|
b.request :token_auth, 'baz', :foo => 42
|
39
39
|
}.get('/auth-echo')
|
40
|
-
assert_match
|
41
|
-
assert_match
|
42
|
-
assert_match
|
40
|
+
assert_match /^Token /, response.body
|
41
|
+
assert_match /token="baz"/, response.body
|
42
|
+
assert_match /foo="42"/, response.body
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_token_middleware_does_not_interfere_with_existing_authorization
|
@@ -52,14 +52,14 @@ class AuthenticationMiddlewareTest < Faraday::TestCase
|
|
52
52
|
response = conn { |b|
|
53
53
|
b.request :authorization, 'custom', 'abc def'
|
54
54
|
}.get('/auth-echo')
|
55
|
-
assert_match
|
55
|
+
assert_match /^custom abc def$/, response.body
|
56
56
|
end
|
57
57
|
|
58
58
|
def test_authorization_middleware_with_hash
|
59
59
|
response = conn { |b|
|
60
60
|
b.request :authorization, 'baz', :foo => 42
|
61
61
|
}.get('/auth-echo')
|
62
|
-
assert_match
|
63
|
-
assert_match
|
62
|
+
assert_match /^baz /, response.body
|
63
|
+
assert_match /foo="42"/, response.body
|
64
64
|
end
|
65
65
|
end
|
data/test/connection_test.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
2
|
require 'uri'
|
3
3
|
|
4
4
|
class TestConnection < Faraday::TestCase
|
5
5
|
|
6
|
+
def teardown
|
7
|
+
Faraday::Utils.default_params_encoder = nil
|
8
|
+
end
|
9
|
+
|
6
10
|
def with_env(key, proxy)
|
7
11
|
old_value = ENV.fetch(key, false)
|
8
12
|
ENV[key] = proxy
|
@@ -191,6 +195,19 @@ class TestConnection < Faraday::TestCase
|
|
191
195
|
assert_equal "a%5Bb%5D=c", uri.query
|
192
196
|
end
|
193
197
|
|
198
|
+
def test_build_url_bracketizes_repeated_params_in_query
|
199
|
+
conn = Faraday::Connection.new
|
200
|
+
uri = conn.build_url("http://sushi.com/sake.html", 'a' => [1, 2])
|
201
|
+
assert_equal "a%5B%5D=1&a%5B%5D=2", uri.query
|
202
|
+
end
|
203
|
+
|
204
|
+
def test_build_url_without_braketizing_repeated_params_in_query
|
205
|
+
conn = Faraday::Connection.new
|
206
|
+
conn.options.params_encoder = Faraday::FlatParamsEncoder
|
207
|
+
uri = conn.build_url("http://sushi.com/sake.html", 'a' => [1, 2])
|
208
|
+
assert_equal "a=1&a=2", uri.query
|
209
|
+
end
|
210
|
+
|
194
211
|
def test_build_url_parses_url
|
195
212
|
conn = Faraday::Connection.new
|
196
213
|
uri = conn.build_url("http://sushi.com/sake.html")
|
@@ -212,26 +229,11 @@ class TestConnection < Faraday::TestCase
|
|
212
229
|
assert_equal '/sake.html', uri.path
|
213
230
|
end
|
214
231
|
|
215
|
-
def test_request_header_change_does_not_modify_connection_header
|
216
|
-
connection = Faraday.new(:url => "https://asushi.com/sake.html")
|
217
|
-
connection.headers = { "Authorization"=>"token abc123" }
|
218
|
-
|
219
|
-
request = connection.build_request(:get)
|
220
|
-
request.headers.delete("Authorization")
|
221
|
-
|
222
|
-
assert_equal connection.headers.keys.sort, ["Authorization"]
|
223
|
-
assert connection.headers.include?("Authorization")
|
224
|
-
|
225
|
-
assert_equal request.headers.keys.sort, []
|
226
|
-
assert !request.headers.include?("Authorization")
|
227
|
-
end
|
228
|
-
|
229
232
|
def test_proxy_accepts_string
|
230
233
|
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
231
234
|
conn = Faraday::Connection.new
|
232
235
|
conn.proxy 'http://proxy.com'
|
233
|
-
assert_equal 'proxy.com', conn.proxy
|
234
|
-
assert_equal [:uri], conn.proxy.keys
|
236
|
+
assert_equal 'proxy.com', conn.proxy.host
|
235
237
|
end
|
236
238
|
end
|
237
239
|
|
@@ -239,8 +241,7 @@ class TestConnection < Faraday::TestCase
|
|
239
241
|
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
240
242
|
conn = Faraday::Connection.new
|
241
243
|
conn.proxy URI.parse('http://proxy.com')
|
242
|
-
assert_equal 'proxy.com', conn.proxy
|
243
|
-
assert_equal [:uri], conn.proxy.keys
|
244
|
+
assert_equal 'proxy.com', conn.proxy.host
|
244
245
|
end
|
245
246
|
end
|
246
247
|
|
@@ -248,8 +249,8 @@ class TestConnection < Faraday::TestCase
|
|
248
249
|
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
249
250
|
conn = Faraday::Connection.new
|
250
251
|
conn.proxy :uri => 'http://proxy.com', :user => 'rick'
|
251
|
-
assert_equal 'proxy.com', conn.proxy
|
252
|
-
assert_equal 'rick', conn.proxy
|
252
|
+
assert_equal 'proxy.com', conn.proxy.host
|
253
|
+
assert_equal 'rick', conn.proxy.user
|
253
254
|
end
|
254
255
|
end
|
255
256
|
|
@@ -257,59 +258,23 @@ class TestConnection < Faraday::TestCase
|
|
257
258
|
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
258
259
|
conn = Faraday::Connection.new
|
259
260
|
conn.proxy :uri => URI.parse('http://proxy.com'), :user => 'rick'
|
260
|
-
assert_equal 'proxy.com', conn.proxy
|
261
|
-
assert_equal 'rick', conn.proxy
|
261
|
+
assert_equal 'proxy.com', conn.proxy.host
|
262
|
+
assert_equal 'rick', conn.proxy.user
|
262
263
|
end
|
263
264
|
end
|
264
265
|
|
265
266
|
def test_proxy_accepts_http_env
|
266
267
|
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
267
268
|
conn = Faraday::Connection.new
|
268
|
-
assert_equal 'duncan.proxy.com', conn.proxy
|
269
|
+
assert_equal 'duncan.proxy.com', conn.proxy.host
|
269
270
|
end
|
270
271
|
end
|
271
272
|
|
272
273
|
def test_proxy_accepts_http_env_with_auth
|
273
274
|
with_env 'http_proxy', "http://a%40b:my%20pass@duncan.proxy.com:80" do
|
274
275
|
conn = Faraday::Connection.new
|
275
|
-
assert_equal 'a@b', conn.proxy
|
276
|
-
assert_equal 'my pass', conn.proxy
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_proxy_accepts_env_without_scheme
|
281
|
-
with_env 'http_proxy', "localhost:8888" do
|
282
|
-
uri = Faraday::Connection.new.proxy[:uri]
|
283
|
-
assert_equal 'localhost', uri.host
|
284
|
-
assert_equal 8888, uri.port
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
def test_no_proxy_from_env
|
289
|
-
with_env 'http_proxy', nil do
|
290
|
-
conn = Faraday::Connection.new
|
291
|
-
assert_equal nil, conn.proxy
|
292
|
-
end
|
293
|
-
end
|
294
|
-
|
295
|
-
def test_no_proxy_from_blank_env
|
296
|
-
with_env 'http_proxy', '' do
|
297
|
-
conn = Faraday::Connection.new
|
298
|
-
assert_equal nil, conn.proxy
|
299
|
-
end
|
300
|
-
end
|
301
|
-
|
302
|
-
def test_proxy_doesnt_accept_uppercase_env
|
303
|
-
with_env 'HTTP_PROXY', "http://localhost:8888/" do
|
304
|
-
conn = Faraday::Connection.new
|
305
|
-
assert_nil conn.proxy
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
def test_proxy_requires_uri
|
310
|
-
conn = Faraday::Connection.new
|
311
|
-
assert_raises ArgumentError do
|
312
|
-
conn.proxy :uri => :bad_uri, :user => 'rick'
|
276
|
+
assert_equal 'a@b', conn.proxy.user
|
277
|
+
assert_equal 'my pass', conn.proxy.password
|
313
278
|
end
|
314
279
|
end
|
315
280
|
|
@@ -317,8 +282,7 @@ class TestConnection < Faraday::TestCase
|
|
317
282
|
conn = Faraday::Connection.new 'http://sushi.com/foo',
|
318
283
|
:ssl => { :verify => :none },
|
319
284
|
:headers => {'content-type' => 'text/plain'},
|
320
|
-
:params => {'a'=>'1'}
|
321
|
-
:request => {:timeout => 5}
|
285
|
+
:params => {'a'=>'1'}
|
322
286
|
|
323
287
|
other = conn.dup
|
324
288
|
|
@@ -329,14 +293,11 @@ class TestConnection < Faraday::TestCase
|
|
329
293
|
other.basic_auth('', '')
|
330
294
|
other.headers['content-length'] = 12
|
331
295
|
other.params['b'] = '2'
|
332
|
-
other.options[:open_timeout] = 10
|
333
296
|
|
334
297
|
assert_equal 2, other.builder.handlers.size
|
335
298
|
assert_equal 2, conn.builder.handlers.size
|
336
299
|
assert !conn.headers.key?('content-length')
|
337
300
|
assert !conn.params.key?('b')
|
338
|
-
assert_equal 5, other.options[:timeout]
|
339
|
-
assert_nil conn.options[:open_timeout]
|
340
301
|
end
|
341
302
|
|
342
303
|
def test_init_with_block
|
@@ -359,20 +320,13 @@ class TestRequestParams < Faraday::TestCase
|
|
359
320
|
def create_connection(*args)
|
360
321
|
@conn = Faraday::Connection.new(*args) do |conn|
|
361
322
|
yield conn if block_given?
|
362
|
-
class << conn
|
323
|
+
class << conn.builder
|
363
324
|
undef app
|
364
325
|
def app() lambda { |env| env } end
|
365
326
|
end
|
366
327
|
end
|
367
328
|
end
|
368
329
|
|
369
|
-
def get(*args)
|
370
|
-
env = @conn.get(*args) do |req|
|
371
|
-
yield req if block_given?
|
372
|
-
end
|
373
|
-
env[:url].query
|
374
|
-
end
|
375
|
-
|
376
330
|
def assert_query_equal(expected, query)
|
377
331
|
assert_equal expected, query.split('&').sort
|
378
332
|
end
|
@@ -433,14 +387,37 @@ class TestRequestParams < Faraday::TestCase
|
|
433
387
|
end
|
434
388
|
|
435
389
|
def test_array_params_in_url
|
390
|
+
Faraday::Utils.default_params_encoder = nil
|
436
391
|
create_connection 'http://a.co/page1?color[]=red&color[]=blue'
|
437
392
|
query = get
|
438
393
|
assert_equal "color%5B%5D=red&color%5B%5D=blue", query
|
439
394
|
end
|
440
395
|
|
441
396
|
def test_array_params_in_params
|
397
|
+
Faraday::Utils.default_params_encoder = nil
|
442
398
|
create_connection 'http://a.co/page1', :params => {:color => ['red', 'blue']}
|
443
399
|
query = get
|
444
400
|
assert_equal "color%5B%5D=red&color%5B%5D=blue", query
|
445
401
|
end
|
402
|
+
|
403
|
+
def test_array_params_in_url_with_flat_params
|
404
|
+
Faraday::Utils.default_params_encoder = Faraday::FlatParamsEncoder
|
405
|
+
create_connection 'http://a.co/page1?color=red&color=blue'
|
406
|
+
query = get
|
407
|
+
assert_equal "color=red&color=blue", query
|
408
|
+
end
|
409
|
+
|
410
|
+
def test_array_params_in_params_with_flat_params
|
411
|
+
Faraday::Utils.default_params_encoder = Faraday::FlatParamsEncoder
|
412
|
+
create_connection 'http://a.co/page1', :params => {:color => ['red', 'blue']}
|
413
|
+
query = get
|
414
|
+
assert_equal "color=red&color=blue", query
|
415
|
+
end
|
416
|
+
|
417
|
+
def get(*args)
|
418
|
+
env = @conn.get(*args) do |req|
|
419
|
+
yield req if block_given?
|
420
|
+
end
|
421
|
+
env[:url].query
|
422
|
+
end
|
446
423
|
end
|