faraday 0.9.0.rc1 → 0.9.0.rc2
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/CHANGELOG.md +12 -0
- data/faraday.gemspec +1 -1
- data/lib/faraday.rb +1 -1
- data/lib/faraday/adapter/em_synchrony.rb +1 -1
- data/lib/faraday/connection.rb +2 -24
- data/lib/faraday/utils.rb +16 -2
- data/test/connection_test.rb +48 -28
- data/test/utils_test.rb +37 -0
- metadata +5 -2
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Faraday Changelog
|
2
|
+
|
3
|
+
## v0.9.0.pre
|
4
|
+
|
5
|
+
* Add HTTPClient adapter (@hakanensari)
|
6
|
+
* Improve Retry handler (@mislav)
|
7
|
+
* Remove autoloading by default (@technoweenie)
|
8
|
+
* Improve internal docs (@technoweenie, @mislav)
|
9
|
+
* Respect user/password in http proxy string (@mislav)
|
10
|
+
* Adapter options are structs. Reinforces consistent options across adapters
|
11
|
+
(@technoweenie)
|
12
|
+
|
data/faraday.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_dependency 'multipart-post', '~> 1.1'
|
21
21
|
spec.add_development_dependency 'bundler', '~> 1.0'
|
22
22
|
|
23
|
-
spec.files = %w(.document CONTRIBUTING.md Gemfile LICENSE.md README.md Rakefile)
|
23
|
+
spec.files = %w(.document CHANGELOG.md CONTRIBUTING.md Gemfile LICENSE.md README.md Rakefile)
|
24
24
|
spec.files << "#{lib}.gemspec"
|
25
25
|
spec.files += Dir.glob("lib/**/*.rb")
|
26
26
|
spec.files += Dir.glob("test/**/*.rb")
|
data/lib/faraday.rb
CHANGED
@@ -19,7 +19,7 @@ module Faraday
|
|
19
19
|
|
20
20
|
def call(env)
|
21
21
|
super
|
22
|
-
request = EventMachine::HttpRequest.new(URI
|
22
|
+
request = EventMachine::HttpRequest.new(Utils::URI(env[:url].to_s), connection_config(env))
|
23
23
|
|
24
24
|
http_method = env[:method].to_s.downcase.to_sym
|
25
25
|
|
data/lib/faraday/connection.rb
CHANGED
@@ -322,7 +322,6 @@ module Faraday
|
|
322
322
|
# Returns the new String path prefix.
|
323
323
|
def path_prefix=(value)
|
324
324
|
url_prefix.path = if value
|
325
|
-
value = value.chomp '/'
|
326
325
|
value = '/' + value unless value[0,1] == '/'
|
327
326
|
value
|
328
327
|
end
|
@@ -363,27 +362,6 @@ module Faraday
|
|
363
362
|
end
|
364
363
|
end
|
365
364
|
|
366
|
-
# Takes a relative url for a request and combines it with the defaults
|
367
|
-
# set on the connection instance.
|
368
|
-
#
|
369
|
-
# conn = Faraday::Connection.new { ... }
|
370
|
-
# conn.url_prefix = "https://sushi.com/api?token=abc"
|
371
|
-
# conn.scheme # => https
|
372
|
-
# conn.path_prefix # => "/api"
|
373
|
-
#
|
374
|
-
# conn.build_url("nigiri?page=2") # => https://sushi.com/api/nigiri?token=abc&page=2
|
375
|
-
# conn.build_url("nigiri", :page => 2) # => https://sushi.com/api/nigiri?token=abc&page=2
|
376
|
-
#
|
377
|
-
def build_url(url, extra_params = nil)
|
378
|
-
uri = build_exclusive_url(url)
|
379
|
-
|
380
|
-
query_values = self.params.dup.merge_query(uri.query, options.params_encoder)
|
381
|
-
query_values.update extra_params if extra_params
|
382
|
-
uri.query = query_values.empty? ? nil : query_values.to_query(options.params_encoder)
|
383
|
-
|
384
|
-
uri
|
385
|
-
end
|
386
|
-
|
387
365
|
# Internal: Build an absolute URL based on url_prefix.
|
388
366
|
#
|
389
367
|
# url - A String or URI-like object
|
@@ -391,7 +369,7 @@ module Faraday
|
|
391
369
|
# of the resulting url (default: nil).
|
392
370
|
#
|
393
371
|
# Returns the resulting URI instance.
|
394
|
-
def build_exclusive_url(url, params = nil)
|
372
|
+
def build_exclusive_url(url = nil, params = nil)
|
395
373
|
url = nil if url.respond_to?(:empty?) and url.empty?
|
396
374
|
base = url_prefix
|
397
375
|
if url and base.path and base.path !~ /\/$/
|
@@ -408,7 +386,7 @@ module Faraday
|
|
408
386
|
#
|
409
387
|
# Returns a Faraday::Connection.
|
410
388
|
def dup
|
411
|
-
self.class.new(
|
389
|
+
self.class.new(build_exclusive_url, :headers => headers.dup, :params => params.dup, :builder => builder.dup, :ssl => ssl.dup)
|
412
390
|
end
|
413
391
|
|
414
392
|
# Internal: Yields username and password extracted from a URI if they both exist.
|
data/lib/faraday/utils.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'uri'
|
2
1
|
require 'thread'
|
3
2
|
Faraday.require_libs 'parameters'
|
4
3
|
|
@@ -235,12 +234,27 @@ module Faraday
|
|
235
234
|
if url.respond_to?(:host)
|
236
235
|
url
|
237
236
|
elsif url.respond_to?(:to_str)
|
238
|
-
|
237
|
+
default_uri_parser.call(url)
|
239
238
|
else
|
240
239
|
raise ArgumentError, "bad argument (expected URI object or URI string)"
|
241
240
|
end
|
242
241
|
end
|
243
242
|
|
243
|
+
def default_uri_parser
|
244
|
+
@default_uri_parser ||= begin
|
245
|
+
require 'uri'
|
246
|
+
Kernel.method(:URI)
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def default_uri_parser=(parser)
|
251
|
+
@default_uri_parser = if parser.respond_to?(:call) || parser.nil?
|
252
|
+
parser
|
253
|
+
else
|
254
|
+
parser.method(:parse)
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
244
258
|
# Receives a String or URI and returns just the path with the query string sorted.
|
245
259
|
def normalize_path(url)
|
246
260
|
url = URI(url)
|
data/test/connection_test.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.expand_path('../helper', __FILE__)
|
2
|
-
require 'uri'
|
3
2
|
|
4
3
|
class TestConnection < Faraday::TestCase
|
5
4
|
|
@@ -105,112 +104,108 @@ class TestConnection < Faraday::TestCase
|
|
105
104
|
def test_build_url_uses_connection_host_as_default_uri_host
|
106
105
|
conn = Faraday::Connection.new
|
107
106
|
conn.host = 'sushi.com'
|
108
|
-
uri = conn.
|
107
|
+
uri = conn.build_exclusive_url("/sake.html")
|
109
108
|
assert_equal 'sushi.com', uri.host
|
110
109
|
end
|
111
110
|
|
112
111
|
def test_build_url_overrides_connection_port_for_absolute_urls
|
113
112
|
conn = Faraday::Connection.new
|
114
113
|
conn.port = 23
|
115
|
-
uri = conn.
|
114
|
+
uri = conn.build_exclusive_url("http://sushi.com")
|
116
115
|
assert_equal 80, uri.port
|
117
116
|
end
|
118
117
|
|
119
118
|
def test_build_url_uses_connection_scheme_as_default_uri_scheme
|
120
119
|
conn = Faraday::Connection.new 'http://sushi.com'
|
121
|
-
uri = conn.
|
120
|
+
uri = conn.build_exclusive_url("/sake.html")
|
122
121
|
assert_equal 'http', uri.scheme
|
123
122
|
end
|
124
123
|
|
125
124
|
def test_build_url_uses_connection_path_prefix_to_customize_path
|
126
125
|
conn = Faraday::Connection.new
|
127
126
|
conn.path_prefix = '/fish'
|
128
|
-
uri = conn.
|
127
|
+
uri = conn.build_exclusive_url("sake.html")
|
129
128
|
assert_equal '/fish/sake.html', uri.path
|
130
129
|
end
|
131
130
|
|
132
131
|
def test_build_url_uses_root_connection_path_prefix_to_customize_path
|
133
132
|
conn = Faraday::Connection.new
|
134
133
|
conn.path_prefix = '/'
|
135
|
-
uri = conn.
|
134
|
+
uri = conn.build_exclusive_url("sake.html")
|
136
135
|
assert_equal '/sake.html', uri.path
|
137
136
|
end
|
138
137
|
|
139
138
|
def test_build_url_forces_connection_path_prefix_to_be_absolute
|
140
139
|
conn = Faraday::Connection.new
|
141
140
|
conn.path_prefix = 'fish'
|
142
|
-
uri = conn.
|
141
|
+
uri = conn.build_exclusive_url("sake.html")
|
143
142
|
assert_equal '/fish/sake.html', uri.path
|
144
143
|
end
|
145
144
|
|
146
145
|
def test_build_url_ignores_connection_path_prefix_trailing_slash
|
147
146
|
conn = Faraday::Connection.new
|
148
147
|
conn.path_prefix = '/fish/'
|
149
|
-
uri = conn.
|
148
|
+
uri = conn.build_exclusive_url("sake.html")
|
150
149
|
assert_equal '/fish/sake.html', uri.path
|
151
150
|
end
|
152
151
|
|
153
152
|
def test_build_url_allows_absolute_uri_to_ignore_connection_path_prefix
|
154
153
|
conn = Faraday::Connection.new
|
155
154
|
conn.path_prefix = '/fish'
|
156
|
-
uri = conn.
|
155
|
+
uri = conn.build_exclusive_url("/sake.html")
|
157
156
|
assert_equal '/sake.html', uri.path
|
158
157
|
end
|
159
158
|
|
160
159
|
def test_build_url_parses_url_params_into_path
|
161
160
|
conn = Faraday::Connection.new
|
162
|
-
uri = conn.
|
161
|
+
uri = conn.build_exclusive_url("http://sushi.com/sake.html")
|
163
162
|
assert_equal '/sake.html', uri.path
|
164
163
|
end
|
165
164
|
|
166
165
|
def test_build_url_doesnt_add_ending_slash_given_nil_url
|
167
166
|
conn = Faraday::Connection.new
|
168
167
|
conn.url_prefix = "http://sushi.com/nigiri"
|
169
|
-
uri = conn.
|
168
|
+
uri = conn.build_exclusive_url
|
170
169
|
assert_equal "/nigiri", uri.path
|
171
170
|
end
|
172
171
|
|
173
172
|
def test_build_url_doesnt_add_ending_slash_given_empty_url
|
174
173
|
conn = Faraday::Connection.new
|
175
174
|
conn.url_prefix = "http://sushi.com/nigiri"
|
176
|
-
uri = conn.
|
175
|
+
uri = conn.build_exclusive_url('')
|
177
176
|
assert_equal "/nigiri", uri.path
|
178
177
|
end
|
179
178
|
|
180
179
|
def test_build_url_parses_url_params_into_query
|
181
|
-
|
182
|
-
uri = conn.build_url("http://sushi.com/sake.html", 'a[b]' => '1 + 2')
|
180
|
+
uri = build_url("http://sushi.com/sake.html", 'a[b]' => '1 + 2')
|
183
181
|
assert_equal "a%5Bb%5D=1+%2B+2", uri.query
|
184
182
|
end
|
185
183
|
|
186
184
|
def test_build_url_escapes_per_spec
|
187
|
-
|
188
|
-
uri = conn.build_url('http:/', 'a' => '1+2 foo~bar.-baz')
|
185
|
+
uri = build_url('http:/', 'a' => '1+2 foo~bar.-baz')
|
189
186
|
assert_equal "a=1%2B2+foo~bar.-baz", uri.query
|
190
187
|
end
|
191
188
|
|
192
189
|
def test_build_url_bracketizes_nested_params_in_query
|
193
|
-
|
194
|
-
|
195
|
-
assert_equal "a%5Bb%5D=c", uri.query
|
190
|
+
url = build_url nil, 'a' => {'b' => 'c'}
|
191
|
+
assert_equal "a%5Bb%5D=c", url.query
|
196
192
|
end
|
197
193
|
|
198
194
|
def test_build_url_bracketizes_repeated_params_in_query
|
199
|
-
|
200
|
-
uri = conn.build_url("http://sushi.com/sake.html", 'a' => [1, 2])
|
195
|
+
uri = build_url("http://sushi.com/sake.html", 'a' => [1, 2])
|
201
196
|
assert_equal "a%5B%5D=1&a%5B%5D=2", uri.query
|
202
197
|
end
|
203
198
|
|
204
199
|
def test_build_url_without_braketizing_repeated_params_in_query
|
205
|
-
|
206
|
-
|
207
|
-
|
200
|
+
uri = build_url 'http://sushi.com', 'a' => [1, 2] do |conn|
|
201
|
+
conn.options.params_encoder = Faraday::FlatParamsEncoder
|
202
|
+
end
|
208
203
|
assert_equal "a=1&a=2", uri.query
|
209
204
|
end
|
210
205
|
|
211
206
|
def test_build_url_parses_url
|
212
207
|
conn = Faraday::Connection.new
|
213
|
-
uri = conn.
|
208
|
+
uri = conn.build_exclusive_url("http://sushi.com/sake.html")
|
214
209
|
assert_equal "http", uri.scheme
|
215
210
|
assert_equal "sushi.com", uri.host
|
216
211
|
assert_equal '/sake.html', uri.path
|
@@ -219,13 +214,31 @@ class TestConnection < Faraday::TestCase
|
|
219
214
|
def test_build_url_parses_url_and_changes_scheme
|
220
215
|
conn = Faraday::Connection.new :url => "http://sushi.com/sushi"
|
221
216
|
conn.scheme = 'https'
|
222
|
-
uri = conn.
|
217
|
+
uri = conn.build_exclusive_url("sake.html")
|
223
218
|
assert_equal 'https://sushi.com/sushi/sake.html', uri.to_s
|
224
219
|
end
|
225
220
|
|
221
|
+
def test_build_url_joins_url_to_base_with_ending_slash
|
222
|
+
conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
|
223
|
+
uri = conn.build_exclusive_url("sake.html")
|
224
|
+
assert_equal 'http://sushi.com/sushi/sake.html', uri.to_s
|
225
|
+
end
|
226
|
+
|
227
|
+
def test_build_url_used_default_base_with_ending_slash
|
228
|
+
conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
|
229
|
+
uri = conn.build_exclusive_url
|
230
|
+
assert_equal 'http://sushi.com/sushi/', uri.to_s
|
231
|
+
end
|
232
|
+
|
233
|
+
def test_build_url_overrides_base
|
234
|
+
conn = Faraday::Connection.new :url => "http://sushi.com/sushi/"
|
235
|
+
uri = conn.build_exclusive_url('/sake/')
|
236
|
+
assert_equal 'http://sushi.com/sake/', uri.to_s
|
237
|
+
end
|
238
|
+
|
226
239
|
def test_build_url_handles_uri_instances
|
227
240
|
conn = Faraday::Connection.new
|
228
|
-
uri = conn.
|
241
|
+
uri = conn.build_exclusive_url(URI('/sake.html'))
|
229
242
|
assert_equal '/sake.html', uri.path
|
230
243
|
end
|
231
244
|
|
@@ -286,7 +299,7 @@ class TestConnection < Faraday::TestCase
|
|
286
299
|
|
287
300
|
other = conn.dup
|
288
301
|
|
289
|
-
assert_equal conn.
|
302
|
+
assert_equal conn.build_exclusive_url, other.build_exclusive_url
|
290
303
|
assert_equal 'text/plain', other.headers['content-type']
|
291
304
|
assert_equal '1', other.params['a']
|
292
305
|
|
@@ -314,6 +327,13 @@ class TestConnection < Faraday::TestCase
|
|
314
327
|
assert_equal 1, conn.builder.handlers.size
|
315
328
|
assert_equal '/omnom', conn.path_prefix
|
316
329
|
end
|
330
|
+
|
331
|
+
def build_url(url, params)
|
332
|
+
conn = Faraday::Connection.new(url, :params => params)
|
333
|
+
yield conn if block_given?
|
334
|
+
req = conn.build_request(:get)
|
335
|
+
req.to_env(conn).url
|
336
|
+
end
|
317
337
|
end
|
318
338
|
|
319
339
|
class TestRequestParams < Faraday::TestCase
|
data/test/utils_test.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class TestUtils < Faraday::TestCase
|
4
|
+
def setup
|
5
|
+
@url = "http://example.com/abc"
|
6
|
+
end
|
7
|
+
|
8
|
+
def teardown
|
9
|
+
Faraday::Utils.default_uri_parser = nil
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_parses_with_default
|
13
|
+
assert_equal %(#<Method: Kernel.URI>), Faraday::Utils.default_uri_parser.to_s
|
14
|
+
uri = normalize(@url)
|
15
|
+
assert_equal 'example.com', uri.host
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_parses_with_URI
|
19
|
+
Faraday::Utils.default_uri_parser = ::URI
|
20
|
+
assert_equal %(#<Method: URI.parse>), Faraday::Utils.default_uri_parser.to_s
|
21
|
+
uri = normalize(@url)
|
22
|
+
assert_equal 'example.com', uri.host
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_parses_with_block
|
26
|
+
Faraday::Utils.default_uri_parser = lambda do |uri|
|
27
|
+
"booya#{"!" * uri.size}"
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_equal 'booya!!!!!!!!!!!!!!!!!!!!!!', normalize(@url)
|
31
|
+
end
|
32
|
+
|
33
|
+
def normalize(url)
|
34
|
+
Faraday::Utils::URI(url)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faraday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.rc2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: multipart-post
|
@@ -50,6 +50,7 @@ extensions: []
|
|
50
50
|
extra_rdoc_files: []
|
51
51
|
files:
|
52
52
|
- .document
|
53
|
+
- CHANGELOG.md
|
53
54
|
- CONTRIBUTING.md
|
54
55
|
- Gemfile
|
55
56
|
- LICENSE.md
|
@@ -115,6 +116,7 @@ files:
|
|
115
116
|
- test/request_middleware_test.rb
|
116
117
|
- test/response_middleware_test.rb
|
117
118
|
- test/strawberry.rb
|
119
|
+
- test/utils_test.rb
|
118
120
|
- script/console
|
119
121
|
- script/generate_certs
|
120
122
|
- script/package
|
@@ -173,3 +175,4 @@ test_files:
|
|
173
175
|
- test/request_middleware_test.rb
|
174
176
|
- test/response_middleware_test.rb
|
175
177
|
- test/strawberry.rb
|
178
|
+
- test/utils_test.rb
|