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.
- data/LICENSE.md +1 -1
- data/README.md +41 -16
- data/lib/faraday.rb +1 -1
- data/lib/faraday/adapter/em_synchrony.rb +8 -0
- data/lib/faraday/adapter/excon.rb +1 -0
- data/lib/faraday/adapter/httpclient.rb +14 -3
- data/lib/faraday/adapter/net_http.rb +2 -2
- data/lib/faraday/adapter/net_http_persistent.rb +2 -1
- data/lib/faraday/adapter/patron.rb +8 -2
- data/lib/faraday/connection.rb +8 -3
- data/lib/faraday/options.rb +9 -0
- data/lib/faraday/parameters.rb +54 -38
- data/lib/faraday/rack_builder.rb +3 -2
- data/lib/faraday/request/retry.rb +9 -3
- data/lib/faraday/response.rb +2 -2
- data/lib/faraday/utils.rb +13 -1
- metadata +61 -124
- checksums.yaml +0 -7
- data/.document +0 -6
- data/CHANGELOG.md +0 -20
- data/CONTRIBUTING.md +0 -36
- data/Gemfile +0 -25
- data/Rakefile +0 -71
- data/faraday.gemspec +0 -34
- data/script/cached-bundle +0 -46
- data/script/console +0 -7
- data/script/generate_certs +0 -42
- data/script/package +0 -7
- data/script/proxy-server +0 -42
- data/script/release +0 -17
- data/script/s3-put +0 -71
- data/script/server +0 -36
- data/script/test +0 -172
- data/test/adapters/default_test.rb +0 -14
- data/test/adapters/em_http_test.rb +0 -20
- data/test/adapters/em_synchrony_test.rb +0 -20
- data/test/adapters/excon_test.rb +0 -20
- data/test/adapters/httpclient_test.rb +0 -21
- data/test/adapters/integration.rb +0 -254
- data/test/adapters/logger_test.rb +0 -82
- data/test/adapters/net_http_persistent_test.rb +0 -20
- data/test/adapters/net_http_test.rb +0 -14
- data/test/adapters/patron_test.rb +0 -20
- data/test/adapters/rack_test.rb +0 -31
- data/test/adapters/test_middleware_test.rb +0 -114
- data/test/adapters/typhoeus_test.rb +0 -28
- data/test/authentication_middleware_test.rb +0 -65
- data/test/composite_read_io_test.rb +0 -111
- data/test/connection_test.rb +0 -522
- data/test/env_test.rb +0 -218
- data/test/helper.rb +0 -81
- data/test/live_server.rb +0 -67
- data/test/middleware/instrumentation_test.rb +0 -88
- data/test/middleware/retry_test.rb +0 -177
- data/test/middleware_stack_test.rb +0 -173
- data/test/multibyte.txt +0 -1
- data/test/options_test.rb +0 -252
- data/test/parameters_test.rb +0 -64
- data/test/request_middleware_test.rb +0 -142
- data/test/response_middleware_test.rb +0 -72
- data/test/strawberry.rb +0 -2
- data/test/utils_test.rb +0 -58
data/test/env_test.rb
DELETED
@@ -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
|
data/test/helper.rb
DELETED
@@ -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
|
data/test/live_server.rb
DELETED
@@ -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
|