mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Add ability to specify Route Regexps for controllers. Closes #1917.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2205 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
9e5d64b3bb
commit
27962ead03
3 changed files with 48 additions and 1 deletions
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* Add ability to specify Route Regexps for controllers. Closes #1917. [Sebastian Kanthak]
|
||||
|
||||
* Provide Named Route's hash methods as helper methods. Closes #1744. [Nicholas Seckar, Steve Purcell]
|
||||
|
||||
* Added :multipart option to ActiveRecordHelper#form to make it possible to add file input fields #2034 [jstirk@oobleyboo.com]
|
||||
|
|
|
@ -192,9 +192,16 @@ module ActionController
|
|||
g << "controller_result = ::ActionController::Routing::ControllerComponent.traverse_to_controller(#{g.path_name}, #{g.index_name})"
|
||||
g.if('controller_result') do |gp|
|
||||
gp << 'controller_value, segments_to_controller = controller_result'
|
||||
if condition
|
||||
gp << "controller_path = #{gp.path_name}[#{gp.index_name},segments_to_controller].join('/')"
|
||||
gp.if(Routing.test_condition("controller_path", condition)) do |gpp|
|
||||
gpp.move_forward('segments_to_controller') {|gppp| yield gppp, :constraint}
|
||||
end
|
||||
else
|
||||
gp.move_forward('segments_to_controller') {|gpp| yield gpp, :constraint}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def assign_result(g)
|
||||
g.result key, 'controller_value'
|
||||
|
|
|
@ -238,6 +238,20 @@ class RecognitionTests < Test::Unit::TestCase
|
|||
assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
|
||||
end
|
||||
|
||||
def test_controller_with_regexp
|
||||
c = [Static.new("hi"), Controller.new(:controller, :condition => /^admin\/.+$/)]
|
||||
g.constant_result :action, "hi"
|
||||
|
||||
go c
|
||||
|
||||
assert_nil execute('hi')
|
||||
assert_nil execute('hi/x')
|
||||
assert_nil execute('hi/content')
|
||||
assert_equal({:controller => ::Controllers::Admin::UserController, :action => 'hi'}, execute('hi/admin/user'))
|
||||
assert_equal({:controller => ::Controllers::Admin::NewsFeedController, :action => 'hi'}, execute('hi/admin/news_feed'))
|
||||
assert_nil execute('hi/admin/user/foo')
|
||||
end
|
||||
|
||||
def test_standard_route(time = ::RunTimeTests)
|
||||
c = [Controller.new(:controller), Dynamic.new(:action, :default => 'index'), Dynamic.new(:id, :default => nil)]
|
||||
go c
|
||||
|
@ -407,6 +421,17 @@ not_expired = true
|
|||
assert_equal '/hi/admin/user', execute({}, {:controller => 'admin/user'})
|
||||
end
|
||||
|
||||
def test_controller_with_regexp
|
||||
c = [Static.new("hi"), Controller.new(:controller, :condition => /^admin\/.+$/)]
|
||||
go c
|
||||
|
||||
assert_nil execute({}, {})
|
||||
assert_nil execute({:controller => 'content'}, {})
|
||||
assert_equal '/hi/admin/user', execute({:controller => 'admin/user'}, {})
|
||||
assert_nil execute({}, {:controller => 'content'})
|
||||
assert_equal '/hi/admin/user', execute({}, {:controller => 'admin/user'})
|
||||
end
|
||||
|
||||
def test_standard_route(time = ::RunTimeTests)
|
||||
c = [Controller.new(:controller), Dynamic.new(:action, :default => 'index'), Dynamic.new(:id, :default => nil)]
|
||||
go c
|
||||
|
@ -635,6 +660,19 @@ class RouteSetTests < Test::Unit::TestCase
|
|||
$stderr = old_stderr
|
||||
end
|
||||
|
||||
def test_route_with_regexp_for_controller
|
||||
rs.draw do |map|
|
||||
map.connect ':controller/:admintoken/:action/:id', :controller => /admin\/.+/
|
||||
map.connect ':controller/:action/:id'
|
||||
end
|
||||
assert_equal({:controller => ::Controllers::Admin::UserController, :admintoken => "foo", :action => "index"}.stringify_keys,
|
||||
rs.recognize_path(%w(admin user foo)))
|
||||
assert_equal({:controller => ::Controllers::ContentController, :action => "foo"}.stringify_keys,
|
||||
rs.recognize_path(%w(content foo)))
|
||||
assert_equal ['/admin/user/foo', []], rs.generate(:controller => "admin/user", :admintoken => "foo", :action => "index")
|
||||
assert_equal ['/content/foo',[]], rs.generate(:controller => "content", :action => "foo")
|
||||
end
|
||||
|
||||
def test_basic_named_route
|
||||
rs.home '', :controller => 'content', :action => 'list'
|
||||
x = setup_for_named_route
|
||||
|
|
Loading…
Reference in a new issue