Honour request.options.params_encoder

This commit is contained in:
David Cornu 2015-09-26 12:13:09 -04:00
parent 5bfa4bf948
commit ad226f75ab
3 changed files with 21 additions and 3 deletions

View File

@ -396,7 +396,7 @@ module Faraday
# of the resulting url (default: nil).
#
# Returns the resulting URI instance.
def build_exclusive_url(url = nil, params = nil)
def build_exclusive_url(url = nil, params = nil, params_encoder = nil)
url = nil if url.respond_to?(:empty?) and url.empty?
base = url_prefix
if url and base.path and base.path !~ /\/$/
@ -404,7 +404,7 @@ module Faraday
base.path = base.path + '/' # ensure trailing slash
end
uri = url ? base + url : base
uri.query = params.to_query(options.params_encoder) if params
uri.query = params.to_query(params_encoder || options.params_encoder) if params
uri.query = nil if uri.query and uri.query.empty?
uri
end

View File

@ -188,7 +188,7 @@ module Faraday
# :ssl - Hash of options for configuring SSL requests.
def build_env(connection, request)
Env.new(request.method, request.body,
connection.build_exclusive_url(request.path, request.params),
connection.build_exclusive_url(request.path, request.params, request.options.params_encoder),
request.options, request.headers, connection.ssl,
connection.parallel_manager)
end

View File

@ -517,6 +517,24 @@ class TestRequestParams < Faraday::TestCase
end
end
class FooBarEncoder
def self.encode(params)
"foo=bar"
end
def self.decode(param_string)
{"foo" => "bar"}
end
end
def test_params_with_connection_options
create_connection 'http://a.co/page1', :params => {:color => 'blue'}
query = get do |req|
req.options.params_encoder = FooBarEncoder
end
assert_equal "foo=bar", query
end
def get(*args)
env = @conn.get(*args) do |req|
yield(req) if block_given?