diff --git a/actionpack/lib/action_controller/routing/route_set.rb b/actionpack/lib/action_controller/routing/route_set.rb index 6ba1a5c..5bc13cf 100644 --- a/actionpack/lib/action_controller/routing/route_set.rb +++ b/actionpack/lib/action_controller/routing/route_set.rb @@ -189,7 +189,7 @@ module ActionController end end - attr_accessor :routes, :named_routes + attr_accessor :routes, :named_routes, :configuration_file def initialize self.routes = [] @@ -238,8 +238,8 @@ module ActionController alias reload! load! def reload - if @routes_last_modified && defined?(RAILS_ROOT) - mtime = File.stat("#{RAILS_ROOT}/config/routes.rb").mtime + if @routes_last_modified && configuration_file + mtime = File.stat(configuration_file).mtime # if it hasn't been changed, then just return return if mtime == @routes_last_modified # if it has changed then record the new time and fall to the load! below @@ -249,9 +249,9 @@ module ActionController end def load_routes! - if defined?(RAILS_ROOT) && defined?(::ActionController::Routing::Routes) && self == ::ActionController::Routing::Routes - load File.join("#{RAILS_ROOT}/config/routes.rb") - @routes_last_modified = File.stat("#{RAILS_ROOT}/config/routes.rb").mtime + if configuration_file + load configuration_file + @routes_last_modified = File.stat(configuration_file).mtime else add_route ":controller/:action/:id" end diff --git a/actionpack/test/controller/routing_test.rb b/actionpack/test/controller/routing_test.rb index 5756c05..640afd5 100644 --- a/actionpack/test/controller/routing_test.rb +++ b/actionpack/test/controller/routing_test.rb @@ -2341,11 +2341,13 @@ uses_mocha 'route loading' do def setup routes.instance_variable_set '@routes_last_modified', nil silence_warnings { Object.const_set :RAILS_ROOT, '.' } + ActionController::Routing::Routes.configuration_file = File.join(RAILS_ROOT, 'config', 'routes.rb') @stat = stub_everything end def teardown + ActionController::Routing::Routes.configuration_file = nil Object.send :remove_const, :RAILS_ROOT end @@ -2386,6 +2388,14 @@ uses_mocha 'route loading' do Inflector.inflections { |inflect| inflect.uncountable('equipment') } end + + def test_load_with_configuration + routes.configuration_file = "foobarbaz" + File.expects(:stat).returns(@stat) + routes.expects(:load).with("foobarbaz") + + routes.reload + end private def routes diff --git a/railties/lib/initializer.rb b/railties/lib/initializer.rb index ea61d4e..5054928 100644 --- a/railties/lib/initializer.rb +++ b/railties/lib/initializer.rb @@ -382,6 +382,7 @@ module Rails def initialize_routing return unless configuration.frameworks.include?(:action_controller) ActionController::Routing.controller_paths = configuration.controller_paths + ActionController::Routing::Routes.configuration_file = configuration.routes_configuration_file ActionController::Routing::Routes.reload end @@ -499,6 +500,10 @@ module Rails # The path to the database configuration file to use. (Defaults to # config/database.yml.) attr_accessor :database_configuration_file + + # The path to the routes configuration file to use. (Defaults to + # config/routes.rb.) + attr_accessor :routes_configuration_file # The list of rails framework components that should be loaded. (Defaults # to :active_record, :action_controller, @@ -631,6 +636,7 @@ module Rails self.plugin_locators = default_plugin_locators self.plugin_loader = default_plugin_loader self.database_configuration_file = default_database_configuration_file + self.routes_configuration_file = default_routes_configuration_file self.gems = default_gems for framework in default_frameworks @@ -771,6 +777,10 @@ module Rails File.join(root_path, 'config', 'database.yml') end + def default_routes_configuration_file + File.join(root_path, 'config', 'routes.rb') + end + def default_view_path File.join(root_path, 'app', 'views') end