faraday 0.8.4 → 0.8.5
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 +1 -1
- data/Rakefile +31 -1
- data/lib/faraday.rb +1 -1
- data/lib/faraday/adapter/em_synchrony.rb +3 -1
- data/lib/faraday/adapter/excon.rb +4 -0
- data/lib/faraday/adapter/net_http.rb +1 -0
- data/lib/faraday/adapter/patron.rb +1 -0
- data/lib/faraday/adapter/rack.rb +2 -1
- data/lib/faraday/connection.rb +36 -10
- data/lib/faraday/utils.rb +8 -2
- data/script/test +38 -10
- data/test/adapters/em_http_test.rb +2 -1
- data/test/adapters/em_synchrony_test.rb +2 -2
- data/test/adapters/excon_test.rb +4 -1
- data/test/adapters/integration.rb +13 -3
- data/test/adapters/net_http_test.rb +0 -6
- data/test/adapters/patron_test.rb +2 -2
- data/test/adapters/typhoeus_test.rb +2 -2
- data/test/connection_test.rb +39 -15
- data/test/helper.rb +12 -0
- data/test/live_server.rb +4 -0
- metadata +28 -65
- data/faraday.gemspec +0 -81
data/Gemfile
CHANGED
@@ -7,7 +7,7 @@ end
|
|
7
7
|
group :test do
|
8
8
|
gem 'em-http-request', '~> 1.0', :require => 'em-http'
|
9
9
|
gem 'em-synchrony', '~> 1.0', :require => ['em-synchrony', 'em-synchrony/em-http'], :platforms => :ruby_19
|
10
|
-
gem 'excon', '>= 0.
|
10
|
+
gem 'excon', '>= 0.16.1'
|
11
11
|
gem 'net-http-persistent', '~> 2.5', :require => false
|
12
12
|
gem 'leftright', '~> 0.9', :require => false
|
13
13
|
gem 'rack-test', '~> 0.6', :require => 'rack/test'
|
data/Rakefile
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'date'
|
2
|
+
require 'fileutils'
|
3
|
+
require 'openssl'
|
2
4
|
require 'rake/testtask'
|
3
5
|
|
4
6
|
task :default => :test
|
@@ -26,6 +28,23 @@ def replace_header(head, header_name)
|
|
26
28
|
head.sub!(/(\.#{header_name}\s*= ').*'/) { "#{$1}#{send(header_name)}'"}
|
27
29
|
end
|
28
30
|
|
31
|
+
# Adapted from WEBrick::Utils. Skips cert extensions so it
|
32
|
+
# can be used as a CA bundle
|
33
|
+
def create_self_signed_cert(bits, cn, comment)
|
34
|
+
rsa = OpenSSL::PKey::RSA.new(bits)
|
35
|
+
cert = OpenSSL::X509::Certificate.new
|
36
|
+
cert.version = 2
|
37
|
+
cert.serial = 1
|
38
|
+
name = OpenSSL::X509::Name.new(cn)
|
39
|
+
cert.subject = name
|
40
|
+
cert.issuer = name
|
41
|
+
cert.not_before = Time.now
|
42
|
+
cert.not_after = Time.now + (365*24*60*60)
|
43
|
+
cert.public_key = rsa.public_key
|
44
|
+
cert.sign(rsa, OpenSSL::Digest::SHA1.new)
|
45
|
+
return [cert, rsa]
|
46
|
+
end
|
47
|
+
|
29
48
|
## standard tasks
|
30
49
|
|
31
50
|
desc "Run all tests"
|
@@ -33,6 +52,17 @@ task :test do
|
|
33
52
|
exec 'script/test'
|
34
53
|
end
|
35
54
|
|
55
|
+
desc "Generate certificates for SSL tests"
|
56
|
+
task :'test:generate_certs' do
|
57
|
+
cert, key = create_self_signed_cert(1024, [['CN', 'localhost']], 'Faraday Test CA')
|
58
|
+
FileUtils.mkdir_p 'tmp'
|
59
|
+
File.open('tmp/faraday-cert.key', 'w') {|f| f.puts(key) }
|
60
|
+
File.open('tmp/faraday-cert.crt', 'w') {|f| f.puts(cert.to_s) }
|
61
|
+
end
|
62
|
+
|
63
|
+
file 'tmp/faraday-cert.key' => :'test:generate_certs'
|
64
|
+
file 'tmp/faraday-cert.crt' => :'test:generate_certs'
|
65
|
+
|
36
66
|
desc "Open an irb session preloaded with this library"
|
37
67
|
task :console do
|
38
68
|
sh "irb -rubygems -r ./lib/#{name}.rb"
|
@@ -51,7 +81,7 @@ end
|
|
51
81
|
|
52
82
|
desc "Build #{gem_file} into the pkg directory"
|
53
83
|
task :build => :gemspec do
|
54
|
-
|
84
|
+
FileUtils.mkdir_p 'pkg'
|
55
85
|
sh "gem build #{gemspec_file}"
|
56
86
|
sh "mv #{gem_file} pkg"
|
57
87
|
end
|
data/lib/faraday.rb
CHANGED
@@ -71,7 +71,9 @@ require 'faraday/adapter/em_synchrony/parallel_manager'
|
|
71
71
|
|
72
72
|
# add missing patch(), options() methods
|
73
73
|
EventMachine::HTTPMethods.module_eval do
|
74
|
-
|
74
|
+
[:patch, :options].each do |type|
|
75
|
+
next if method_defined? :"a#{type}"
|
76
|
+
alias_method :"a#{type}", type if method_defined? type
|
75
77
|
module_eval %[
|
76
78
|
def #{type}(options = {}, &blk)
|
77
79
|
f = Fiber.current
|
@@ -11,6 +11,10 @@ module Faraday
|
|
11
11
|
opts[:ssl_verify_peer] = !!ssl.fetch(:verify, true)
|
12
12
|
opts[:ssl_ca_path] = ssl[:ca_path] if ssl[:ca_path]
|
13
13
|
opts[:ssl_ca_file] = ssl[:ca_file] if ssl[:ca_file]
|
14
|
+
|
15
|
+
# https://github.com/geemus/excon/issues/106
|
16
|
+
# https://github.com/jruby/jruby-ossl/issues/19
|
17
|
+
opts[:nonblock] = false
|
14
18
|
end
|
15
19
|
|
16
20
|
if ( req = env[:request] )
|
data/lib/faraday/adapter/rack.rb
CHANGED
@@ -31,7 +31,8 @@ module Faraday
|
|
31
31
|
super
|
32
32
|
rack_env = {
|
33
33
|
:method => env[:method],
|
34
|
-
:input => env[:body].respond_to?(:read) ? env[:body].read : env[:body]
|
34
|
+
:input => env[:body].respond_to?(:read) ? env[:body].read : env[:body],
|
35
|
+
'rack.url_scheme' => env[:url].scheme
|
35
36
|
}
|
36
37
|
|
37
38
|
env[:request_headers].each do |name, value|
|
data/lib/faraday/connection.rb
CHANGED
@@ -13,11 +13,22 @@ module Faraday
|
|
13
13
|
attr_reader :params, :headers, :url_prefix, :builder, :options, :ssl, :parallel_manager
|
14
14
|
attr_writer :default_parallel_manager
|
15
15
|
|
16
|
-
# :
|
17
|
-
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
16
|
+
# Public: Initializes a new Faraday::Connection.
|
17
|
+
#
|
18
|
+
# url - URI or String base URL to use as a prefix for all
|
19
|
+
# requests (optional).
|
20
|
+
# options - Hash of settings that will be applied to every request made
|
21
|
+
# from this Connection (default: {}).
|
22
|
+
# :url - URI or String base URL (default: "http:/").
|
23
|
+
# :params - Hash of URI query unencoded key/value pairs.
|
24
|
+
# :headers - Hash of unencoded HTTP header key/value pairs.
|
25
|
+
# :request - Hash of request options.
|
26
|
+
# :ssl - Hash of SSL options.
|
27
|
+
# :proxy - URI, String or Hash of HTTP proxy options
|
28
|
+
# (default: "http_proxy" environment variable).
|
29
|
+
# :uri - URI or String
|
30
|
+
# :user - String (optional)
|
31
|
+
# :password - String (optional)
|
21
32
|
def initialize(url = nil, options = {})
|
22
33
|
if url.is_a?(Hash)
|
23
34
|
options = url
|
@@ -154,11 +165,19 @@ module Faraday
|
|
154
165
|
return @proxy if arg.nil?
|
155
166
|
|
156
167
|
@proxy = if arg.is_a? Hash
|
157
|
-
uri = arg.fetch(:uri) { raise ArgumentError, "
|
158
|
-
arg.merge :uri =>
|
168
|
+
uri = self.class.URI arg.fetch(:uri) { raise ArgumentError, "missing :uri" }
|
169
|
+
arg.merge :uri => uri
|
159
170
|
else
|
160
|
-
|
171
|
+
uri = self.class.URI(arg)
|
172
|
+
{:uri => uri}
|
173
|
+
end
|
174
|
+
|
175
|
+
with_uri_credentials(uri) do |user, password|
|
176
|
+
@proxy[:user] ||= user
|
177
|
+
@proxy[:password] ||= password
|
161
178
|
end
|
179
|
+
|
180
|
+
@proxy
|
162
181
|
end
|
163
182
|
|
164
183
|
# normalize URI() behavior across Ruby versions
|
@@ -193,8 +212,8 @@ module Faraday
|
|
193
212
|
params.merge_query(uri.query)
|
194
213
|
uri.query = nil
|
195
214
|
|
196
|
-
|
197
|
-
basic_auth
|
215
|
+
with_uri_credentials(uri) do |user, password|
|
216
|
+
basic_auth user, password
|
198
217
|
uri.user = uri.password = nil
|
199
218
|
end
|
200
219
|
|
@@ -282,5 +301,12 @@ module Faraday
|
|
282
301
|
def dup
|
283
302
|
self.class.new(build_url(''), :headers => headers.dup, :params => params.dup, :builder => builder.dup, :ssl => ssl.dup)
|
284
303
|
end
|
304
|
+
|
305
|
+
# Internal: Yields username and password extracted from a URI if they both exist.
|
306
|
+
def with_uri_credentials(uri)
|
307
|
+
if uri.user and uri.password
|
308
|
+
yield Utils.unescape(uri.user), Utils.unescape(uri.password)
|
309
|
+
end
|
310
|
+
end
|
285
311
|
end
|
286
312
|
end
|
data/lib/faraday/utils.rb
CHANGED
@@ -126,7 +126,7 @@ module Faraday
|
|
126
126
|
|
127
127
|
def merge_query(query)
|
128
128
|
if query && !query.empty?
|
129
|
-
update Utils.
|
129
|
+
update Utils.parse_nested_query(query)
|
130
130
|
end
|
131
131
|
self
|
132
132
|
end
|
@@ -170,7 +170,13 @@ module Faraday
|
|
170
170
|
end
|
171
171
|
end
|
172
172
|
|
173
|
-
|
173
|
+
ESCAPE_RE = /[^\w .~-]+/
|
174
|
+
|
175
|
+
def escape(s)
|
176
|
+
s.to_s.gsub(ESCAPE_RE) {
|
177
|
+
'%' + $&.unpack('H2' * $&.bytesize).join('%').upcase
|
178
|
+
}.tr(' ', '+')
|
179
|
+
end
|
174
180
|
|
175
181
|
def unescape(s) CGI.unescape s.to_s end
|
176
182
|
|
data/script/test
CHANGED
@@ -10,6 +10,7 @@
|
|
10
10
|
# $ script/test
|
11
11
|
# $ script/test test/env_test.rb
|
12
12
|
# $ script/test excon typhoeus
|
13
|
+
# $ SSL=yes script/test net_http -- -n /ssl/
|
13
14
|
|
14
15
|
require 'rubygems'
|
15
16
|
require 'bundler'
|
@@ -24,10 +25,19 @@ end
|
|
24
25
|
|
25
26
|
$VERBOSE = true
|
26
27
|
|
27
|
-
host = '
|
28
|
+
host = 'localhost'
|
28
29
|
logfile = 'log/test.log'
|
29
30
|
test_glob = 'test/**/*_test.rb'
|
30
31
|
|
32
|
+
if ssl_mode = ENV['SSL'] == 'yes'
|
33
|
+
unless ENV['SSL_KEY'] and ENV['SSL_FILE']
|
34
|
+
key_file = ENV['SSL_KEY'] = 'tmp/faraday-cert.key'
|
35
|
+
cert_file = ENV['SSL_FILE'] = 'tmp/faraday-cert.crt'
|
36
|
+
system 'rake', key_file, cert_file
|
37
|
+
abort unless $?.success?
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
31
41
|
require 'fileutils'
|
32
42
|
FileUtils.mkdir_p 'log'
|
33
43
|
|
@@ -42,6 +52,8 @@ end
|
|
42
52
|
|
43
53
|
server = nil
|
44
54
|
|
55
|
+
Thread.abort_on_exception = true
|
56
|
+
|
45
57
|
# start test server in a separate thread
|
46
58
|
thread = Thread.new do
|
47
59
|
old_verbose, $VERBOSE = $VERBOSE, nil
|
@@ -57,6 +69,14 @@ thread = Thread.new do
|
|
57
69
|
:Port => port, :Logger => WEBrick::Log::new(log_io),
|
58
70
|
:AccessLog => [[log_io, "[%{X-Faraday-Adapter}i] %m %U -> %s %b"]]
|
59
71
|
}
|
72
|
+
if ssl_mode
|
73
|
+
require 'webrick/https'
|
74
|
+
webrick_opts.update \
|
75
|
+
:SSLEnable => true,
|
76
|
+
:SSLPrivateKey => OpenSSL::PKey::RSA.new(File.read(key_file)),
|
77
|
+
:SSLCertificate => OpenSSL::X509::Certificate.new(File.read(cert_file)),
|
78
|
+
:SSLVerifyClient => OpenSSL::SSL::VERIFY_NONE
|
79
|
+
end
|
60
80
|
Rack::Handler::WEBrick.run(Faraday::LiveServer, webrick_opts) {|serv| server = serv }
|
61
81
|
end
|
62
82
|
|
@@ -76,28 +96,36 @@ if ARGV.any?
|
|
76
96
|
test_files.concat extra_args
|
77
97
|
end
|
78
98
|
|
79
|
-
require 'net/
|
99
|
+
require 'net/https'
|
80
100
|
conn = Net::HTTP.new host, port
|
81
|
-
conn.open_timeout = conn.read_timeout = 0.
|
101
|
+
conn.open_timeout = conn.read_timeout = 0.1
|
102
|
+
conn.use_ssl = ssl_mode
|
103
|
+
conn.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
82
104
|
|
83
105
|
# test if test server is accepting requests
|
84
106
|
responsive = lambda { |path|
|
85
107
|
begin
|
86
108
|
res = conn.start { conn.get(path) }
|
87
109
|
res.is_a?(Net::HTTPSuccess)
|
88
|
-
rescue Errno::ECONNREFUSED, Errno::EBADF, Timeout::Error
|
110
|
+
rescue Errno::ECONNREFUSED, Errno::EBADF, Timeout::Error, Net::HTTPBadResponse
|
89
111
|
false
|
90
112
|
end
|
91
113
|
}
|
92
114
|
|
93
|
-
|
94
|
-
|
115
|
+
server_pings = 0
|
116
|
+
begin
|
95
117
|
# block until test server is ready
|
96
|
-
thread.join 0.05
|
97
|
-
|
118
|
+
thread.join 0.05
|
119
|
+
server_pings += 1
|
120
|
+
abort "test server didn't manage to start" if server_pings >= 50
|
121
|
+
end until responsive.call('/echo')
|
98
122
|
|
99
|
-
ENV['LIVE'] = "http://#{host}:#{port}"
|
100
|
-
system 'ruby', '-Ilib:test',
|
123
|
+
ENV['LIVE'] = "http#{ssl_mode ? 's' : ''}://#{host}:#{port}"
|
124
|
+
ok = system 'ruby', '-Ilib:test',
|
125
|
+
'-e', 'load(ARGV.shift) while ARGV.first =~ /^[^-]/',
|
126
|
+
*test_files
|
101
127
|
|
102
128
|
server.respond_to?(:stop!) ? server.stop! : server.stop
|
103
129
|
thread.join
|
130
|
+
|
131
|
+
exit 1 unless ok
|
@@ -8,7 +8,7 @@ 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
|
11
|
+
end unless RUBY_VERSION < '1.9' or jruby?
|
12
12
|
|
13
|
-
end
|
13
|
+
end
|
14
14
|
end
|
data/test/adapters/excon_test.rb
CHANGED
@@ -7,9 +7,11 @@ module Adapters
|
|
7
7
|
# `#adapter` required. returns a symbol for the adapter middleware name
|
8
8
|
# `#adapter_options` optional. extra arguments for building an adapter
|
9
9
|
module Integration
|
10
|
-
def self.apply(base, *
|
10
|
+
def self.apply(base, *extra_features)
|
11
11
|
if base.live_server?
|
12
|
-
|
12
|
+
features = [:Common]
|
13
|
+
features.concat extra_features
|
14
|
+
features.each {|name| base.send(:include, self.const_get(name)) }
|
13
15
|
yield if block_given?
|
14
16
|
elsif !defined? @warned
|
15
17
|
warn "Warning: Not running integration tests against a live server."
|
@@ -93,6 +95,11 @@ module Adapters
|
|
93
95
|
assert_equal 'Agent Faraday', response.body
|
94
96
|
end
|
95
97
|
|
98
|
+
def test_GET_ssl
|
99
|
+
expected = self.class.ssl_mode?.to_s
|
100
|
+
assert_equal expected, get('ssl').body
|
101
|
+
end
|
102
|
+
|
96
103
|
def test_POST_send_url_encoded_params
|
97
104
|
assert_equal %(post {"name"=>"zack"}), post('echo', :name => 'zack').body
|
98
105
|
end
|
@@ -180,7 +187,10 @@ module Adapters
|
|
180
187
|
end
|
181
188
|
|
182
189
|
server = self.class.live_server
|
183
|
-
url = '
|
190
|
+
url = '%s://%s:%d' % [server.scheme, server.host, server.port]
|
191
|
+
|
192
|
+
options[:ssl] ||= {}
|
193
|
+
options[:ssl][:ca_file] ||= ENV['SSL_FILE']
|
184
194
|
|
185
195
|
Faraday::Connection.new(url, options, &builder_block).tap do |conn|
|
186
196
|
conn.headers['X-Faraday-Adapter'] = adapter.to_s
|
@@ -10,11 +10,5 @@ module Adapters
|
|
10
10
|
|
11
11
|
Integration.apply(self, *behaviors)
|
12
12
|
|
13
|
-
def test_configure_ssl
|
14
|
-
http = Net::HTTP.new 'disney.com', 443
|
15
|
-
# this should not raise an error
|
16
|
-
Faraday::Adapter::NetHttp.new.configure_ssl(http, :ssl => {:verify => true})
|
17
|
-
end
|
18
|
-
|
19
13
|
end
|
20
14
|
end
|
data/test/connection_test.rb
CHANGED
@@ -3,13 +3,17 @@ require 'uri'
|
|
3
3
|
|
4
4
|
class TestConnection < Faraday::TestCase
|
5
5
|
|
6
|
-
def
|
7
|
-
|
8
|
-
ENV[
|
6
|
+
def with_env(key, proxy)
|
7
|
+
old_value = ENV.fetch(key, false)
|
8
|
+
ENV[key] = proxy
|
9
9
|
begin
|
10
10
|
yield
|
11
11
|
ensure
|
12
|
-
|
12
|
+
if old_value == false
|
13
|
+
ENV.delete key
|
14
|
+
else
|
15
|
+
ENV[key] = old_value
|
16
|
+
end
|
13
17
|
end
|
14
18
|
end
|
15
19
|
|
@@ -175,6 +179,12 @@ class TestConnection < Faraday::TestCase
|
|
175
179
|
assert_equal "a%5Bb%5D=1+%2B+2", uri.query
|
176
180
|
end
|
177
181
|
|
182
|
+
def test_build_url_escapes_per_spec
|
183
|
+
conn = Faraday::Connection.new
|
184
|
+
uri = conn.build_url('http:/', 'a' => '1+2 foo~bar.-baz')
|
185
|
+
assert_equal "a=1%2B2+foo~bar.-baz", uri.query
|
186
|
+
end
|
187
|
+
|
178
188
|
def test_build_url_bracketizes_nested_params_in_query
|
179
189
|
conn = Faraday::Connection.new
|
180
190
|
uri = conn.build_url("http://sushi.com/sake.html", 'a' => {'b' => 'c'})
|
@@ -203,7 +213,7 @@ class TestConnection < Faraday::TestCase
|
|
203
213
|
end
|
204
214
|
|
205
215
|
def test_proxy_accepts_string
|
206
|
-
|
216
|
+
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
207
217
|
conn = Faraday::Connection.new
|
208
218
|
conn.proxy 'http://proxy.com'
|
209
219
|
assert_equal 'proxy.com', conn.proxy[:uri].host
|
@@ -212,7 +222,7 @@ class TestConnection < Faraday::TestCase
|
|
212
222
|
end
|
213
223
|
|
214
224
|
def test_proxy_accepts_uri
|
215
|
-
|
225
|
+
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
216
226
|
conn = Faraday::Connection.new
|
217
227
|
conn.proxy URI.parse('http://proxy.com')
|
218
228
|
assert_equal 'proxy.com', conn.proxy[:uri].host
|
@@ -221,7 +231,7 @@ class TestConnection < Faraday::TestCase
|
|
221
231
|
end
|
222
232
|
|
223
233
|
def test_proxy_accepts_hash_with_string_uri
|
224
|
-
|
234
|
+
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
225
235
|
conn = Faraday::Connection.new
|
226
236
|
conn.proxy :uri => 'http://proxy.com', :user => 'rick'
|
227
237
|
assert_equal 'proxy.com', conn.proxy[:uri].host
|
@@ -230,7 +240,7 @@ class TestConnection < Faraday::TestCase
|
|
230
240
|
end
|
231
241
|
|
232
242
|
def test_proxy_accepts_hash
|
233
|
-
|
243
|
+
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
234
244
|
conn = Faraday::Connection.new
|
235
245
|
conn.proxy :uri => URI.parse('http://proxy.com'), :user => 'rick'
|
236
246
|
assert_equal 'proxy.com', conn.proxy[:uri].host
|
@@ -239,12 +249,20 @@ class TestConnection < Faraday::TestCase
|
|
239
249
|
end
|
240
250
|
|
241
251
|
def test_proxy_accepts_http_env
|
242
|
-
|
252
|
+
with_env 'http_proxy', "http://duncan.proxy.com:80" do
|
243
253
|
conn = Faraday::Connection.new
|
244
254
|
assert_equal 'duncan.proxy.com', conn.proxy[:uri].host
|
245
255
|
end
|
246
256
|
end
|
247
257
|
|
258
|
+
def test_proxy_accepts_http_env_with_auth
|
259
|
+
with_env 'http_proxy', "http://a%40b:my%20pass@duncan.proxy.com:80" do
|
260
|
+
conn = Faraday::Connection.new
|
261
|
+
assert_equal 'a@b', conn.proxy[:user]
|
262
|
+
assert_equal 'my pass', conn.proxy[:password]
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
248
266
|
def test_proxy_requires_uri
|
249
267
|
conn = Faraday::Connection.new
|
250
268
|
assert_raises ArgumentError do
|
@@ -252,12 +270,6 @@ class TestConnection < Faraday::TestCase
|
|
252
270
|
end
|
253
271
|
end
|
254
272
|
|
255
|
-
def test_params_to_query_converts_hash_of_params_to_uri_escaped_query_string
|
256
|
-
conn = Faraday::Connection.new
|
257
|
-
url = conn.build_url('', 'a[b]' => '1 + 2')
|
258
|
-
assert_equal "a%5Bb%5D=1+%2B+2", url.query
|
259
|
-
end
|
260
|
-
|
261
273
|
def test_dups_connection_object
|
262
274
|
conn = Faraday::Connection.new 'http://sushi.com/foo',
|
263
275
|
:ssl => { :verify => :none },
|
@@ -372,4 +384,16 @@ class TestRequestParams < Faraday::TestCase
|
|
372
384
|
end
|
373
385
|
assert_query_equal %w[b=b], query
|
374
386
|
end
|
387
|
+
|
388
|
+
def test_array_params_in_url
|
389
|
+
create_connection 'http://a.co/page1?color[]=red&color[]=blue'
|
390
|
+
query = get
|
391
|
+
assert_equal "color%5B%5D=red&color%5B%5D=blue", query
|
392
|
+
end
|
393
|
+
|
394
|
+
def test_array_params_in_params
|
395
|
+
create_connection 'http://a.co/page1', :params => {:color => ['red', 'blue']}
|
396
|
+
query = get
|
397
|
+
assert_equal "color%5B%5D=red&color%5B%5D=blue", query
|
398
|
+
end
|
375
399
|
end
|
data/test/helper.rb
CHANGED
@@ -69,5 +69,17 @@ module Faraday
|
|
69
69
|
$stderr = old
|
70
70
|
end
|
71
71
|
end
|
72
|
+
|
73
|
+
def self.jruby?
|
74
|
+
defined? RUBY_ENGINE and 'jruby' == RUBY_ENGINE
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.rbx?
|
78
|
+
defined? RUBY_ENGINE and 'rbx' == RUBY_ENGINE
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.ssl_mode?
|
82
|
+
ENV['SSL'] == 'yes'
|
83
|
+
end
|
72
84
|
end
|
73
85
|
end
|
data/test/live_server.rb
CHANGED
metadata
CHANGED
@@ -1,80 +1,64 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.4
|
5
4
|
prerelease:
|
5
|
+
version: 0.8.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Rick Olson
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '1.1'
|
20
|
+
none: false
|
21
|
+
name: multipart-post
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
|
25
|
-
none: false
|
24
|
+
requirement: !ruby/object:Gem::Requirement
|
26
25
|
requirements:
|
27
26
|
- - ~>
|
28
27
|
- !ruby/object:Gem::Version
|
29
28
|
version: '1.1'
|
30
|
-
- !ruby/object:Gem::Dependency
|
31
|
-
name: rake
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
33
29
|
none: false
|
34
|
-
|
35
|
-
- - ! '>='
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: '0'
|
38
|
-
type: :development
|
39
|
-
prerelease: false
|
30
|
+
- !ruby/object:Gem::Dependency
|
40
31
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
32
|
requirements:
|
43
33
|
- - ! '>='
|
44
34
|
- !ruby/object:Gem::Version
|
45
35
|
version: '0'
|
46
|
-
- !ruby/object:Gem::Dependency
|
47
|
-
name: simplecov
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
49
36
|
none: false
|
50
|
-
|
51
|
-
- - ! '>='
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0'
|
37
|
+
name: rake
|
54
38
|
type: :development
|
55
39
|
prerelease: false
|
56
|
-
|
57
|
-
none: false
|
40
|
+
requirement: !ruby/object:Gem::Requirement
|
58
41
|
requirements:
|
59
42
|
- - ! '>='
|
60
43
|
- !ruby/object:Gem::Version
|
61
44
|
version: '0'
|
62
|
-
- !ruby/object:Gem::Dependency
|
63
|
-
name: test-unit
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
65
45
|
none: false
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
48
|
requirements:
|
67
49
|
- - ! '>='
|
68
50
|
- !ruby/object:Gem::Version
|
69
51
|
version: '0'
|
52
|
+
none: false
|
53
|
+
name: simplecov
|
70
54
|
type: :development
|
71
55
|
prerelease: false
|
72
|
-
|
73
|
-
none: false
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
74
57
|
requirements:
|
75
58
|
- - ! '>='
|
76
59
|
- !ruby/object:Gem::Version
|
77
60
|
version: '0'
|
61
|
+
none: false
|
78
62
|
description:
|
79
63
|
email: technoweenie@gmail.com
|
80
64
|
executables: []
|
@@ -85,12 +69,9 @@ files:
|
|
85
69
|
- LICENSE.md
|
86
70
|
- README.md
|
87
71
|
- Rakefile
|
88
|
-
- faraday.gemspec
|
89
|
-
- lib/faraday.rb
|
90
|
-
- lib/faraday/adapter.rb
|
91
72
|
- lib/faraday/adapter/em_http.rb
|
92
|
-
- lib/faraday/adapter/em_synchrony.rb
|
93
73
|
- lib/faraday/adapter/em_synchrony/parallel_manager.rb
|
74
|
+
- lib/faraday/adapter/em_synchrony.rb
|
94
75
|
- lib/faraday/adapter/excon.rb
|
95
76
|
- lib/faraday/adapter/net_http.rb
|
96
77
|
- lib/faraday/adapter/net_http_persistent.rb
|
@@ -98,23 +79,24 @@ files:
|
|
98
79
|
- lib/faraday/adapter/rack.rb
|
99
80
|
- lib/faraday/adapter/test.rb
|
100
81
|
- lib/faraday/adapter/typhoeus.rb
|
82
|
+
- lib/faraday/adapter.rb
|
101
83
|
- lib/faraday/builder.rb
|
102
84
|
- lib/faraday/connection.rb
|
103
85
|
- lib/faraday/error.rb
|
104
86
|
- lib/faraday/middleware.rb
|
105
|
-
- lib/faraday/request.rb
|
106
87
|
- lib/faraday/request/authorization.rb
|
107
88
|
- lib/faraday/request/basic_authentication.rb
|
108
89
|
- lib/faraday/request/multipart.rb
|
109
90
|
- lib/faraday/request/retry.rb
|
110
91
|
- lib/faraday/request/token_authentication.rb
|
111
92
|
- lib/faraday/request/url_encoded.rb
|
112
|
-
- lib/faraday/
|
93
|
+
- lib/faraday/request.rb
|
113
94
|
- lib/faraday/response/logger.rb
|
114
95
|
- lib/faraday/response/raise_error.rb
|
96
|
+
- lib/faraday/response.rb
|
115
97
|
- lib/faraday/upload_io.rb
|
116
98
|
- lib/faraday/utils.rb
|
117
|
-
-
|
99
|
+
- lib/faraday.rb
|
118
100
|
- test/adapters/default_test.rb
|
119
101
|
- test/adapters/em_http_test.rb
|
120
102
|
- test/adapters/em_synchrony_test.rb
|
@@ -136,49 +118,30 @@ files:
|
|
136
118
|
- test/middleware_stack_test.rb
|
137
119
|
- test/request_middleware_test.rb
|
138
120
|
- test/response_middleware_test.rb
|
139
|
-
|
140
|
-
|
121
|
+
- script/test
|
122
|
+
homepage: https://github.com/lostisland/faraday
|
123
|
+
licenses:
|
124
|
+
- MIT
|
141
125
|
post_install_message:
|
142
126
|
rdoc_options: []
|
143
127
|
require_paths:
|
144
128
|
- lib
|
145
129
|
required_ruby_version: !ruby/object:Gem::Requirement
|
146
|
-
none: false
|
147
130
|
requirements:
|
148
131
|
- - ! '>='
|
149
132
|
- !ruby/object:Gem::Version
|
150
133
|
version: '0'
|
151
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
152
134
|
none: false
|
135
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
136
|
requirements:
|
154
137
|
- - ! '>='
|
155
138
|
- !ruby/object:Gem::Version
|
156
|
-
version: 1.3.
|
139
|
+
version: 1.3.6
|
140
|
+
none: false
|
157
141
|
requirements: []
|
158
142
|
rubyforge_project:
|
159
143
|
rubygems_version: 1.8.23
|
160
144
|
signing_key:
|
161
145
|
specification_version: 2
|
162
146
|
summary: HTTP/REST API client library.
|
163
|
-
test_files:
|
164
|
-
- test/adapters/default_test.rb
|
165
|
-
- test/adapters/em_http_test.rb
|
166
|
-
- test/adapters/em_synchrony_test.rb
|
167
|
-
- test/adapters/excon_test.rb
|
168
|
-
- test/adapters/integration.rb
|
169
|
-
- test/adapters/logger_test.rb
|
170
|
-
- test/adapters/net_http_persistent_test.rb
|
171
|
-
- test/adapters/net_http_test.rb
|
172
|
-
- test/adapters/patron_test.rb
|
173
|
-
- test/adapters/rack_test.rb
|
174
|
-
- test/adapters/test_middleware_test.rb
|
175
|
-
- test/adapters/typhoeus_test.rb
|
176
|
-
- test/authentication_middleware_test.rb
|
177
|
-
- test/connection_test.rb
|
178
|
-
- test/env_test.rb
|
179
|
-
- test/helper.rb
|
180
|
-
- test/live_server.rb
|
181
|
-
- test/middleware/retry_test.rb
|
182
|
-
- test/middleware_stack_test.rb
|
183
|
-
- test/request_middleware_test.rb
|
184
|
-
- test/response_middleware_test.rb
|
147
|
+
test_files: []
|
data/faraday.gemspec
DELETED
@@ -1,81 +0,0 @@
|
|
1
|
-
Gem::Specification.new do |s|
|
2
|
-
s.specification_version = 2 if s.respond_to? :specification_version=
|
3
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.5") if s.respond_to? :required_rubygems_version=
|
4
|
-
|
5
|
-
s.name = 'faraday'
|
6
|
-
s.version = '0.8.4'
|
7
|
-
|
8
|
-
s.summary = "HTTP/REST API client library."
|
9
|
-
# TODO: s.description
|
10
|
-
|
11
|
-
s.authors = ["Rick Olson"]
|
12
|
-
s.email = 'technoweenie@gmail.com'
|
13
|
-
s.homepage = 'https://github.com/technoweenie/faraday'
|
14
|
-
|
15
|
-
s.add_dependency 'multipart-post', '~> 1.1'
|
16
|
-
s.add_development_dependency 'rake'
|
17
|
-
s.add_development_dependency 'simplecov'
|
18
|
-
s.add_development_dependency 'test-unit'
|
19
|
-
|
20
|
-
# = MANIFEST =
|
21
|
-
s.files = %w[
|
22
|
-
Gemfile
|
23
|
-
LICENSE.md
|
24
|
-
README.md
|
25
|
-
Rakefile
|
26
|
-
faraday.gemspec
|
27
|
-
lib/faraday.rb
|
28
|
-
lib/faraday/adapter.rb
|
29
|
-
lib/faraday/adapter/em_http.rb
|
30
|
-
lib/faraday/adapter/em_synchrony.rb
|
31
|
-
lib/faraday/adapter/em_synchrony/parallel_manager.rb
|
32
|
-
lib/faraday/adapter/excon.rb
|
33
|
-
lib/faraday/adapter/net_http.rb
|
34
|
-
lib/faraday/adapter/net_http_persistent.rb
|
35
|
-
lib/faraday/adapter/patron.rb
|
36
|
-
lib/faraday/adapter/rack.rb
|
37
|
-
lib/faraday/adapter/test.rb
|
38
|
-
lib/faraday/adapter/typhoeus.rb
|
39
|
-
lib/faraday/builder.rb
|
40
|
-
lib/faraday/connection.rb
|
41
|
-
lib/faraday/error.rb
|
42
|
-
lib/faraday/middleware.rb
|
43
|
-
lib/faraday/request.rb
|
44
|
-
lib/faraday/request/authorization.rb
|
45
|
-
lib/faraday/request/basic_authentication.rb
|
46
|
-
lib/faraday/request/multipart.rb
|
47
|
-
lib/faraday/request/retry.rb
|
48
|
-
lib/faraday/request/token_authentication.rb
|
49
|
-
lib/faraday/request/url_encoded.rb
|
50
|
-
lib/faraday/response.rb
|
51
|
-
lib/faraday/response/logger.rb
|
52
|
-
lib/faraday/response/raise_error.rb
|
53
|
-
lib/faraday/upload_io.rb
|
54
|
-
lib/faraday/utils.rb
|
55
|
-
script/test
|
56
|
-
test/adapters/default_test.rb
|
57
|
-
test/adapters/em_http_test.rb
|
58
|
-
test/adapters/em_synchrony_test.rb
|
59
|
-
test/adapters/excon_test.rb
|
60
|
-
test/adapters/integration.rb
|
61
|
-
test/adapters/logger_test.rb
|
62
|
-
test/adapters/net_http_persistent_test.rb
|
63
|
-
test/adapters/net_http_test.rb
|
64
|
-
test/adapters/patron_test.rb
|
65
|
-
test/adapters/rack_test.rb
|
66
|
-
test/adapters/test_middleware_test.rb
|
67
|
-
test/adapters/typhoeus_test.rb
|
68
|
-
test/authentication_middleware_test.rb
|
69
|
-
test/connection_test.rb
|
70
|
-
test/env_test.rb
|
71
|
-
test/helper.rb
|
72
|
-
test/live_server.rb
|
73
|
-
test/middleware/retry_test.rb
|
74
|
-
test/middleware_stack_test.rb
|
75
|
-
test/request_middleware_test.rb
|
76
|
-
test/response_middleware_test.rb
|
77
|
-
]
|
78
|
-
# = MANIFEST =
|
79
|
-
|
80
|
-
s.test_files = s.files.select { |path| path =~ %r{^test/*/.+\.rb} }
|
81
|
-
end
|