From bd89f105ec7bb64302c7873f5e88ca695d3839e4 Mon Sep 17 00:00:00 2001 From: James Adam Date: Fri, 1 May 2009 15:21:53 +0100 Subject: [PATCH] Plugin routes should be added *after* the application routes. --- .../lib/action_controller/routing/route_set.rb | 4 ++++ actionpack/test/controller/routing_test.rb | 14 ++++++++++++++ railties/lib/initializer.rb | 2 +- 3 files changed, 19 insertions(+), 1 deletions(-) diff --git a/actionpack/lib/action_controller/routing/route_set.rb b/actionpack/lib/action_controller/routing/route_set.rb index 044ace7..f3f8bf9 100644 --- a/actionpack/lib/action_controller/routing/route_set.rb +++ b/actionpack/lib/action_controller/routing/route_set.rb @@ -249,6 +249,10 @@ module ActionController def add_configuration_file(path) self.configuration_files << path end + + def prepend_configuration_file(path) + self.configuration_files.unshift(path) + end # Deprecated accessor def configuration_file=(path) diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index ef56119..b9d46d3 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -2549,7 +2549,21 @@ class RouteLoadingTest < Test::Unit::TestCase routes.reload end + + def test_prepending_configurations + routes.configuration_files.clear + File.stubs(:stat).returns(@stat) + routing = states(:route_load_order).starts_as('empty') + + routes.add_configuration_file('engines.rb') + routes.prepend_configuration_file('./config/routes.rb') + + routes.expects(:load).with('./config/routes.rb').when(routing.is('empty')).then(routing.is('app-loaded')) + routes.expects(:load).with('engines.rb').when(routing.is('app-loaded')).then(routing.is('engine-loaded')) + routes.reload + end + private def routes ActionController::Routing::Routes diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index 4d34b82..213206d 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -532,7 +532,7 @@ Run `rake gems:install` to install the missing gems. return unless configuration.frameworks.include?(:action_controller) ActionController::Routing.controller_paths += configuration.controller_paths - ActionController::Routing::Routes.add_configuration_file(configuration.routes_configuration_file) + ActionController::Routing::Routes.prepend_configuration_file(configuration.routes_configuration_file) ActionController::Routing::Routes.reload! end -- 1.6.2.2