Add controller_paths variable to Routing; Assign Routing.controller_paths from initializer; fix script/about and rails info controller.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4762 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Nicholas Seckar 2006-08-15 01:28:06 +00:00
parent 461dce13ae
commit 5baf7462c7
5 changed files with 28 additions and 19 deletions

@ -1,9 +1,12 @@
*SVN*
* Add controller_paths variable to Routing. [Nicholas Seckar]
* Fix assert_redirected_to issue with named routes for module controllers. [Rick Olson]
* Tweak RoutingError message to show option diffs, not just missing named route significant keys. [Rick Olson]
>>>>>>> .r4761
* Invoke method_missing directly on hidden actions. Closes #3030. [Nicholas Seckar]
* Require Tempfile explicitly for TestUploadedFile due to changes in class auto loading. [Rick Olson]

@ -50,6 +50,10 @@ module ActionController
module Routing
SEPARATORS = %w( / ; . , ? )
# The root paths which may contain controller files
mattr_accessor :controller_paths
self.controller_paths = []
class << self
def with_controllers(names)
use_controllers! names
@ -58,7 +62,7 @@ def with_controllers(names)
use_controllers! nil
end
def normalize_paths(paths = $LOAD_PATH)
def normalize_paths(paths)
# do the hokey-pokey of path normalization...
paths = paths.collect do |path|
path = path.
@ -80,7 +84,7 @@ def possible_controllers
unless @possible_controllers
@possible_controllers = []
paths = $LOAD_PATH.select { |path| File.directory?(path) && path != "." }
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|
@ -88,7 +92,6 @@ def possible_controllers
next if seen_paths[path.gsub(%r{^\.[/\\]}, "")]
controller_name = path[(load_path.length + 1)..-1]
next unless path_may_be_controller?(controller_name)
controller_name.gsub!(/_controller\.rb\Z/, '')
@possible_controllers << controller_name
@ -101,10 +104,6 @@ def possible_controllers
@possible_controllers
end
def path_may_be_controller?(path)
path !~ /(?:rails\/.*\/(?:examples|test))|(?:actionpack\/lib\/action_controller.rb$)|(?:app\/controllers)/o
end
def use_controllers!(controller_names)
@possible_controllers = controller_names
end

@ -1514,21 +1514,19 @@ def test_named_routes_are_never_relative_to_modules
class RoutingTest < Test::Unit::TestCase
def test_possible_controllers
true_load_paths = $LOAD_PATH.dup
true_controller_paths = ActionController::Routing.controller_paths
ActionController::Routing.use_controllers! nil
Object.send(:const_set, :RAILS_ROOT, File.dirname(__FILE__) + '/controller_fixtures')
$LOAD_PATH.clear
$LOAD_PATH.concat [
ActionController::Routing.controller_paths = [
RAILS_ROOT, RAILS_ROOT + '/app/controllers', RAILS_ROOT + '/vendor/plugins/bad_plugin/lib'
]
assert_equal ["admin/user", "plugin", "user"], ActionController::Routing.possible_controllers.sort
ensure
if true_load_paths
$LOAD_PATH.clear
$LOAD_PATH.concat true_load_paths
if true_controller_paths
ActionController::Routing.controller_paths = true_controller_paths
end
Object.send(:remove_const, :RAILS_ROOT) rescue nil
end

@ -1,5 +1,7 @@
*SVN*
* Assign Routing.controller_paths; fix script/about and rails info controller. [Nicholas Seckar]
* Don't warn dispatcher of Reloadable deprecations. [Nicholas Seckar]
* Rearrange application resetting and preparation, fix bug with leaking subclasses hash in ActiveRecord::Base [Rick Olson]

@ -150,8 +150,6 @@ def require_frameworks
# Add the load paths used by support functions such as the info controller
def add_support_load_paths
builtins = File.join(File.dirname(File.dirname(__FILE__)), 'builtin', '*')
$LOAD_PATH.concat(Dir[builtins])
end
# Loads all plugins in <tt>config.plugin_paths</tt>. <tt>plugin_paths</tt>
@ -176,7 +174,7 @@ def load_environment
silence_warnings do
config = configuration
constants = self.class.constants
eval(IO.read(configuration.environment_path), binding)
eval(IO.read(configuration.environment_path), binding, configuration.environment_path)
(self.class.constants - constants).each do |const|
Object.const_set(const, self.class.const_get(const))
end
@ -251,6 +249,7 @@ def initialize_framework_views
# loading module used to lazily load controllers (Configuration#controller_paths).
def initialize_routing
return unless configuration.frameworks.include?(:action_controller)
ActionController::Routing.controller_paths = configuration.controller_paths
ActionController::Routing::Routes.reload
end
@ -511,6 +510,11 @@ def to_prepare(&callback)
Dispatcher.to_prepare(&callback)
end
def builtin_directories
# Include builtins only in the development environment.
(environment == 'development') ? Dir["#{RAILTIES_PATH}/builtin/*/"] : []
end
private
def root_path
::RAILS_ROOT
@ -589,6 +593,7 @@ def default_autoload_paths
).map { |dir| "#{root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
paths.concat Dir["#{root_path}/vendor/plugins/*/lib/"]
paths.concat builtin_directories
end
def default_log_path
@ -608,7 +613,9 @@ def default_view_path
end
def default_controller_paths
[ File.join(root_path, 'app', 'controllers'), File.join(root_path, 'components'), File.join(RAILTIES_PATH, 'builtin', 'controllers') ]
paths = [ File.join(root_path, 'app', 'controllers'), File.join(root_path, 'components') ]
paths.concat builtin_directories
paths
end
def default_dependency_mechanism