aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/CHANGELOG5
-rw-r--r--activesupport/lib/active_support/dependencies.rb6
-rw-r--r--activesupport/test/autoloading_fixtures/class_folder.rb2
-rw-r--r--activesupport/test/autoloading_fixtures/class_folder/inline_class.rb2
-rw-r--r--activesupport/test/autoloading_fixtures/class_folder/nested_class.rb4
-rw-r--r--activesupport/test/autoloading_fixtures/module_folder/inline_class.rb2
-rw-r--r--activesupport/test/autoloading_fixtures/module_folder/nested_class.rb6
-rw-r--r--activesupport/test/dependencies_test.rb32
8 files changed, 54 insertions, 5 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG
index 48bcd264c5..90b476f667 100644
--- a/activesupport/CHANGELOG
+++ b/activesupport/CHANGELOG
@@ -1,5 +1,10 @@
*SVN*
+* Dependencies can autoload directories of nested classes. [Jeremy Kemper]
+ Example:
+ invoice.rb class Invoice
+ invoice/lineitem.rb class Invoice::Lineitem
+
* Add Deprecation.silence so that Reloadable does not scold itself. [Nicholas Seckar]
* Add debugging logging to Dependencies. Currently can be enabled with Dependencies.log_activity = true; adding to Initializer and documenting is forthcoming. [Nicholas Seckar]
diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb
index 333532ee01..6241a822a4 100644
--- a/activesupport/lib/active_support/dependencies.rb
+++ b/activesupport/lib/active_support/dependencies.rb
@@ -282,7 +282,11 @@ class Class
super
else
begin
- parent.send :const_missing, class_id
+ begin
+ Dependencies.load_missing_constant self, class_id
+ rescue NameError
+ parent.send :const_missing, class_id
+ end
rescue NameError => e
# Make sure that the name we are missing is the one that caused the error
parent_qualified_name = Dependencies.qualified_name_for parent, class_id
diff --git a/activesupport/test/autoloading_fixtures/class_folder.rb b/activesupport/test/autoloading_fixtures/class_folder.rb
new file mode 100644
index 0000000000..42933acf28
--- /dev/null
+++ b/activesupport/test/autoloading_fixtures/class_folder.rb
@@ -0,0 +1,2 @@
+class ClassFolder
+end
diff --git a/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb b/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb
new file mode 100644
index 0000000000..8235e90724
--- /dev/null
+++ b/activesupport/test/autoloading_fixtures/class_folder/inline_class.rb
@@ -0,0 +1,2 @@
+class ClassFolder::InlineClass
+end
diff --git a/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb b/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb
new file mode 100644
index 0000000000..08bed842cf
--- /dev/null
+++ b/activesupport/test/autoloading_fixtures/class_folder/nested_class.rb
@@ -0,0 +1,4 @@
+class ClassFolder
+ class NestedClass
+ end
+end
diff --git a/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb b/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb
new file mode 100644
index 0000000000..ca83437046
--- /dev/null
+++ b/activesupport/test/autoloading_fixtures/module_folder/inline_class.rb
@@ -0,0 +1,2 @@
+class ModuleFolder::InlineClass
+end
diff --git a/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb b/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb
index 39ee0e50d5..fc4076bd0a 100644
--- a/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb
+++ b/activesupport/test/autoloading_fixtures/module_folder/nested_class.rb
@@ -1,2 +1,4 @@
-class ModuleFolder::NestedClass
-end \ No newline at end of file
+module ModuleFolder
+ class NestedClass
+ end
+end
diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb
index fe823a9e52..92f3e63e1a 100644
--- a/activesupport/test/dependencies_test.rb
+++ b/activesupport/test/dependencies_test.rb
@@ -125,20 +125,48 @@ class DependenciesTest < Test::Unit::TestCase
end
end
- def test_directories_should_manifest_as_modules
+ def test_directories_manifest_as_modules_unless_const_defined
with_loading 'autoloading_fixtures' do
assert_kind_of Module, ModuleFolder
Object.send :remove_const, :ModuleFolder
end
end
- def test_nested_class_access
+ def test_module_with_nested_class
with_loading 'autoloading_fixtures' do
assert_kind_of Class, ModuleFolder::NestedClass
Object.send :remove_const, :ModuleFolder
end
end
+ def test_module_with_nested_inline_class
+ with_loading 'autoloading_fixtures' do
+ assert_kind_of Class, ModuleFolder::InlineClass
+ Object.send :remove_const, :ModuleFolder
+ end
+ end
+
+ def test_directories_may_manifest_as_nested_classes
+ with_loading 'autoloading_fixtures' do
+ assert_kind_of Class, ClassFolder
+ Object.send :remove_const, :ClassFolder
+ end
+ end
+
+ def test_class_with_nested_class
+ with_loading 'autoloading_fixtures' do
+ assert_kind_of Class, ClassFolder::NestedClass
+ Object.send :remove_const, :ClassFolder
+ end
+ end
+
+ def test_class_with_nested_inline_class
+ with_loading 'autoloading_fixtures' do
+ assert_kind_of Class, ClassFolder::InlineClass
+ Object.send :remove_const, :ClassFolder
+ end
+ end
+
def test_nested_class_can_access_sibling
with_loading 'autoloading_fixtures' do
sibling = ModuleFolder::NestedClass.class_eval "NestedSibling"