Take Hash with options inside Array in #url_for

This commit is contained in:
Andrey Ognevsky 2013-11-13 00:18:36 +04:00
parent 77ed4d98a7
commit d04c4fac3b
4 changed files with 31 additions and 0 deletions

View File

@ -1,3 +1,12 @@
* Take a hash with options inside array in #url_for
Example:
url_for [:new, :admin, :post, { param: 'value' }]
# => http://example.com/admin/posts/new?params=value
*Andrey Ognevsky*
* Add `session#fetch` method
fetch behaves similarly to [Hash#fetch](http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-fetch),

View File

@ -155,6 +155,8 @@ module ActionDispatch
_routes.url_for(options.symbolize_keys.reverse_merge!(url_options))
when String
options
when Array
polymorphic_url(options, options.extract_options!)
else
polymorphic_url(options)
end

View File

@ -370,6 +370,24 @@ module AbstractController
assert_equal("/c/a?show=false", W.new.url_for(:only_path => true, :controller => 'c', :action => 'a', :show => false))
end
def test_url_generation_with_array_and_hash
with_routing do |set|
set.draw do
namespace :admin do
resources :posts
end
end
kls = Class.new { include set.url_helpers }
kls.default_url_options[:host] = 'www.basecamphq.com'
controller = kls.new
assert_equal("http://www.basecamphq.com/admin/posts/new?param=value",
controller.send(:url_for, [:new, :admin, :post, { param: 'value' }])
)
end
end
private
def extract_params(url)
url.split('?', 2).last.split('&').sort

View File

@ -83,6 +83,8 @@ module ActionView
super
when :back
_back_url
when Array
polymorphic_path(options, options.extract_options!)
else
polymorphic_path(options)
end