faraday 0.9.1 → 0.9.2

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 (62) hide show
  1. data/LICENSE.md +1 -1
  2. data/README.md +41 -16
  3. data/lib/faraday.rb +1 -1
  4. data/lib/faraday/adapter/em_synchrony.rb +8 -0
  5. data/lib/faraday/adapter/excon.rb +1 -0
  6. data/lib/faraday/adapter/httpclient.rb +14 -3
  7. data/lib/faraday/adapter/net_http.rb +2 -2
  8. data/lib/faraday/adapter/net_http_persistent.rb +2 -1
  9. data/lib/faraday/adapter/patron.rb +8 -2
  10. data/lib/faraday/connection.rb +8 -3
  11. data/lib/faraday/options.rb +9 -0
  12. data/lib/faraday/parameters.rb +54 -38
  13. data/lib/faraday/rack_builder.rb +3 -2
  14. data/lib/faraday/request/retry.rb +9 -3
  15. data/lib/faraday/response.rb +2 -2
  16. data/lib/faraday/utils.rb +13 -1
  17. metadata +61 -124
  18. checksums.yaml +0 -7
  19. data/.document +0 -6
  20. data/CHANGELOG.md +0 -20
  21. data/CONTRIBUTING.md +0 -36
  22. data/Gemfile +0 -25
  23. data/Rakefile +0 -71
  24. data/faraday.gemspec +0 -34
  25. data/script/cached-bundle +0 -46
  26. data/script/console +0 -7
  27. data/script/generate_certs +0 -42
  28. data/script/package +0 -7
  29. data/script/proxy-server +0 -42
  30. data/script/release +0 -17
  31. data/script/s3-put +0 -71
  32. data/script/server +0 -36
  33. data/script/test +0 -172
  34. data/test/adapters/default_test.rb +0 -14
  35. data/test/adapters/em_http_test.rb +0 -20
  36. data/test/adapters/em_synchrony_test.rb +0 -20
  37. data/test/adapters/excon_test.rb +0 -20
  38. data/test/adapters/httpclient_test.rb +0 -21
  39. data/test/adapters/integration.rb +0 -254
  40. data/test/adapters/logger_test.rb +0 -82
  41. data/test/adapters/net_http_persistent_test.rb +0 -20
  42. data/test/adapters/net_http_test.rb +0 -14
  43. data/test/adapters/patron_test.rb +0 -20
  44. data/test/adapters/rack_test.rb +0 -31
  45. data/test/adapters/test_middleware_test.rb +0 -114
  46. data/test/adapters/typhoeus_test.rb +0 -28
  47. data/test/authentication_middleware_test.rb +0 -65
  48. data/test/composite_read_io_test.rb +0 -111
  49. data/test/connection_test.rb +0 -522
  50. data/test/env_test.rb +0 -218
  51. data/test/helper.rb +0 -81
  52. data/test/live_server.rb +0 -67
  53. data/test/middleware/instrumentation_test.rb +0 -88
  54. data/test/middleware/retry_test.rb +0 -177
  55. data/test/middleware_stack_test.rb +0 -173
  56. data/test/multibyte.txt +0 -1
  57. data/test/options_test.rb +0 -252
  58. data/test/parameters_test.rb +0 -64
  59. data/test/request_middleware_test.rb +0 -142
  60. data/test/response_middleware_test.rb +0 -72
  61. data/test/strawberry.rb +0 -2
  62. data/test/utils_test.rb +0 -58
