aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/CHANGELOG2
-rw-r--r--activesupport/lib/active_support/core_ext/hash/conversions.rb2
-rw-r--r--activesupport/test/core_ext/hash_ext_test.rb9
3 files changed, 10 insertions, 3 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 40e24d4ad4..a78c774634 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 1cdf7d5c54..f0ce27508f 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 @@ end
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 8a120fdfee..64d550aaf5 100644
--- a/activesupport/test/core_ext/hash_ext_test.rb
+++ b/activesupport/test/core_ext/hash_ext_test.rb
@@ -544,7 +544,7 @@ class QueryTest < Test::Unit::TestCase
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 @@ class QueryTest < Test::Unit::TestCase
: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