faraday 0.8.0.rc2 → 0.8.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.
- data/Gemfile +4 -2
- data/README.md +44 -19
- data/Rakefile +1 -1
- data/faraday.gemspec +13 -3
- data/lib/faraday.rb +11 -2
- data/lib/faraday/adapter.rb +18 -16
- data/lib/faraday/adapter/net_http.rb +76 -47
- data/lib/faraday/adapter/net_http_persistent.rb +37 -0
- data/lib/faraday/adapter/patron.rb +23 -1
- data/lib/faraday/adapter/rack.rb +59 -0
- data/lib/faraday/adapter/typhoeus.rb +5 -4
- data/lib/faraday/connection.rb +23 -12
- data/lib/faraday/request.rb +9 -7
- data/lib/faraday/request/authorization.rb +40 -0
- data/lib/faraday/request/basic_authentication.rb +7 -11
- data/lib/faraday/request/token_authentication.rb +9 -15
- data/test/adapters/default_test.rb +14 -0
- data/test/adapters/em_http_test.rb +14 -0
- data/test/adapters/em_synchrony_test.rb +14 -0
- data/test/adapters/excon_test.rb +23 -0
- data/test/adapters/integration.rb +190 -0
- data/test/adapters/net_http_persistent_test.rb +11 -0
- data/test/adapters/net_http_test.rb +37 -21
- data/test/adapters/patron_test.rb +17 -0
- data/test/adapters/rack_test.rb +26 -0
- data/test/adapters/typhoeus_test.rb +7 -13
- data/test/authentication_middleware_test.rb +18 -1
- data/test/connection_test.rb +15 -9
- data/test/helper.rb +8 -0
- data/test/live_server.rb +38 -50
- metadata +44 -17
- data/lib/faraday/adapter/action_dispatch.rb +0 -29
- data/test/adapters/live_test.rb +0 -232
@@ -1,33 +1,49 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../integration', __FILE__)
|
2
2
|
|
3
3
|
module Adapters
|
4
4
|
class NetHttpTest < Faraday::TestCase
|
5
|
-
|
6
|
-
|
5
|
+
|
6
|
+
def adapter() :net_http end
|
7
|
+
|
8
|
+
behaviors = [:NonParallel]
|
9
|
+
behaviors << :Compression if RUBY_VERSION >= '1.9'
|
10
|
+
|
11
|
+
Integration.apply(self, *behaviors)
|
12
|
+
|
13
|
+
def test_connection_errors_get_wrapped
|
14
|
+
connection = Faraday.new('http://disney.com') do |b|
|
7
15
|
b.adapter :net_http
|
8
16
|
end
|
9
|
-
end
|
10
17
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
exceptions = [
|
19
|
+
EOFError,
|
20
|
+
Errno::ECONNABORTED,
|
21
|
+
Errno::ECONNREFUSED,
|
22
|
+
Errno::ECONNRESET,
|
23
|
+
Errno::EINVAL,
|
24
|
+
Net::HTTPBadResponse,
|
25
|
+
Net::HTTPHeaderSyntaxError,
|
26
|
+
Net::ProtocolError,
|
27
|
+
SocketError
|
28
|
+
]
|
29
|
+
|
30
|
+
exceptions << OpenSSL::SSL::SSLError if defined?(OpenSSL)
|
24
31
|
|
25
|
-
|
26
|
-
|
32
|
+
exceptions.each do |exception_class|
|
33
|
+
stub_request(:get, 'disney.com/hello').to_raise(exception_class)
|
27
34
|
|
28
|
-
|
29
|
-
|
35
|
+
assert_raise(Faraday::Error::ConnectionFailed,
|
36
|
+
"Failed to wrap #{exception_class} exceptions") do
|
37
|
+
connection.get('/hello')
|
38
|
+
end
|
30
39
|
end
|
31
40
|
end
|
41
|
+
|
42
|
+
def test_configure_ssl
|
43
|
+
http = Net::HTTP.new 'disney.com', 443
|
44
|
+
# this should not raise an error
|
45
|
+
Faraday::Adapter::NetHttp.new.configure_ssl(http, :ssl => {:verify => true})
|
46
|
+
end
|
47
|
+
|
32
48
|
end
|
33
49
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require File.expand_path('../integration', __FILE__)
|
2
|
+
|
3
|
+
module Adapters
|
4
|
+
class Patron < Faraday::TestCase
|
5
|
+
|
6
|
+
def adapter() :patron end
|
7
|
+
|
8
|
+
Integration.apply(self, :NonParallel) do
|
9
|
+
# https://github.com/toland/patron/issues/34
|
10
|
+
undef :test_PATCH_send_url_encoded_params
|
11
|
+
|
12
|
+
# https://github.com/toland/patron/issues/52
|
13
|
+
undef :test_GET_with_body
|
14
|
+
end
|
15
|
+
|
16
|
+
end unless defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
|
17
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require File.expand_path("../integration", __FILE__)
|
2
|
+
require File.expand_path('../../live_server', __FILE__)
|
3
|
+
|
4
|
+
module Adapters
|
5
|
+
class RackTest < Faraday::TestCase
|
6
|
+
|
7
|
+
def adapter() :rack end
|
8
|
+
|
9
|
+
def adapter_options
|
10
|
+
[FaradayTestServer]
|
11
|
+
end
|
12
|
+
|
13
|
+
# no Integration.apply because this doesn't require a server as a separate process
|
14
|
+
include Integration::Common
|
15
|
+
include Integration::NonParallel
|
16
|
+
|
17
|
+
# not using shared test because error is swallowed by Sinatra
|
18
|
+
def test_timeout
|
19
|
+
conn = create_connection(:request => {:timeout => 1, :open_timeout => 1})
|
20
|
+
begin
|
21
|
+
conn.get '/slow'
|
22
|
+
rescue Faraday::Error::ClientError
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,20 +1,14 @@
|
|
1
|
-
require File.expand_path(
|
1
|
+
require File.expand_path('../integration', __FILE__)
|
2
2
|
|
3
3
|
module Adapters
|
4
4
|
class TyphoeusTest < Faraday::TestCase
|
5
|
-
def setup
|
6
|
-
@connection = Faraday.new('http://disney.com') do |b|
|
7
|
-
b.adapter :typhoeus
|
8
|
-
end
|
9
|
-
end
|
10
5
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
@connection.get('/world', nil, :user_agent => 'Faraday Agent')
|
6
|
+
def adapter() :typhoeus end
|
7
|
+
|
8
|
+
Integration.apply(self, :Parallel) do
|
9
|
+
# https://github.com/dbalatero/typhoeus/issues/75
|
10
|
+
undef :test_GET_with_body
|
17
11
|
end
|
18
12
|
|
19
|
-
end
|
13
|
+
end unless defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
|
20
14
|
end
|
@@ -37,7 +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
|
-
|
40
|
+
assert_match /^Token /, response.body
|
41
|
+
assert_match /token="baz"/, response.body
|
42
|
+
assert_match /foo="42"/, response.body
|
41
43
|
end
|
42
44
|
|
43
45
|
def test_token_middleware_does_not_interfere_with_existing_authorization
|
@@ -45,4 +47,19 @@ class AuthenticationMiddlewareTest < Faraday::TestCase
|
|
45
47
|
get('/auth-echo', nil, :authorization => 'Token token="bar"')
|
46
48
|
assert_equal 'Token token="bar"', response.body
|
47
49
|
end
|
50
|
+
|
51
|
+
def test_authorization_middleware_with_string
|
52
|
+
response = conn { |b|
|
53
|
+
b.request :authorization, 'custom', 'abc def'
|
54
|
+
}.get('/auth-echo')
|
55
|
+
assert_match /^custom abc def$/, response.body
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_authorization_middleware_with_hash
|
59
|
+
response = conn { |b|
|
60
|
+
b.request :authorization, 'baz', :foo => 42
|
61
|
+
}.get('/auth-echo')
|
62
|
+
assert_match /^baz /, response.body
|
63
|
+
assert_match /foo="42"/, response.body
|
64
|
+
end
|
48
65
|
end
|
data/test/connection_test.rb
CHANGED
@@ -68,24 +68,30 @@ class TestConnection < Faraday::TestCase
|
|
68
68
|
assert_equal 'Faraday', conn.headers['User-agent']
|
69
69
|
end
|
70
70
|
|
71
|
-
def
|
71
|
+
def test_basic_auth_sets_header
|
72
72
|
conn = Faraday::Connection.new
|
73
|
+
assert_nil conn.headers['Authorization']
|
74
|
+
|
73
75
|
conn.basic_auth 'Aladdin', 'open sesame'
|
74
|
-
|
75
|
-
assert_equal
|
76
|
+
assert auth = conn.headers['Authorization']
|
77
|
+
assert_equal 'Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==', auth
|
76
78
|
end
|
77
79
|
|
78
80
|
def test_auto_parses_basic_auth_from_url_and_unescapes
|
79
81
|
conn = Faraday::Connection.new :url => "http://foo%40bar.com:pass%20word@sushi.com/fish"
|
80
|
-
|
81
|
-
assert_equal
|
82
|
+
assert auth = conn.headers['Authorization']
|
83
|
+
assert_equal Faraday::Request::BasicAuthentication.header("foo@bar.com", "pass word"), auth
|
82
84
|
end
|
83
85
|
|
84
|
-
def
|
86
|
+
def test_token_auth_sets_header
|
85
87
|
conn = Faraday::Connection.new
|
88
|
+
assert_nil conn.headers['Authorization']
|
89
|
+
|
86
90
|
conn.token_auth 'abcdef', :nonce => 'abc'
|
87
|
-
|
88
|
-
|
91
|
+
assert auth = conn.headers['Authorization']
|
92
|
+
assert_match /^Token /, auth
|
93
|
+
assert_match /token="abcdef"/, auth
|
94
|
+
assert_match /nonce="abc"/, auth
|
89
95
|
end
|
90
96
|
|
91
97
|
def test_build_url_uses_connection_host_as_default_uri_host
|
@@ -268,7 +274,7 @@ class TestConnection < Faraday::TestCase
|
|
268
274
|
other.headers['content-length'] = 12
|
269
275
|
other.params['b'] = '2'
|
270
276
|
|
271
|
-
assert_equal
|
277
|
+
assert_equal 2, other.builder.handlers.size
|
272
278
|
assert_equal 2, conn.builder.handlers.size
|
273
279
|
assert !conn.headers.key?('content-length')
|
274
280
|
assert !conn.params.key?('b')
|
data/test/helper.rb
CHANGED
data/test/live_server.rb
CHANGED
@@ -1,62 +1,50 @@
|
|
1
|
-
require 'sinatra'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
require 'sinatra/base'
|
2
|
+
|
3
|
+
class FaradayTestServer < Sinatra::Base
|
4
|
+
set :logging => false,
|
5
|
+
:show_exceptions => false
|
6
|
+
|
7
|
+
[:get, :post, :put, :patch, :delete, :options].each do |method|
|
8
|
+
send(method, '/echo') do
|
9
|
+
kind = request.request_method.downcase
|
10
|
+
out = kind.dup
|
11
|
+
out << ' ?' << request.GET.inspect if request.GET.any?
|
12
|
+
out << ' ' << request.POST.inspect if request.POST.any?
|
13
|
+
|
14
|
+
content_type 'text/plain'
|
15
|
+
return out
|
16
|
+
end
|
13
17
|
end
|
14
|
-
end
|
15
|
-
|
16
|
-
get '/hello_world' do
|
17
|
-
'hello world'
|
18
|
-
end
|
19
18
|
|
20
|
-
get '/
|
21
|
-
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
post '/file' do
|
26
|
-
if params[:uploaded_file].respond_to? :each_key
|
27
|
-
"file %s %s" % [
|
28
|
-
params[:uploaded_file][:filename],
|
29
|
-
params[:uploaded_file][:type]]
|
30
|
-
else
|
31
|
-
status 400
|
19
|
+
get '/echo_header' do
|
20
|
+
header = "HTTP_#{params[:name].tr('-', '_').upcase}"
|
21
|
+
request.env.fetch(header) { 'NONE' }
|
32
22
|
end
|
33
|
-
end
|
34
23
|
|
35
|
-
|
36
|
-
|
37
|
-
|
24
|
+
post '/file' do
|
25
|
+
if params[:uploaded_file].respond_to? :each_key
|
26
|
+
"file %s %s" % [
|
27
|
+
params[:uploaded_file][:filename],
|
28
|
+
params[:uploaded_file][:type]]
|
29
|
+
else
|
30
|
+
status 400
|
31
|
+
end
|
38
32
|
end
|
39
|
-
end
|
40
33
|
|
41
|
-
|
42
|
-
|
43
|
-
params[:name].inspect
|
34
|
+
get '/multi' do
|
35
|
+
[200, { 'Set-Cookie' => 'one, two' }, '']
|
44
36
|
end
|
45
|
-
end
|
46
|
-
|
47
|
-
options '/options' do
|
48
|
-
'hi'
|
49
|
-
end
|
50
37
|
|
51
|
-
|
52
|
-
|
53
|
-
|
38
|
+
get '/slow' do
|
39
|
+
sleep 10
|
40
|
+
[200, {}, 'ok']
|
41
|
+
end
|
54
42
|
|
55
|
-
|
56
|
-
|
43
|
+
error do |e|
|
44
|
+
"#{e.class}\n#{e.to_s}\n#{e.backtrace.join("\n")}"
|
45
|
+
end
|
57
46
|
end
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
[200, {}, 'ok']
|
48
|
+
if $0 == __FILE__
|
49
|
+
FaradayTestServer.run!
|
62
50
|
end
|
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.8.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rick Olson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-04-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multipart-post
|
16
|
-
requirement: &
|
16
|
+
requirement: &70331771782880 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '1.1'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70331771782880
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &70331771781000 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,21 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70331771781000
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: simplecov
|
38
|
+
requirement: &70331771779420 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70331771779420
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: test-unit
|
38
|
-
requirement: &
|
49
|
+
requirement: &70331771778040 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *70331771778040
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: webmock
|
49
|
-
requirement: &
|
60
|
+
requirement: &70331771775860 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *70331771775860
|
58
69
|
description:
|
59
70
|
email: technoweenie@gmail.com
|
60
71
|
executables: []
|
@@ -69,13 +80,14 @@ files:
|
|
69
80
|
- faraday.gemspec
|
70
81
|
- lib/faraday.rb
|
71
82
|
- lib/faraday/adapter.rb
|
72
|
-
- lib/faraday/adapter/action_dispatch.rb
|
73
83
|
- lib/faraday/adapter/em_http.rb
|
74
84
|
- lib/faraday/adapter/em_synchrony.rb
|
75
85
|
- lib/faraday/adapter/em_synchrony/parallel_manager.rb
|
76
86
|
- lib/faraday/adapter/excon.rb
|
77
87
|
- lib/faraday/adapter/net_http.rb
|
88
|
+
- lib/faraday/adapter/net_http_persistent.rb
|
78
89
|
- lib/faraday/adapter/patron.rb
|
90
|
+
- lib/faraday/adapter/rack.rb
|
79
91
|
- lib/faraday/adapter/test.rb
|
80
92
|
- lib/faraday/adapter/typhoeus.rb
|
81
93
|
- lib/faraday/builder.rb
|
@@ -83,6 +95,7 @@ files:
|
|
83
95
|
- lib/faraday/error.rb
|
84
96
|
- lib/faraday/middleware.rb
|
85
97
|
- lib/faraday/request.rb
|
98
|
+
- lib/faraday/request/authorization.rb
|
86
99
|
- lib/faraday/request/basic_authentication.rb
|
87
100
|
- lib/faraday/request/multipart.rb
|
88
101
|
- lib/faraday/request/retry.rb
|
@@ -93,9 +106,16 @@ files:
|
|
93
106
|
- lib/faraday/response/raise_error.rb
|
94
107
|
- lib/faraday/upload_io.rb
|
95
108
|
- lib/faraday/utils.rb
|
96
|
-
- test/adapters/
|
109
|
+
- test/adapters/default_test.rb
|
110
|
+
- test/adapters/em_http_test.rb
|
111
|
+
- test/adapters/em_synchrony_test.rb
|
112
|
+
- test/adapters/excon_test.rb
|
113
|
+
- test/adapters/integration.rb
|
97
114
|
- test/adapters/logger_test.rb
|
115
|
+
- test/adapters/net_http_persistent_test.rb
|
98
116
|
- test/adapters/net_http_test.rb
|
117
|
+
- test/adapters/patron_test.rb
|
118
|
+
- test/adapters/rack_test.rb
|
99
119
|
- test/adapters/test_middleware_test.rb
|
100
120
|
- test/adapters/typhoeus_test.rb
|
101
121
|
- test/authentication_middleware_test.rb
|
@@ -122,19 +142,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
143
|
none: false
|
124
144
|
requirements:
|
125
|
-
- - ! '
|
145
|
+
- - ! '>='
|
126
146
|
- !ruby/object:Gem::Version
|
127
|
-
version: 1.3.
|
147
|
+
version: 1.3.5
|
128
148
|
requirements: []
|
129
149
|
rubyforge_project:
|
130
|
-
rubygems_version: 1.8.
|
150
|
+
rubygems_version: 1.8.10
|
131
151
|
signing_key:
|
132
152
|
specification_version: 2
|
133
153
|
summary: HTTP/REST API client library.
|
134
154
|
test_files:
|
135
|
-
- test/adapters/
|
155
|
+
- test/adapters/default_test.rb
|
156
|
+
- test/adapters/em_http_test.rb
|
157
|
+
- test/adapters/em_synchrony_test.rb
|
158
|
+
- test/adapters/excon_test.rb
|
159
|
+
- test/adapters/integration.rb
|
136
160
|
- test/adapters/logger_test.rb
|
161
|
+
- test/adapters/net_http_persistent_test.rb
|
137
162
|
- test/adapters/net_http_test.rb
|
163
|
+
- test/adapters/patron_test.rb
|
164
|
+
- test/adapters/rack_test.rb
|
138
165
|
- test/adapters/test_middleware_test.rb
|
139
166
|
- test/adapters/typhoeus_test.rb
|
140
167
|
- test/authentication_middleware_test.rb
|