module Rack::Test::Utils

def build_nested_query(value, prefix = nil)

can be an array or hash of parameters.
Build a query string for the given value and prefix. The value
def build_nested_query(value, prefix = nil)
  case value
  when Array
    if value.empty?
      "#{prefix}[]="
    else
      prefix += "[]" unless unescape(prefix).end_with?('[]')
      value.map do |v|
        build_nested_query(v, prefix.to_s)
      end.join('&')
    end
  when Hash
    value.map do |k, v|
      build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
    end.join('&')
  when NilClass
    prefix.to_s
  else
    "#{prefix}=#{escape(value)}"
  end
end