Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Allow array and hash query parameters. Closes #7756.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6379 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information...
commit d97456dd82c64a6bd67728e484df38d1f1bcb37f 1 parent 8a7275e
@jeremy jeremy authored
View
2  activeresource/CHANGELOG
@@ -1,5 +1,7 @@
*SVN*
+* Allow array and hash query parameters. #7756 [Greg Spurrier]
+
* Loading a resource preserves its prefix_options. #7353 [Ryan Daigle]
* Carry over the convenience of #create from ActiveRecord. Closes #7340. [Ryan Daigle]
View
18 activeresource/lib/active_resource/base.rb
@@ -140,23 +140,7 @@ def prefix_parameters
def query_string(options)
# Omit parameters which appear in the URI path.
query_params = options.reject { |key, value| prefix_parameters.include?(key) }
-
- # Accumulate a list of escaped key=value pairs for the given parameters.
- pairs = []
- query_params.each do |key, value|
- key = CGI.escape(key.to_s)
-
- # a => b becomes a=b
- # a => [b, c] becomes a[]=b&a[]=c
- case value
- when Array
- value.each { |val| pairs << "#{key}[]=#{CGI.escape(val.to_s)}" }
- else
- pairs << "#{key}=#{CGI.escape(value.to_s)}"
- end
- end
-
- "?#{pairs * '&'}" unless pairs.empty?
+ "?#{query_params.to_query}" unless query_params.empty?
end
end
View
7 activeresource/test/base_test.rb
@@ -97,7 +97,9 @@ def test_collection_path_with_parameters
assert_equal '/people.xml?gender=male', Person.collection_path('gender' => 'male')
assert_equal '/people.xml?gender=male&student=true', Person.collection_path(:gender => 'male', :student => true)
- assert_equal '/people.xml?name[]=bob&name[]=your+uncle%2Bme&name[]=&name[]=false', Person.collection_path(:name => ['bob', 'your uncle+me', nil, false])
+ assert_equal '/people.xml?name%5B%5D=bob&name%5B%5D=your+uncle%2Bme&name%5B%5D=&name%5B%5D=false', Person.collection_path(:name => ['bob', 'your uncle+me', nil, false])
+
+ assert_equal '/people.xml?struct%5Ba%5D%5B%5D=2&struct%5Ba%5D%5B%5D=1&struct%5Bb%5D=fred', Person.collection_path(:struct => {:a => [2,1], 'b' => 'fred'})
end
def test_custom_element_path
@@ -106,7 +108,8 @@ def test_custom_element_path
def test_custom_element_path_with_parameters
assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, :person_id => 1, :type => 'work')
- assert_equal '/people/1/addresses/1.xml?type[]=work&type[]=play+time', StreetAddress.element_path(1, :person_id => 1, :type => ['work', 'play time'])
+ assert_equal '/people/1/addresses/1.xml?type=work', StreetAddress.element_path(1, :type => 'work', :person_id => 1)
+ assert_equal '/people/1/addresses/1.xml?type%5B%5D=work&type%5B%5D=play+time', StreetAddress.element_path(1, :person_id => 1, :type => ['work', 'play time'])
end
def test_custom_collection_path
Please sign in to comment.
Something went wrong with that request. Please try again.