Skip to content

Commit

Permalink
Ensure blank path_prefix works as expected [#2122 state:resolved]
Browse files Browse the repository at this point in the history
Signed-off-by: Pratik Naik <pratiknaik@gmail.com>
  • Loading branch information
abloom authored and lifo committed Mar 9, 2009
1 parent 1d88a11 commit 90dba00
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 3 deletions.
3 changes: 2 additions & 1 deletion actionpack/lib/action_controller/routing/builder.rb
Expand Up @@ -159,7 +159,8 @@ def build(path, options)
path = "/#{path}" unless path[0] == ?/
path = "#{path}/" unless path[-1] == ?/

path = "/#{options[:path_prefix].to_s.gsub(/^\//,'')}#{path}" if options[:path_prefix]
prefix = options[:path_prefix].to_s.gsub(/^\//,'')
path = "/#{prefix}#{path}" unless prefix.blank?

segments = segments_for_route_path(path)
defaults, requirements, conditions = divide_route_options(segments, options)
Expand Down
34 changes: 32 additions & 2 deletions actionpack/test/controller/routing_test.rb
Expand Up @@ -955,6 +955,13 @@ def test_named_route_with_path_prefix
x.send(:page_url))
end

def test_named_route_with_blank_path_prefix
rs.add_named_route :page, 'page', :controller => 'content', :action => 'show_page', :path_prefix => ''
x = setup_for_named_route
assert_equal("http://test.host/page",
x.send(:page_url))
end

def test_named_route_with_nested_controller
rs.add_named_route :users, 'admin/user', :controller => 'admin/user', :action => 'index'
x = setup_for_named_route
Expand Down Expand Up @@ -2130,11 +2137,9 @@ 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"
Expand All @@ -2146,6 +2151,24 @@ def test_namespace_with_path_prefix
Object.send(:remove_const, :Api)
end

def test_namespace_with_blank_path_prefix
Object.const_set(:Api, Module.new { |m| m.const_set(:ProductsController, Class.new) })

set.draw do |map|
map.namespace 'api', :path_prefix => '' do |api|
api.route 'inventory', :controller => "products", :action => 'inventory'
end
end

request.path = "/inventory"
request.env["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"
Expand Down Expand Up @@ -2210,6 +2233,13 @@ def test_generate_with_path_prefix
assert_equal "/my/foo/bar/7?x=y", set.generate(args)
end

def test_generate_with_blank_path_prefix
set.draw { |map| map.connect ':controller/:action/:id', :path_prefix => '' }

args = { :controller => "foo", :action => "bar", :id => "7", :x => "y" }
assert_equal "/foo/bar/7?x=y", set.generate(args)
end

def test_named_routes_are_never_relative_to_modules
set.draw do |map|
map.connect "/connection/manage/:action", :controller => 'connection/manage'
Expand Down

0 comments on commit 90dba00

Please sign in to comment.