diff options
author | Andrew White <andyw@pixeltrix.co.uk> | 2012-08-04 11:33:30 +0100 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2012-08-04 11:33:30 +0100 |
commit | 067efad8af6e84e45518120a77dfbb0b49c94469 (patch) | |
tree | 2d3043f4348d104ffed67afc2b89d47f98a85379 /actionpack | |
parent | 3d3fa165e40c8cdaaebdab9dd2985d0ca3a36236 (diff) | |
parent | 6be564c7a087773cb0b51c54396cc190e4f5c983 (diff) | |
download | rails-067efad8af6e84e45518120a77dfbb0b49c94469.tar.gz rails-067efad8af6e84e45518120a77dfbb0b49c94469.tar.bz2 rails-067efad8af6e84e45518120a77dfbb0b49c94469.zip |
Merge branch 'polymorphic_url_builds_query_string_with_array'
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/CHANGELOG.md | 2 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/routing/polymorphic_routes.rb | 5 | ||||
-rw-r--r-- | actionpack/test/activerecord/polymorphic_routes_test.rb | 21 |
3 files changed, 27 insertions, 1 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 68cce142a2..861e086372 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,5 +1,7 @@ ## Rails 4.0.0 (unreleased) ## +* Add the ability to pass options as part of the array notation for `polymorphic_url` *Romain Tribes* + * Fixed issue with where Digest authentication would not work behind a proxy. *Arthur Smith* * Added ActionController::Live. Mix it in to your controller and you can diff --git a/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb b/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb index 3d7b8878b8..93e8418d9c 100644 --- a/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb +++ b/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb @@ -62,6 +62,7 @@ module ActionDispatch # # # calls post_url(post) # polymorphic_url(post) # => "http://example.com/posts/1" + # polymorphic_url([post, :foo => 'bar']) # => "http://example.com/posts/1?foo=bar" # polymorphic_url([blog, post]) # => "http://example.com/blogs/1/posts/1" # polymorphic_url([:admin, blog, post]) # => "http://example.com/admin/blogs/1/posts/1" # polymorphic_url([user, :blog, post]) # => "http://example.com/users/1/blog/posts/1" @@ -92,6 +93,7 @@ module ActionDispatch def polymorphic_url(record_or_hash_or_array, options = {}) if record_or_hash_or_array.kind_of?(Array) record_or_hash_or_array = record_or_hash_or_array.compact + options.reverse_merge!(record_or_hash_or_array.extract_options!) if record_or_hash_or_array.first.is_a?(ActionDispatch::Routing::RoutesProxy) proxy = record_or_hash_or_array.shift end @@ -196,7 +198,8 @@ module ActionDispatch def extract_record(record_or_hash_or_array) case record_or_hash_or_array - when Array; record_or_hash_or_array.last + when Array + record_or_hash_or_array.last when Hash; record_or_hash_or_array[:id] else record_or_hash_or_array end diff --git a/actionpack/test/activerecord/polymorphic_routes_test.rb b/actionpack/test/activerecord/polymorphic_routes_test.rb index afb714484b..9454a6d726 100644 --- a/actionpack/test/activerecord/polymorphic_routes_test.rb +++ b/actionpack/test/activerecord/polymorphic_routes_test.rb @@ -309,6 +309,27 @@ class PolymorphicRoutesTest < ActionController::TestCase end end + def test_with_array_containing_simple_hash + with_test_routes do + @project.save + assert_equal "http://example.com/projects/#{@project.id}?foo=bar", polymorphic_url([@project, :foo => 'bar' ]) + end + end + + def test_with_array_containing_complex_hash + with_test_routes do + @project.save + assert_equal "http://example.com/projects/#{@project.id}?foo=bar&nested%5Bfoo%5D=bar", polymorphic_url([@project, :nested => { :foo => 'bar' }, :foo => 'bar']) + end + end + + def test_with_array_containing_simple_hash_options_take_precedence + with_test_routes do + @project.save + assert_equal "http://example.com/projects/#{@project.id}?foo=baz", polymorphic_url([@project, :foo => 'bar' ], :foo => 'baz') + end + end + def test_with_array_containing_single_name with_test_routes do @project.save |