diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 40e24d4ad47c7..a78c774634f92 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Array#to_query preserves its ordering. #7756 [Greg Spurrier] + * Out-of-range Time calculations transparently overflow to DateTime. Introduce Time#to_datetime. #7706, #7715 [Geoff Buesing] * DateTime calculations analogous to the Date and Time extensions. #7693 [Geoff Buesing] diff --git a/activesupport/lib/active_support/core_ext/hash/conversions.rb b/activesupport/lib/active_support/core_ext/hash/conversions.rb index 1cdf7d5c5417d..f0ce27508fb2e 100644 --- a/activesupport/lib/active_support/core_ext/hash/conversions.rb +++ b/activesupport/lib/active_support/core_ext/hash/conversions.rb @@ -15,7 +15,7 @@ def to_query(key) #:nodoc: class Array def to_query(key) #:nodoc: - collect { |value| value.to_query("#{key}[]") }.sort * '&' + collect { |value| value.to_query("#{key}[]") } * '&' end end diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb index 8a120fdfeee00..64d550aaf5bcf 100644 --- a/activesupport/test/core_ext/hash_ext_test.rb +++ b/activesupport/test/core_ext/hash_ext_test.rb @@ -544,7 +544,7 @@ def empty.to_param; nil end end def test_nested_conversion - assert_query_equal 'person%5Bname%5D=Nicholas&person%5Blogin%5D=seckar', + assert_query_equal 'person%5Blogin%5D=seckar&person%5Bname%5D=Nicholas', :person => {:name => 'Nicholas', :login => 'seckar'} end @@ -558,8 +558,13 @@ def test_array_values :person => {:id => [10, 20]} end + def test_array_values_are_not_sorted + assert_query_equal 'person%5Bid%5D%5B%5D=20&person%5Bid%5D%5B%5D=10', + :person => {:id => [20, 10]} + end + private def assert_query_equal(expected, actual, message = nil) - assert_equal expected.split('&').sort, actual.to_query.split('&').sort + assert_equal expected.split('&'), actual.to_query.split('&') end end