aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/lib/action_controller/routing.rb10
-rw-r--r--actionpack/test/controller/routing_test.rb14
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'