Skip to content
Browse files

Use :namespace instead of :path_prefix for finding controller. [#544

…state:resolved]

:namespace is supposed to be the module where controller exists.
:path_prefix can contain anything, including variables, which
makes it unsuitable for determining the module for a controller.

Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information...
1 parent d20e8dd commit a37d065f85941e1fe746dff4d42f015e1618834f @tarmo tarmo committed with lifo Jul 3, 2008
Showing with 21 additions and 2 deletions.
  1. +1 −2 actionpack/lib/action_controller/routing/builder.rb
  2. +20 −0 actionpack/test/controller/routing_test.rb
View
3 actionpack/lib/action_controller/routing/builder.rb
@@ -67,10 +67,9 @@ def divide_route_options(segments, options)
options = options.dup
if options[:namespace]
- options[:controller] = "#{options[:path_prefix]}/#{options[:controller]}"
+ options[:controller] = "#{options.delete(:namespace).sub(/\/$/, '')}/#{options[:controller]}"
options.delete(:path_prefix)
options.delete(:name_prefix)
- options.delete(:namespace)
end
requirements = (options.delete(:requirements) || {}).dup
View
20 actionpack/test/controller/routing_test.rb
@@ -2039,6 +2039,26 @@ def test_namespaced_root_map
Object.send(:remove_const, :Api)
end
+ def test_namespace_with_path_prefix
+ Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })
+
+ set.draw do |map|
+
+ map.namespace 'api', :path_prefix => 'prefix' do |api|
+ api.route 'inventory', :controller => "products", :action => 'inventory'
+ end
+
+ end
+
+ request.path = "/prefix/inventory"
+ request.method = :get
+ assert_nothing_raised { set.recognize(request) }
+ assert_equal("api/products", request.path_parameters[:controller])
+ assert_equal("inventory", request.path_parameters[:action])
+ ensure
+ Object.send(:remove_const, :Api)
+ end
+
def test_generate_finds_best_fit
set.draw do |map|
map.connect "/people", :controller => "people", :action => "index"

0 comments on commit a37d065

Please sign in to comment.
Something went wrong with that request. Please try again.