diff options
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/routing.rb | 10 | ||||
-rw-r--r-- | actionpack/test/controller/routing_test.rb | 14 |
2 files changed, 21 insertions, 3 deletions
diff --git a/actionpack/lib/action_controller/routing.rb b/actionpack/lib/action_controller/routing.rb index 32ce0db3aa..6b551e2533 100644 --- a/actionpack/lib/action_controller/routing.rb +++ b/actionpack/lib/action_controller/routing.rb @@ -92,8 +92,8 @@ module ActionController def initialize(key, options = {}) @key = key.to_sym - @default, @condition = options[:default], options[:condition] - @optional = options.key?(:default) + default, @condition = options[:default], options[:condition] + self.default = default if options.key?(:default) end def default_check(g) @@ -226,8 +226,12 @@ module ActionController class PathComponent < DynamicComponent #:nodoc: def optional?() true end - def default() '' end + def default() [] end def condition() nil end + + def default=(value) + raise RoutingError, "All path components have an implicit default of []" unless value == [] + end def write_generation(g) raise RoutingError, 'Path components must occur last' unless g.after.empty? diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index c68b1f70d3..3bc240b44d 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -711,6 +711,20 @@ class RouteSetTests < Test::Unit::TestCase assert_equal [], results['path'] end + def test_paths_do_not_accept_defaults + assert_raises(ActionController::RoutingError) do + rs.draw do |map| + rs.path 'file/*path', :controller => 'content', :action => 'show_file', :path => %w(fake default) + rs.connect ':controller/:action/:id' + end + end + + rs.draw do |map| + rs.path 'file/*path', :controller => 'content', :action => 'show_file', :path => [] + rs.connect ':controller/:action/:id' + end + end + def test_backwards rs.draw do |map| rs.connect 'page/:id/:action', :controller => 'pages', :action => 'show' |