From 15ab3a98a1b6f9b829060ba974048b33466f6814 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Mon, 23 Nov 2009 20:20:50 -0600 Subject: Find all controllers in memory to use for routing --- actionpack/lib/action_dispatch/routing.rb | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'actionpack/lib/action_dispatch/routing.rb') 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 -- cgit v1.2.3