@@ -1,218 +0,0 @@
1
- require File.expand_path('../helper', __FILE__)
2
-
3
- class EnvTest < Faraday::TestCase
4
- def setup
5
- @conn = Faraday.new :url => 'http://sushi.com/api',
6
- :headers => {'Mime-Version' => '1.0'},
7
- :request => {:oauth => {:consumer_key => 'anonymous'}}
8
-
9
- @conn.options.timeout = 3
10
- @conn.options.open_timeout = 5
11
- @conn.ssl.verify = false
12
- @conn.proxy 'http://proxy.com'
13
- end
14
-
15
- def test_request_create_stores_method
16
- env = make_env(:get)
17
- assert_equal :get, env.method
18
- end
19
-
20
- def test_request_create_stores_uri
21
- env = make_env do |req|
22
- req.url 'foo.json', 'a' => 1
23
- end
24
- assert_equal 'http://sushi.com/api/foo.json?a=1', env.url.to_s
25
- end
26
-
27
- def test_request_create_stores_headers
28
- env = make_env do |req|
29
- req['Server'] = 'Faraday'
30
- end
31
- headers = env.request_headers
32
- assert_equal '1.0', headers['mime-version']
33
- assert_equal 'Faraday', headers['server']
34
- end
35
-
36
- def test_request_create_stores_body
37
- env = make_env do |req|
38
- req.body = 'hi'
39
- end
40
- assert_equal 'hi', env.body
41
- end
42
-
43
- def test_global_request_options
44
- env = make_env
45
- assert_equal 3, env.request.timeout
46
- assert_equal 5, env.request.open_timeout
47
- end
48
-
49
- def test_per_request_options
50
- env = make_env do |req|
51
- req.options.timeout = 10
52
- req.options.boundary = 'boo'
53
- req.options.oauth[:consumer_secret] = 'xyz'
54
- end
55
- assert_equal 10, env.request.timeout
56
- assert_equal 5, env.request.open_timeout
57
- assert_equal 'boo', env.request.boundary
58
-
59
- oauth_expected = {:consumer_secret => 'xyz', :consumer_key => 'anonymous'}
60
- assert_equal oauth_expected, env.request.oauth
61
- end
62
-
63
- def test_request_create_stores_ssl_options
64
- env = make_env
65
- assert_equal false, env.ssl.verify
66
- end
67
-
68
- def test_request_create_stores_proxy_options
69
- env = make_env
70
- assert_equal 'proxy.com', env.request.proxy.host
71
- end
72
-
73
- private
74
-
75
- def make_env(method = :get, connection = @conn, &block)
76
- request = connection.build_request(method, &block)
77
- request.to_env(connection)
78
- end
79
- end
80
-
81
- class HeadersTest < Faraday::TestCase
82
- def setup
83
- @headers = Faraday::Utils::Headers.new
84
- end
85
-
86
- def test_normalizes_different_capitalizations
87
- @headers['Content-Type'] = 'application/json'
88
- assert_equal ['Content-Type'], @headers.keys
89
- assert_equal 'application/json', @headers['Content-Type']
90
- assert_equal 'application/json', @headers['CONTENT-TYPE']
91
- assert_equal 'application/json', @headers['content-type']
92
- assert @headers.include?('content-type')
93
-
94
- @headers['content-type'] = 'application/xml'
95
- assert_equal ['Content-Type'], @headers.keys
96
- assert_equal 'application/xml', @headers['Content-Type']
97
- assert_equal 'application/xml', @headers['CONTENT-TYPE']
98
- assert_equal 'application/xml', @headers['content-type']
99
- end
100
-
101
- def test_fetch_key
102
- @headers['Content-Type'] = 'application/json'
103
- block_called = false
104
- assert_equal 'application/json', @headers.fetch('content-type') { block_called = true }
105
- assert_equal 'application/json', @headers.fetch('Content-Type')
106
- assert_equal 'application/json', @headers.fetch('CONTENT-TYPE')
107
- assert_equal 'application/json', @headers.fetch(:content_type)
108
- assert_equal false, block_called
109
-
110
- assert_equal 'default', @headers.fetch('invalid', 'default')
111
- assert_equal false, @headers.fetch('invalid', false)
112
- assert_nil @headers.fetch('invalid', nil)
113
-
114
- assert_equal 'Invalid key', @headers.fetch('Invalid') { |key| "#{key} key" }
115
-
116
- expected_error = defined?(KeyError) ? KeyError : IndexError
117
- assert_raises(expected_error) { @headers.fetch('invalid') }
118
- end
119
-
120
- def test_delete_key
121
- @headers['Content-Type'] = 'application/json'
122
- assert_equal 1, @headers.size
123
- assert @headers.include?('content-type')
124
- assert_equal 'application/json', @headers.delete('content-type')
125
- assert_equal 0, @headers.size
126
- assert !@headers.include?('content-type')
127
- assert_equal nil, @headers.delete('content-type')
128
- end
129
-
130
- def test_parse_response_headers_leaves_http_status_line_out
131
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
132
- assert_equal %w(Content-Type), @headers.keys
133
- end
134
-
135
- def test_parse_response_headers_parses_lower_cased_header_name_and_value
136
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n")
137
- assert_equal 'text/html', @headers['content-type']
138
- end
139
-
140
- def test_parse_response_headers_parses_lower_cased_header_name_and_value_with_colon
141
- @headers.parse("HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nLocation: http://sushi.com/\r\n\r\n")
142
- assert_equal 'http://sushi.com/', @headers['location']
143
- end
144
-
145
- def test_parse_response_headers_parses_blank_lines
146
- @headers.parse("HTTP/1.1 200 OK\r\n\r\nContent-Type: text/html\r\n\r\n")
147
- assert_equal 'text/html', @headers['content-type']
148
- end
149
- end
150
-
151
- class ResponseTest < Faraday::TestCase
152
- def setup
153
- @env = Faraday::Env.from \
154
- :status => 404, :body => 'yikes',
155
- :response_headers => {'Content-Type' => 'text/plain'}
156
- @response = Faraday::Response.new @env
157
- end
158
-
159
- def test_finished
160
- assert @response.finished?
161
- end
162
-
163
- def test_error_on_finish
164
- assert_raises RuntimeError do
165
- @response.finish({})
166
- end
167
- end
168
-
169
- def test_body_is_parsed_on_finish
170
- response = Faraday::Response.new
171
- response.on_complete { |env| env[:body] = env[:body].upcase }
172
- response.finish(@env)
173
-
174
- assert_equal "YIKES", response.body
175
- end
176
-
177
- def test_not_success
178
- assert !@response.success?
179
- end
180
-
181
- def test_status
182
- assert_equal 404, @response.status
183
- end
184
-
185
- def test_body
186
- assert_equal 'yikes', @response.body
187
- end
188
-
189
- def test_headers
190
- assert_equal 'text/plain', @response.headers['Content-Type']
191
- assert_equal 'text/plain', @response['content-type']
192
- end
193
-
194
- def test_apply_request
195
- @response.apply_request :body => 'a=b', :method => :post
196
- assert_equal 'yikes', @response.body
197
- assert_equal :post, @response.env[:method]
198
- end
199
-
200
- def test_marshal
201
- @response = Faraday::Response.new
202
- @response.on_complete { }
203
- @response.finish @env.merge(:params => 'moo')
204
-
205
- loaded = Marshal.load Marshal.dump(@response)
206
- assert_nil loaded.env[:params]
207
- assert_equal %w[body response_headers status], loaded.env.keys.map { |k| k.to_s }.sort
208
- end
209
-
210
- def test_hash
211
- hash = @response.to_hash
212
- assert_kind_of Hash, hash
213
- assert_equal @env.to_hash, hash
214
- assert_equal hash[:status], @response.status
215
- assert_equal hash[:response_headers], @response.headers
216
- assert_equal hash[:body], @response.body
217
- end
218
- end
@@ -1,81 +0,0 @@
1
- if RUBY_VERSION >= '1.9'
2
- require 'simplecov'
3
- require 'coveralls'
4
-
5
- SimpleCov.formatters = [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
6
-
7
- SimpleCov.start do
8
- add_filter '/bundle/'
9
- add_filter '/test/'
10
- minimum_coverage(87.27)
11
- end
12
- end
13
-
14
- gem 'minitest' if defined? Bundler
15
- require 'minitest/autorun'
16
-
17
- if ENV['LEFTRIGHT']
18
- begin
19
- require 'leftright'
20
- rescue LoadError
21
- puts "Run `gem install leftright` to install leftright."
22
- end
23
- end
24
-
25
- require File.expand_path('../../lib/faraday', __FILE__)
26
-
27
- require 'stringio'
28
- require 'uri'
29
-
30
- module Faraday
31
- module LiveServerConfig
32
- def live_server=(value)
33
- @@live_server = case value
34
- when /^http/
35
- URI(value)
36
- when /./
37
- URI('http://127.0.0.1:4567')
38
- end
39
- end
40
-
41
- def live_server?
42
- defined? @@live_server
43
- end
44
-
45
- # Returns an object that responds to `host` and `port`.
46
- def live_server
47
- live_server? and @@live_server
48
- end
49
- end
50
-
51
- class TestCase < MiniTest::Test
52
- extend LiveServerConfig
53
- self.live_server = ENV['LIVE']
54
-
55
- def test_default
56
- assert true
57
- end unless defined? ::MiniTest
58
-
59
- def capture_warnings
60
- old, $stderr = $stderr, StringIO.new
61
- begin
62
- yield
63
- $stderr.string
64
- ensure
65
- $stderr = old
66
- end
67
- end
68
-
69
- def self.jruby?
70
- defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
71
- end
72
-
73
- def self.rbx?
74
- defined? RUBY_ENGINE and 'rbx' == RUBY_ENGINE
75
- end
76
-
77
- def self.ssl_mode?
78
- ENV['SSL'] == 'yes'
79
- end
80
- end
81
- end
@@ -1,67 +0,0 @@
1
- require 'sinatra/base'
2
-
3
- module Faraday
4
- class LiveServer < Sinatra::Base
5
- set :environment, :test
6
- disable :logging
7
- disable :protection
8
-
9
- [:get, :post, :put, :patch, :delete, :options].each do |method|
10
- send(method, '/echo') do
11
- kind = request.request_method.downcase
12
- out = kind.dup
13
- out << ' ?' << request.GET.inspect if request.GET.any?
14
- out << ' ' << request.POST.inspect if request.POST.any?
15
-
16
- content_type 'text/plain'
17
- return out
18
- end
19
- end
20
-
21
- get '/echo_header' do
22
- header = "HTTP_#{params[:name].tr('-', '_').upcase}"
23
- request.env.fetch(header) { 'NONE' }
24
- end
25
-
26
- post '/file' do
27
- if params[:uploaded_file].respond_to? :each_key
28
- "file %s %s %d" % [
29
- params[:uploaded_file][:filename],
30
- params[:uploaded_file][:type],
31
- params[:uploaded_file][:tempfile].size
32
- ]
33
- else
34
- status 400
35
- end
36
- end
37
-
38
- get '/multi' do
39
- [200, { 'Set-Cookie' => 'one, two' }, '']
40
- end
41
-
42
- get '/who-am-i' do
43
- request.env['REMOTE_ADDR']
44
- end
45
-
46
- get '/slow' do
47
- sleep 10
48
- [200, {}, 'ok']
49
- end
50
-
51
- get '/204' do
52
- status 204 # no content
53
- end
54
-
55
- get '/ssl' do
56
- request.secure?.to_s
57
- end
58
-
59
- error do |e|
60
- "#{e.class}\n#{e.to_s}\n#{e.backtrace.join("\n")}"
61
- end
62
- end
63
- end
64
-
65
- if $0 == __FILE__
66
- Faraday::LiveServer.run!
67
- end
@@ -1,88 +0,0 @@
1
- require File.expand_path("../../helper", __FILE__)
2
-
3
- module Middleware
4
- class InstrumentationTest < Faraday::TestCase
5
- def setup
6
- @instrumenter = FakeInstrumenter.new
7
- end
8
-
9
- def test_default_name
10
- assert_equal 'request.faraday', options.name
11
- end
12
-
13
- def test_default_instrumenter
14
- begin
15
- instrumenter = options.instrumenter
16
- rescue NameError => err
17
- assert_match 'ActiveSupport', err.to_s
18
- else
19
- assert_equal ActiveSupport::Notifications, instrumenter
20
- end
21
- end
22
-
23
- def test_name
24
- assert_equal 'booya', options(:name => 'booya').name
25
- end
26
-
27
- def test_instrumenter
28
- assert_equal :boom, options(:instrumenter => :boom).instrumenter
29
- end
30
-
31
- def test_instrumentation_with_default_name
32
- assert_equal 0, @instrumenter.instrumentations.size
33
-
34
- faraday = conn
35
- res = faraday.get '/'
36
- assert_equal 'ok', res.body
37
-
38
- assert_equal 1, @instrumenter.instrumentations.size
39
- name, env = @instrumenter.instrumentations.first
40
- assert_equal 'request.faraday', name
41
- assert_equal '/', env[:url].path
42
- end
43
-
44
- def test_instrumentation
45
- assert_equal 0, @instrumenter.instrumentations.size
46
-
47
- faraday = conn :name => 'booya'
48
- res = faraday.get '/'
49
- assert_equal 'ok', res.body
50
-
51
- assert_equal 1, @instrumenter.instrumentations.size
52
- name, env = @instrumenter.instrumentations.first
53
- assert_equal 'booya', name
54
- assert_equal '/', env[:url].path
55
- end
56
-
57
- class FakeInstrumenter
58
- attr_reader :instrumentations
59
-
60
- def initialize
61
- @instrumentations = []
62
- end
63
-
64
- def instrument(name, env)
65
- @instrumentations << [name, env]
66
- yield
67
- end
68
- end
69
-
70
- def options(hash = nil)
71
- Faraday::Request::Instrumentation::Options.from hash
72
- end
73
-
74
- def conn(hash = nil)
75
- hash ||= {}
76
- hash[:instrumenter] = @instrumenter
77
-
78
- Faraday.new do |f|
79
- f.request :instrumentation, hash
80
- f.adapter :test do |stub|
81
- stub.get '/' do
82
- [200, {}, 'ok']
83
- end
84
- end
85
- end
86
- end
87
- end
88
- end