class HashUtil def self.to_params(hash) # rubocop:todo Metrics/MethodLength params = '' stack = [] hash.each do |k, v| if v.is_a?(Hash) stack << [k, v] else params << "#{k}=#{v}&" end end stack.each do |parent, h| h.each do |k, v| if v.is_a?(Hash) stack << ["#{parent}[#{k}]", v] else params << "#{parent}[#{k}]=#{v}&" end end end params.chop! # trailing & params end end class Hash # Destructively convert all keys to strings. def stringify_keys! keys.each do |key| self[key.to_s] = delete(key) end self end end