diff options
author | Nicholas Seckar <nseckar@gmail.com> | 2006-12-24 14:53:35 +0000 |
---|---|---|
committer | Nicholas Seckar <nseckar@gmail.com> | 2006-12-24 14:53:35 +0000 |
commit | e2acd16810a597e9fa3acd6277e8371678cea34a (patch) | |
tree | 3967bb3d632fd589bbc4896824ffbb9eb8d8d03a | |
parent | 1e170da30db4be2ecfb83a5690b260a4ecfc19b3 (diff) | |
download | rails-e2acd16810a597e9fa3acd6277e8371678cea34a.tar.gz rails-e2acd16810a597e9fa3acd6277e8371678cea34a.tar.bz2 rails-e2acd16810a597e9fa3acd6277e8371678cea34a.zip |
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
-rw-r--r-- | activesupport/CHANGELOG | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/dependencies.rb | 8 |
2 files changed, 8 insertions, 2 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 4bcf7ef7df..64040371c4 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Update load once paths to prevent nested once constants from being detected and claimed by an external non-once load. [Nicholas Seckar] + * Deprecation: silence warnings when reporting test errors. [Jeremy Kemper] * Hash#slice(*keys) returns a new hash with only the given keys. #slice! replaces the hash with only the given keys. Works with HashWithIndifferentAccess also. [Jeremy Kemper] 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 |