diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-14 12:58:25 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2004-12-14 12:58:25 +0000 |
commit | e5a8d8ebbbb21dcd05d98d055dd0f75da972543e (patch) | |
tree | 4440a071fe5d053b983f329a2a1ece58ec3298d2 | |
parent | 605bc77533cf3b6700e91eda8994cdf6b82341cc (diff) | |
download | rails-e5a8d8ebbbb21dcd05d98d055dd0f75da972543e.tar.gz rails-e5a8d8ebbbb21dcd05d98d055dd0f75da972543e.tar.bz2 rails-e5a8d8ebbbb21dcd05d98d055dd0f75da972543e.zip |
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
-rw-r--r-- | railties/lib/webrick_server.rb | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/railties/lib/webrick_server.rb b/railties/lib/webrick_server.rb index eee0bd90c2..318d9eb932 100644 --- a/railties/lib/webrick_server.rb +++ b/railties/lib/webrick_server.rb @@ -136,11 +136,20 @@ class DispatchServlet < WEBrick::HTTPServlet::AbstractServlet 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 |