Remove duplicate routes from mapped resources (closes #5712) [eigentone@gmail.com]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4669 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2006-08-05 20:46:49 +00:00
parent 01e389c965
commit 5130fc84c6
2 changed files with 26 additions and 3 deletions

View File

@ -143,9 +143,10 @@ module ActionController
end
map.connect(resource.member_path, route_options.merge(:action => primary)) unless primary.blank?
map.named_route("#{resource.name_prefix}#{resource.singular}", resource.member_path, :action => "show", :conditions => { :method => :get })
map.named_route("formatted_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}.:format", :action => "show", :conditions => { :method => :get })
end
map.named_route("#{resource.name_prefix}#{resource.singular}", resource.member_path, :action => "show", :conditions => { :method => :get })
map.named_route("formatted_#{resource.name_prefix}#{resource.singular}", "#{resource.member_path}.:format", :action => "show", :conditions => { :method => :get })
end
def requirements_for(method)
@ -154,4 +155,4 @@ module ActionController
end
end
ActionController::Routing::RouteSet::Mapper.send :include, ActionController::Resources
ActionController::Routing::RouteSet::Mapper.send :include, ActionController::Resources

View File

@ -133,6 +133,18 @@ class ResourcesTest < Test::Unit::TestCase
:options => { :thread_id => '1', :message_id => '2' }
end
end
def test_restful_routes_dont_generate_duplicates
with_restful_routing :messages do
routes = ActionController::Routing::Routes.routes
routes.each do |route|
routes.each do |r|
next if route === r # skip the comparison instance
assert distinct_routes?(route, r), "Duplicate Route: #{route}"
end
end
end
end
protected
def with_restful_routing(*args)
@ -212,4 +224,14 @@ class ResourcesTest < Test::Unit::TestCase
"#{method} not in #{action_method} methods: #{resource.send("#{action_method}_methods")[method].inspect}"
end
end
def distinct_routes? (r1, r2)
if r1.conditions == r2.conditions and r1.requirements == r2.requirements then
if r1.segments.collect(&:to_s) == r2.segments.collect(&:to_s) then
return false
end
end
true
end
end