aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2011-08-24 10:29:16 -0700
committerJosé Valim <jose.valim@gmail.com>2011-08-24 10:29:16 -0700
commit2f88743c30ef3dcc7616a6cf18331b84372172b8 (patch)
tree3f3a0958a76a18fc5aabefeb4ee0f9e5afc8e6f4
parent289540e4ffc1a5619979708e5287a9b71f9ab4e2 (diff)
parente0714ee005a366aa92449fc4f92cf97aa8e2f349 (diff)
downloadrails-2f88743c30ef3dcc7616a6cf18331b84372172b8.tar.gz
rails-2f88743c30ef3dcc7616a6cf18331b84372172b8.tar.bz2
rails-2f88743c30ef3dcc7616a6cf18331b84372172b8.zip
Merge pull request #2675 from jdelStrother/load_once_pathnames_fix
Fix autoload_once_paths when using Pathnames & ruby 1.9
-rw-r--r--activesupport/lib/active_support/dependencies.rb3
-rw-r--r--activesupport/test/dependencies_test.rb18
2 files changed, 20 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb
index 6252e7f7c3..c072a8e646 100644
--- a/activesupport/lib/active_support/dependencies.rb
+++ b/activesupport/lib/active_support/dependencies.rb
@@ -421,7 +421,8 @@ module ActiveSupport #:nodoc:
end
def load_once_path?(path)
- autoload_once_paths.any? { |base| path.starts_with? base }
+ # to_s works around a ruby1.9 issue where #starts_with?(Pathname) will always return false
+ autoload_once_paths.any? { |base| path.starts_with? base.to_s }
end
# Attempt to autoload the provided module name by searching for a directory
diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb
index b0e96731cc..fe8f51e11a 100644
--- a/activesupport/test/dependencies_test.rb
+++ b/activesupport/test/dependencies_test.rb
@@ -520,6 +520,24 @@ class DependenciesTest < Test::Unit::TestCase
ActiveSupport::Dependencies.autoload_once_paths = []
end
+ def test_autoload_once_pathnames_do_not_add_to_autoloaded_constants
+ with_autoloading_fixtures do
+ pathnames = ActiveSupport::Dependencies.autoload_paths.collect{|p| Pathname.new(p)}
+ ActiveSupport::Dependencies.autoload_paths = pathnames
+ ActiveSupport::Dependencies.autoload_once_paths = pathnames
+
+ assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder")
+ assert ! ActiveSupport::Dependencies.autoloaded?("ModuleFolder::NestedClass")
+ assert ! ActiveSupport::Dependencies.autoloaded?(ModuleFolder)
+
+ 1 if ModuleFolder::NestedClass # 1 if to avoid warning
+ assert ! ActiveSupport::Dependencies.autoloaded?(ModuleFolder::NestedClass)
+ end
+ ensure
+ Object.class_eval { remove_const :ModuleFolder }
+ ActiveSupport::Dependencies.autoload_once_paths = []
+ end
+
def test_application_should_special_case_application_controller
with_autoloading_fixtures do
require_dependency 'application'