From e2acd16810a597e9fa3acd6277e8371678cea34a Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Sun, 24 Dec 2006 14:53:35 +0000 Subject: Update load once paths to prevent nested once constants from being detected and claimed by an external non-once load. References #6720 git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5782 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/lib/active_support/dependencies.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'activesupport/lib') diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb index b169393bf7..aa5b8d20da 100644 --- a/activesupport/lib/active_support/dependencies.rb +++ b/activesupport/lib/active_support/dependencies.rb @@ -130,7 +130,7 @@ module Dependencies #:nodoc: # Given +path+, a filesystem path to a ruby file, return an array of constant # paths which would cause Dependencies to attempt to load this file. # - def loadable_constants_for_path(path, bases = load_paths - load_once_paths) + def loadable_constants_for_path(path, bases = load_paths) path = $1 if path =~ /\A(.*)\.rb\Z/ expanded_path = File.expand_path(path) @@ -169,6 +169,10 @@ module Dependencies #:nodoc: nil end + def load_once_path?(path) + load_once_paths.any? { |base| path.starts_with? base } + end + # Attempt to autoload the provided module name by searching for a directory # matching the expect path suffix. If found, the module is created and assigned # to +into+'s constants with the name +const_name+. Provided that the directory @@ -200,7 +204,7 @@ module Dependencies #:nodoc: result = load_without_new_constant_marking path end - autoloaded_constants.concat newly_defined_paths + autoloaded_constants.concat newly_defined_paths unless load_once_path?(path) autoloaded_constants.uniq! log "loading #{path} defined #{newly_defined_paths * ', '}" unless newly_defined_paths.empty? return result -- cgit v1.2.3