From e2528429c538a2fe1e9a58bd7e7d3598024ed617 Mon Sep 17 00:00:00 2001 From: Allison McMillan Date: Wed, 20 Dec 2017 13:57:33 -0500 Subject: [PATCH 1/2] Refactors `encode_from_param` method into separate class In order to decrese the complexity of the method while maintaining functionality, The `encode_from_param` method was broken in to a separate class with smaller methods, which should also allow for easier debugging if there is ever an issue in the future. --- lib/koala/http_service.rb | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/lib/koala/http_service.rb b/lib/koala/http_service.rb index 4b794052..c3395b02 100644 --- a/lib/koala/http_service.rb +++ b/lib/koala/http_service.rb @@ -77,14 +77,35 @@ 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 + class EncodedParams + 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 - "#{key_and_value[0].to_s}=#{CGI.escape value}" - end).join("&") + end + + def encode_from_params(params) + params.collect do |(key, value)| + "#{key}=#{CGI.escape value}" + end.join("&") + end + end + + def self.encode_params(params) + EncodedParams.new(params).to_s end private From 330710a033367340dd3d121118a5057d44d453a1 Mon Sep 17 00:00:00 2001 From: Allison McMillan Date: Fri, 29 Dec 2017 13:36:35 -0500 Subject: [PATCH 2/2] Abstracted EncodedParams class into a separate file Added nodoc to the class since it is already documented in `http_service.rb` Tested back to ruby-2.2.3 --- lib/koala/http_service.rb | 28 +--------------------- lib/koala/http_service/encoded_params.rb | 30 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 27 deletions(-) create mode 100644 lib/koala/http_service/encoded_params.rb diff --git a/lib/koala/http_service.rb b/lib/koala/http_service.rb index c3395b02..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,33 +78,6 @@ def self.make_request(request) # => "a=2&b=My+String" # # @return the appropriately-encoded string - class EncodedParams - 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 - def self.encode_params(params) EncodedParams.new(params).to_s end 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