diff options
-rw-r--r-- | actionpack/lib/action_dispatch/routing.rb | 19 | ||||
-rw-r--r-- | actionpack/lib/action_dispatch/routing/route_set.rb | 4 | ||||
-rw-r--r-- | actionpack/test/abstract_unit.rb | 12 | ||||
-rw-r--r-- | railties/test/rails_info_controller_test.rb | 5 |
4 files changed, 15 insertions, 25 deletions
diff --git a/actionpack/lib/action_dispatch/routing.rb b/actionpack/lib/action_dispatch/routing.rb index 4bb7713c98..b43b77fecb 100644 --- a/actionpack/lib/action_dispatch/routing.rb +++ b/actionpack/lib/action_dispatch/routing.rb @@ -280,6 +280,10 @@ module ActionDispatch Regexp.union(*possible_controllers.collect { |n| Regexp.escape(n) }) end + def clear_controller_cache! + @possible_controllers = nil + end + # Returns an array of paths, cleaned of double-slashes and relative path references. # * "\\\" and "//" become "\\" or "/". # * "/foo/bar/../config" becomes "/foo/config". @@ -307,8 +311,15 @@ module ActionDispatch unless @possible_controllers @possible_controllers = [] - paths = controller_paths.select { |path| File.directory?(path) && path != "." } + # Find any controller classes already in memory + ActionController::Base.subclasses.each do |klass| + controller_name = klass.underscore + controller_name.gsub!(/_controller\Z/, '') + @possible_controllers << controller_name + end + # Find controllers in controllers/ directory + paths = controller_paths.select { |path| File.directory?(path) && path != "." } seen_paths = Hash.new {|h, k| h[k] = true; false} normalize_paths(paths).each do |load_path| Dir["#{load_path}/**/*_controller.rb"].collect do |path| @@ -326,12 +337,6 @@ module ActionDispatch end @possible_controllers end - - # Replaces the internal list of controllers available to ActionController::Routing with the passed argument. - # ActionController::Routing.use_controllers!([ "posts", "comments", "admin/comments" ]) - def use_controllers!(controller_names) - @possible_controllers = controller_names - end end end end diff --git a/actionpack/lib/action_dispatch/routing/route_set.rb b/actionpack/lib/action_dispatch/routing/route_set.rb index c15aaceb5b..79e15edeaa 100644 --- a/actionpack/lib/action_dispatch/routing/route_set.rb +++ b/actionpack/lib/action_dispatch/routing/route_set.rb @@ -246,7 +246,9 @@ module ActionDispatch end def load! - Routing.use_controllers!(nil) # Clear the controller cache so we may discover new ones + # Clear the controller cache so we may discover new ones + Routing.clear_controller_cache! + load_routes! end diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb index 775cfc82bf..9d055da4b9 100644 --- a/actionpack/test/abstract_unit.rb +++ b/actionpack/test/abstract_unit.rb @@ -191,20 +191,8 @@ class ::ApplicationController < ActionController::Base end module ActionController - module Routing - def self.possible_controllers - @@possible_controllers ||= [] - end - end - class Base include ActionController::Testing - - def self.inherited(klass) - name = klass.name.underscore.sub(/_controller$/, '') - ActionController::Routing.possible_controllers << name unless name.blank? - super - end end Base.view_paths = FIXTURE_LOAD_PATH diff --git a/railties/test/rails_info_controller_test.rb b/railties/test/rails_info_controller_test.rb index a0484c0868..39f23fa0be 100644 --- a/railties/test/rails_info_controller_test.rb +++ b/railties/test/rails_info_controller_test.rb @@ -14,17 +14,12 @@ class InfoControllerTest < ActionController::TestCase tests Rails::InfoController def setup - ActionController::Routing.use_controllers!(['rails/info']) ActionController::Routing::Routes.draw do |map| map.connect ':controller/:action/:id' end @controller.stubs(:consider_all_requests_local => false, :local_request? => true) end - def teardown - ActionController::Routing.use_controllers! nil - end - test "info controller does not allow remote requests" do @controller.stubs(:consider_all_requests_local => false, :local_request? => false) get :properties |