diff --git a/lib/koala/http_service.rb b/lib/koala/http_service.rb index 4b794052..eae86b9c 100644 --- a/lib/koala/http_service.rb +++ b/lib/koala/http_service.rb @@ -3,6 +3,7 @@ require 'koala/http_service/uploadable_io' require 'koala/http_service/response' require 'koala/http_service/request' +require 'koala/http_service/encoded_params' module Koala module HTTPService @@ -77,14 +78,8 @@ def self.make_request(request) # => "a=2&b=My+String" # # @return the appropriately-encoded string - def self.encode_params(param_hash) - ((param_hash || {}).sort_by{|k, v| k.to_s}.collect do |key_and_value| - value = key_and_value[1] - unless value.is_a? String - value = value.to_json - end - "#{key_and_value[0].to_s}=#{CGI.escape value}" - end).join("&") + def self.encode_params(params) + EncodedParams.new(params).to_s end private diff --git a/lib/koala/http_service/encoded_params.rb b/lib/koala/http_service/encoded_params.rb new file mode 100644 index 00000000..600e4782 --- /dev/null +++ b/lib/koala/http_service/encoded_params.rb @@ -0,0 +1,30 @@ +module Koala + module HTTPService + class EncodedParams # :nodoc: + def initialize(params) + @params = (params || {}).sort_by{|k, _| k.to_s} + end + + def to_s + encode_from_params(stringify_values_from_params(@params)) + end + + private + + def stringify_values_from_params(params) + params.collect do |(key, value)| + unless value.is_a? String + value = value.to_json + end + [key, value] + end + end + + def encode_from_params(params) + params.collect do |(key, value)| + "#{key}=#{CGI.escape value}" + end.join("&") + end + end + end +end