From 93659978d50cd95936f81f38a57028cc68a235ee Mon Sep 17 00:00:00 2001 From: Nicholas Seckar Date: Wed, 6 Sep 2006 20:31:28 +0000 Subject: [PATCH] Fix loadable_constants_for_path to handle load paths that do not end with a slash. git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5053 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/CHANGELOG | 2 ++ activesupport/lib/active_support/dependencies.rb | 15 +++++++-------- activesupport/test/dependencies_test.rb | 7 +++++++ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index 54f9b4e4cc..33961ce1c7 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Fix loadable_constants_for_path to handle load paths that do not end with a slash. [Nicholas Seckar] + * Fix logic error in determining what was loaded by a given file. Closes #6039. [Nicholas Seckar] * Equate Kernel.const_missing with Object.const_missing. Fixes #5988. [Nicholas Seckar] diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb index 1b027aa75b..4a4861220e 100644 --- a/activesupport/lib/active_support/dependencies.rb +++ b/activesupport/lib/active_support/dependencies.rb @@ -125,19 +125,18 @@ def loadable_constants_for_path(path, bases = load_paths - load_once_paths) expanded_path = File.expand_path(path) bases.collect do |root| - expanded_root = File.expand_path root - next unless expanded_path.starts_with? expanded_root + expanded_root = File.expand_path(root) + next unless %r{\A#{Regexp.escape(expanded_root)}(/|\\)} =~ expanded_path nesting = expanded_path[(expanded_root.size)..-1] nesting = nesting[1..-1] if nesting && nesting[0] == ?/ next if nesting.blank? - names = [nesting.camelize] - - # Special case: application.rb might define ApplicationControlller. - names << 'ApplicationController' if nesting == 'application' - - names + [ + nesting.camelize, + # Special case: application.rb might define ApplicationControlller. + ('ApplicationController' if nesting == 'application') + ] end.flatten.compact.uniq end diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb index fcd2889ac2..c1e95f51a9 100644 --- a/activesupport/test/dependencies_test.rb +++ b/activesupport/test/dependencies_test.rb @@ -250,6 +250,13 @@ def test_loadable_constants_for_path_should_uniq_results end end + def test_loadable_constants_with_load_path_without_trailing_slash + path = File.dirname(__FILE__) + '/autoloading_fixtures/class_folder/inline_class.rb' + with_loading 'autoloading_fixtures/class/' do + assert_equal [], Dependencies.loadable_constants_for_path(path) + end + end + def test_qualified_const_defined assert Dependencies.qualified_const_defined?("Object") assert Dependencies.qualified_const_defined?("::Object") -- GitLab