From 8974dac92e05dcab8ee552a5f40108c6ac25dc36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 26 Jan 2010 00:55:26 +0100 Subject: [PATCH] Ensure root routes inside optional scopes works as expected. --- .../lib/action_dispatch/routing/mapper.rb | 5 +++-- actionpack/test/dispatch/routing_test.rb | 21 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/actionpack/lib/action_dispatch/routing/mapper.rb b/actionpack/lib/action_dispatch/routing/mapper.rb index fcbb70749f..5199984814 100644 --- a/actionpack/lib/action_dispatch/routing/mapper.rb +++ b/actionpack/lib/action_dispatch/routing/mapper.rb @@ -157,10 +157,11 @@ def default_controller end # Invokes Rack::Mount::Utils.normalize path and ensure that - # (:locale) becomes (/:locale) instead of /(:locale). + # (:locale) becomes (/:locale) instead of /(:locale). Except + # for root cases, where the latter is the correct one. def self.normalize_path(path) path = Rack::Mount::Utils.normalize_path(path) - path.sub!(%r{/\(+/?:}, '(/:') + path.sub!(%r{/(\(+)/?:}, '\1/:') unless path =~ %r{^/\(+:.*\)$} path end diff --git a/actionpack/test/dispatch/routing_test.rb b/actionpack/test/dispatch/routing_test.rb index 6dccabdb3f..dfe824fd70 100644 --- a/actionpack/test/dispatch/routing_test.rb +++ b/actionpack/test/dispatch/routing_test.rb @@ -141,19 +141,18 @@ def self.matches?(request) resources :rooms end - scope '(:locale)', :locale => /en|pl/ do - resources :descriptions - end + match '/info' => 'projects#info', :as => 'info' namespace :admin do - scope '(/:locale)', :locale => /en|pl/ do + scope '(:locale)', :locale => /en|pl/ do resources :descriptions end end - match '/info' => 'projects#info', :as => 'info' - - root :to => 'projects#index' + scope '(:locale)', :locale => /en|pl/ do + resources :descriptions + root :to => 'projects#index' + end end end @@ -660,6 +659,14 @@ def test_normalize_namespaced_matches end end + def test_optional_scoped_root + with_test_routes do + assert_equal '/en', root_path("en") + get '/en' + assert_equal 'projects#index', @response.body + end + end + def test_optional_scoped_path with_test_routes do assert_equal '/en/descriptions', descriptions_path("en") -- GitLab