提交 002c0aee 编写于 作者: J Jeremy Kemper

Hash#to_query CGI-escapes its keys.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6148 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
上级 39ae7025
*SVN*
* Hash#to_query CGI-escapes its keys. [Jeremy Kemper]
* Deprecation: warn on stderr if RAILS_DEFAULT_LOGGER isn't set yet. [Jeremy
Kemper]
......
......@@ -9,7 +9,7 @@ def to_param #:nodoc:
end
def to_query(key) #:nodoc:
"#{key}=#{CGI.escape(to_param || "")}"
"#{CGI.escape(key.to_s)}=#{CGI.escape(to_param || "")}"
end
end
......
......@@ -530,22 +530,36 @@ def test_kernel_method_names_to_xml
class QueryTest < Test::Unit::TestCase
def test_simple_conversion
assert_equal 'a=10', {:a => 10}.to_query
assert_query_equal 'a=10', :a => 10
end
def test_cgi_escaping
assert_query_equal 'a%3Ab=c+d', 'a:b' => 'c d'
end
def test_nil_parameter_value
empty = Object.new
def empty.to_param; nil end
assert_query_equal 'a=', 'a' => empty
end
def test_nested_conversion
expected = %w(person[name]=Nicholas person[login]=seckar)
actual = {:person => {:name => 'Nicholas', :login => 'seckar'}}.to_query
assert_equal expected.sort, actual.split('&').sort
assert_query_equal 'person%5Bname%5D=Nicholas&person%5Blogin%5D=seckar',
:person => {:name => 'Nicholas', :login => 'seckar'}
end
def test_multiple_nested
assert_equal 'account[person][id]=20&person[id]=10',
{:person => {:id => 10}, :account => {:person => {:id => 20}}}.to_query
assert_query_equal 'account%5Bperson%5D%5Bid%5D=20&person%5Bid%5D=10',
:person => {:id => 10}, :account => {:person => {:id => 20}}
end
def test_array_values
assert_equal 'person[id][]=10&person[id][]=20',
{:person => {:id => [10, 20]}}.to_query
assert_query_equal 'person%5Bid%5D%5B%5D=10&person%5Bid%5D%5B%5D=20',
:person => {:id => [10, 20]}
end
private
def assert_query_equal(expected, actual, message = nil)
assert_equal expected.split('&').sort, actual.to_query.split('&').sort
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册