From 9314793239e3728a457d8048a02b334b8955dd23 Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Wed, 13 Jul 2005 23:13:15 +0000 Subject: Named routes should not provide nil values to url_for. Includes factoring and extra testcases. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1825 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_controller/routing.rb | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) (limited to 'actionpack/lib') diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb index 6b551e2533..008e6d2164 100644 --- a/actionpack/lib/action_controller/routing.rb +++ b/actionpack/lib/action_controller/routing.rb @@ -22,7 +22,7 @@ module ActionController def treat_hash(hash) k = v = nil hash.each do |k, v| - hash[k] = (v.respond_to? :to_param) ? v.to_param.to_s : v.to_s + hash[k] = (v.respond_to? :to_param) ? v.to_param.to_s : v.to_s if v end hash end @@ -582,12 +582,25 @@ module ActionController def url_helper_name(name) "#{name}_url" end - - def name_route(route, name) - hash = route.defaults.merge(route.known).symbolize_keys + + def known_hash_for_route(route) + hash = route.known.symbolize_keys + route.defaults.each do |key, value| + hash[key.to_sym] ||= value if value + end hash[:controller] = "/#{hash[:controller]}" - + + hash + end + + def define_hash_access_method(route, name) + hash = known_hash_for_route(route) define_method(hash_access_name(name)) { hash } + end + + def name_route(route, name) + define_hash_access_method(route, name) + module_eval(%{def #{url_helper_name name}(options = {}) url_for(#{hash_access_name(name)}.merge(options)) end}, "generated/routing/named_routes/#{name}.rb") -- cgit v1.2.3