Support for nested params in Sinatra::Test
Sinatra::Test#param_string was slurped from merb: <http://github.com/wycats/merb/blob/84f61f39/merb-core/lib/merb-core/dispatch/request_parsers.rb#L156>
This commit is contained in:
parent
9d329651b4
commit
52658061d1
|
@ -16,14 +16,14 @@ module Sinatra
|
||||||
when 2 # input, env
|
when 2 # input, env
|
||||||
input, env = args
|
input, env = args
|
||||||
if input.kind_of?(Hash) # params, env
|
if input.kind_of?(Hash) # params, env
|
||||||
[env, build_query(input)]
|
[env, param_string(input)]
|
||||||
else
|
else
|
||||||
[env, input]
|
[env, input]
|
||||||
end
|
end
|
||||||
when 1 # params
|
when 1 # params
|
||||||
if (data = args.first).kind_of?(Hash)
|
if (data = args.first).kind_of?(Hash)
|
||||||
env = (data.delete(:env) || {})
|
env = (data.delete(:env) || {})
|
||||||
[env, build_query(data)]
|
[env, param_string(data)]
|
||||||
else
|
else
|
||||||
[{}, data]
|
[{}, data]
|
||||||
end
|
end
|
||||||
|
@ -82,6 +82,21 @@ module Sinatra
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def param_string(value, prefix = nil)
|
||||||
|
case value
|
||||||
|
when Array
|
||||||
|
value.map { |v|
|
||||||
|
param_string(v, "#{prefix}[]")
|
||||||
|
} * "&"
|
||||||
|
when Hash
|
||||||
|
value.map { |k, v|
|
||||||
|
param_string(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
|
||||||
|
} * "&"
|
||||||
|
else
|
||||||
|
"#{prefix}=#{escape(value)}"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
if defined? Sinatra::Compat
|
if defined? Sinatra::Compat
|
||||||
# Deprecated. Use: "get" instead of "get_it".
|
# Deprecated. Use: "get" instead of "get_it".
|
||||||
%w(get head post put delete).each do |verb|
|
%w(get head post put delete).each do |verb|
|
||||||
|
@ -92,12 +107,6 @@ module Sinatra
|
||||||
end
|
end
|
||||||
RUBY
|
RUBY
|
||||||
end
|
end
|
||||||
|
|
||||||
# Deprecated. Use: build_query instead.
|
|
||||||
def param_string(hash)
|
|
||||||
sinatra_warn "The param_string method is deprecated; use build_query instead."
|
|
||||||
build_query(hash)
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
require File.dirname(__FILE__) + '/helper'
|
||||||
|
|
||||||
|
describe "Sinatra::Test" do
|
||||||
|
it "support nested parameters" do
|
||||||
|
mock_app {
|
||||||
|
get '/' do
|
||||||
|
params[:post][:title]
|
||||||
|
end
|
||||||
|
|
||||||
|
post '/' do
|
||||||
|
params[:post][:content]
|
||||||
|
end
|
||||||
|
}
|
||||||
|
|
||||||
|
get '/', :post => { :title => 'My Post Title' }
|
||||||
|
assert_equal 'My Post Title', body
|
||||||
|
|
||||||
|
post '/', :post => { :content => 'Post Content' }
|
||||||
|
assert_equal 'Post Content', body
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue