module HTTParty::HashConversions

def self.normalize_keys(key, value)

def self.normalize_keys(key, value)
  stack = []
  normalized_keys = []
  if value.respond_to?(:to_ary)
    if value.empty?
      normalized_keys << ["#{key}[]", '']
    else
      normalized_keys = value.to_ary.flat_map { |element| normalize_keys("#{key}[]", element) }
    end
  elsif value.respond_to?(:to_hash)
    stack << [key, value.to_hash]
  else
    normalized_keys << [key.to_s, value]
  end
  stack.each do |parent, hash|
    hash.each do |child_key, child_value|
      if child_value.respond_to?(:to_hash)
        stack << ["#{parent}[#{child_key}]", child_value.to_hash]
      elsif child_value.respond_to?(:to_ary)
        child_value.to_ary.each { |v| normalized_keys << normalize_keys("#{parent}[#{child_key}][]", v).flatten }
      else
        normalized_keys << normalize_keys("#{parent}[#{child_key}]", child_value).flatten
      end
    end
  end
  normalized_keys
end

def self.normalize_param(key, value)

Other tags:
    Example: normalize_param(:name, "Bob Jones") #=> "name=Bob%20Jones&" -

Returns:
  • (String) - This key value pair as a param

Parameters:
  • value (Object) -- The value for the param.
  • key (Object) -- The key for the param.
def self.normalize_param(key, value)
  normalized_keys = normalize_keys(key, value)
  normalized_keys.inject('') do |string, (k, v)|
    string + "#{k}=#{ERB::Util.url_encode(v.to_s)}&"
  end
end

def self.to_params(hash)

Returns:
  • (String) - This hash as a query string
def self.to_params(hash)
  hash.to_hash.map { |k, v| normalize_param(k, v) }.join.chop
end