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.
@@ -0,0 +1,11 @@
1
+ require File.expand_path('../integration', __FILE__)
2
+
3
+ module Adapters
4
+ class NetHttpPersistentTest < Faraday::TestCase
5
+
6
+ def adapter() :net_http_persistent end
7
+
8
+ Integration.apply(self, :NonParallel)
9
+
10
+ end
11
+ end
@@ -1,33 +1,49 @@
1
- require File.expand_path(File.join(File.dirname(__FILE__), '..', 'helper'))
1
+ require File.expand_path('../integration', __FILE__)
2
2
 
3
3
  module Adapters
4
4
  class NetHttpTest < Faraday::TestCase
5
- def setup
6
- @connection = Faraday.new('http://disney.com') do |b|
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
- def test_handles_compression_transparently_on_get
12
- stub_request(:get, 'disney.com/hello').with { |request|
13
- accept_encoding = request.headers['Accept-Encoding']
14
- if RUBY_VERSION.index('1.8') == 0
15
- # ruby 1.8 doesn't do any gzip/deflate automatically
16
- accept_encoding == nil
17
- else
18
- # test for a value such as "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
19
- accept_encoding =~ /gzip;.+\bdeflate\b/
20
- end
21
- }
22
- @connection.get('/hello')
23
- end
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
- def test_connect_error_gets_wrapped
26
- stub_request(:get, 'disney.com/hello').to_raise(Errno::ECONNREFUSED)
32
+ exceptions.each do |exception_class|
33
+ stub_request(:get, 'disney.com/hello').to_raise(exception_class)
27
34
 
28
- assert_raise Faraday::Error::ConnectionFailed do
29
- @connection.get('/hello')
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(File.join(File.dirname(__FILE__), '..', 'helper'))
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 test_handles_user_agent
12
- # default typhoeus agent
13
- stub_request(:get, 'disney.com/world').with(:headers => {'User-Agent'=>'Faraday Agent'}){ |request|
14
- request.headers["User-Agent"] == 'Faraday Agent'
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 if defined? ::Typhoeus
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
- assert_equal "Token token=\"baz\",\n foo=\"42\"", response.body
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
@@ -68,24 +68,30 @@ class TestConnection < Faraday::TestCase
68
68
  assert_equal 'Faraday', conn.headers['User-agent']
69
69
  end
70
70
 
71
- def test_basic_auth_prepends_basic_auth_middleware
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
- assert_equal Faraday::Request::BasicAuthentication, conn.builder[0].klass
75
- assert_equal ['Aladdin', 'open sesame'], conn.builder[0].instance_eval { @args }
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
- assert_equal Faraday::Request::BasicAuthentication, conn.builder[0].klass
81
- assert_equal ['foo@bar.com', 'pass word'], conn.builder[0].instance_eval { @args }
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 test_token_auth_prepends_token_auth_middleware
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
- assert_equal Faraday::Request::TokenAuthentication, conn.builder[0].klass
88
- assert_equal ['abcdef', { :nonce => 'abc' }], conn.builder[0].instance_eval { @args }
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 3, other.builder.handlers.size
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')
@@ -1,3 +1,11 @@
1
+ unless ENV['CI']
2
+ begin
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+ rescue LoadError
6
+ end
7
+ end
8
+
1
9
  require 'test/unit'
2
10
  require 'stringio'
3
11
 
@@ -1,62 +1,50 @@
1
- require 'sinatra'
2
- set :logging, false
3
-
4
- [:get, :post, :put, :patch, :delete, :options].each do |method|
5
- send(method, '/echo') do
6
- kind = request.request_method.downcase
7
- out = kind.dup
8
- out << ' ?' << request.GET.inspect if request.GET.any?
9
- out << ' ' << request.POST.inspect if request.POST.any?
10
-
11
- content_type 'text/plain'
12
- return out
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 '/json' do
21
- content_type 'application/json'
22
- "[1,2,3]"
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
- [:get, :post].each do |method|
36
- send(method, '/hello') do
37
- "hello #{params[:name]}"
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
- %w[POST PUT PATCH].each do |http_method|
42
- settings.send(:route, http_method, '/echo_name') do
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
- delete '/delete_with_json' do
52
- %/{"deleted":true}/
53
- end
38
+ get '/slow' do
39
+ sleep 10
40
+ [200, {}, 'ok']
41
+ end
54
42
 
55
- get '/multi' do
56
- [200, { 'Set-Cookie' => 'one, two' }, '']
43
+ error do |e|
44
+ "#{e.class}\n#{e.to_s}\n#{e.backtrace.join("\n")}"
45
+ end
57
46
  end
58
47
 
59
- get '/slow' do
60
- sleep 10
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.rc2
5
- prerelease: 6
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-01-28 00:00:00.000000000 Z
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: &70137915346940 !ruby/object:Gem::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: *70137915346940
24
+ version_requirements: *70331771782880
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70137915345760 !ruby/object:Gem::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: *70137915345760
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: &70137915343760 !ruby/object:Gem::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: *70137915343760
57
+ version_requirements: *70331771778040
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: webmock
49
- requirement: &70137915292660 !ruby/object:Gem::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: *70137915292660
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/live_test.rb
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.1
147
+ version: 1.3.5
128
148
  requirements: []
129
149
  rubyforge_project:
130
- rubygems_version: 1.8.12
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/live_test.rb
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