From e5a8d8ebbbb21dcd05d98d055dd0f75da972543e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 14 Dec 2004 12:58:25 +0000 Subject: [PATCH] This patch allows urls to be of the form :module/:controller/:action as well as :controller/:action/:id where :id is no entirely numeric by determining if what would be :module corresponds to a directory in app/controllers. If it does not then the :controller/:action/:id scheme is used. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@150 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- railties/lib/webrick_server.rb | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/railties/lib/webrick_server.rb b/railties/lib/webrick_server.rb index eee0bd90c25a4..318d9eb932482 100644 --- a/railties/lib/webrick_server.rb +++ b/railties/lib/webrick_server.rb @@ -136,11 +136,20 @@ def self.parse_uri(path) when %r{^/#{component}/#{component}/$} then { :module => $1, :controller => $2, :action => "index" } when %r{^/#{component}/#{component}/#{component}$} then - { :module => $1, :controller => $2, :action => $3 } + if DispatchServlet.modules(component).include?($1) + { :module => $1, :controller => $2, :action => $3 } + else + { :controller => $1, :action => $2, :id => $3 } + end when %r{^/#{component}/#{component}/#{component}/#{id}$} then { :module => $1, :controller => $2, :action => $3, :id => $4 } else false end end + + def self.modules(module_pattern = '[^.]+') + path = RAILS_ROOT + '/app/controllers' + Dir.entries(path).grep(/^#{module_pattern}$/).find_all {|e| File.directory?("#{path}/#{e}")} + end end