aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2009-05-07 10:29:22 -0500
committerJoshua Peek <josh@joshpeek.com>2009-05-07 10:29:22 -0500
commit2854535b02bcee3668bda02c76c3105fc24730d3 (patch)
treeb78660942bdc6f532a1109da57ee40d7d31cf603 /activesupport
parent783deae99a4850f597135146b19e7ee4622da94e (diff)
downloadrails-2854535b02bcee3668bda02c76c3105fc24730d3.tar.gz
rails-2854535b02bcee3668bda02c76c3105fc24730d3.tar.bz2
rails-2854535b02bcee3668bda02c76c3105fc24730d3.zip
Make module dependency DSL opt in
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support.rb1
-rw-r--r--activesupport/lib/active_support/core_ext/module.rb1
-rw-r--r--activesupport/lib/active_support/core_ext/module/setup.rb26
-rw-r--r--activesupport/lib/active_support/dependency_module.rb24
-rw-r--r--activesupport/test/dependency_module_test.rb (renamed from activesupport/test/core_ext/module/setup_test.rb)27
5 files changed, 40 insertions, 39 deletions
diff --git a/activesupport/lib/active_support.rb b/activesupport/lib/active_support.rb
index 0879535487..dab017770d 100644
--- a/activesupport/lib/active_support.rb
+++ b/activesupport/lib/active_support.rb
@@ -34,6 +34,7 @@ module ActiveSupport
autoload :Callbacks, 'active_support/callbacks'
autoload :NewCallbacks, 'active_support/new_callbacks'
autoload :ConcurrentHash, 'active_support/concurrent_hash'
+ autoload :DependencyModule, 'active_support/dependency_module'
autoload :Deprecation, 'active_support/deprecation'
autoload :Gzip, 'active_support/gzip'
autoload :Inflector, 'active_support/inflector'
diff --git a/activesupport/lib/active_support/core_ext/module.rb b/activesupport/lib/active_support/core_ext/module.rb
index fee91534e7..215c47b114 100644
--- a/activesupport/lib/active_support/core_ext/module.rb
+++ b/activesupport/lib/active_support/core_ext/module.rb
@@ -9,4 +9,3 @@ require 'active_support/core_ext/module/delegation'
require 'active_support/core_ext/module/loading'
require 'active_support/core_ext/module/model_naming'
require 'active_support/core_ext/module/synchronization'
-require 'active_support/core_ext/module/setup'
diff --git a/activesupport/lib/active_support/core_ext/module/setup.rb b/activesupport/lib/active_support/core_ext/module/setup.rb
deleted file mode 100644
index e6dfd0cf56..0000000000
--- a/activesupport/lib/active_support/core_ext/module/setup.rb
+++ /dev/null
@@ -1,26 +0,0 @@
-class Module
- attr_accessor :_setup_block
- attr_accessor :_dependencies
-
- def setup(&blk)
- @_setup_block = blk
- end
-
- def use(mod)
- return if self < mod
-
- (mod._dependencies || []).each do |dep|
- use dep
- end
- # raise "Circular dependencies" if self < mod
- include mod
- extend mod.const_get("ClassMethods") if mod.const_defined?("ClassMethods")
- class_eval(&mod._setup_block) if mod._setup_block
- end
-
- def depends_on(mod)
- return if self < mod
- @_dependencies ||= []
- @_dependencies << mod
- end
-end \ No newline at end of file
diff --git a/activesupport/lib/active_support/dependency_module.rb b/activesupport/lib/active_support/dependency_module.rb
new file mode 100644
index 0000000000..0e1cc67b53
--- /dev/null
+++ b/activesupport/lib/active_support/dependency_module.rb
@@ -0,0 +1,24 @@
+module ActiveSupport
+ module DependencyModule
+ def setup(&blk)
+ @_setup_block = blk
+ end
+
+ def append_features(base)
+ return if base < self
+ (@_dependencies ||= []).each { |dep| base.send(:include, dep) }
+ super
+ end
+
+ def included(base)
+ base.extend const_get("ClassMethods") if const_defined?("ClassMethods")
+ base.class_eval(&@_setup_block) if instance_variable_defined?("@_setup_block")
+ end
+
+ def depends_on(mod)
+ return if self < mod
+ @_dependencies ||= []
+ @_dependencies << mod
+ end
+ end
+end
diff --git a/activesupport/test/core_ext/module/setup_test.rb b/activesupport/test/dependency_module_test.rb
index 132790f2ff..d611b4056c 100644
--- a/activesupport/test/core_ext/module/setup_test.rb
+++ b/activesupport/test/dependency_module_test.rb
@@ -1,9 +1,10 @@
require 'abstract_unit'
-require 'active_support/core/time'
-require 'active_support/core_ext/module/setup'
+require 'active_support/dependency_module'
-class SetupTest < Test::Unit::TestCase
+class DependencyModuleTest < Test::Unit::TestCase
module Baz
+ extend ActiveSupport::DependencyModule
+
module ClassMethods
def baz
"baz"
@@ -28,6 +29,8 @@ class SetupTest < Test::Unit::TestCase
end
module Bar
+ extend ActiveSupport::DependencyModule
+
depends_on Baz
def bar
@@ -44,31 +47,31 @@ class SetupTest < Test::Unit::TestCase
end
def test_module_is_included_normally
- @klass.use(Baz)
+ @klass.send(:include, Baz)
assert_equal "baz", @klass.new.baz
- assert_equal SetupTest::Baz, @klass.included_modules[0]
+ assert_equal DependencyModuleTest::Baz, @klass.included_modules[0]
- @klass.use(Baz)
+ @klass.send(:include, Baz)
assert_equal "baz", @klass.new.baz
- assert_equal SetupTest::Baz, @klass.included_modules[0]
+ assert_equal DependencyModuleTest::Baz, @klass.included_modules[0]
end
def test_class_methods_are_extended
- @klass.use(Baz)
+ @klass.send(:include, Baz)
assert_equal "baz", @klass.baz
- assert_equal SetupTest::Baz::ClassMethods, (class << @klass; self.included_modules; end)[0]
+ assert_equal DependencyModuleTest::Baz::ClassMethods, (class << @klass; self.included_modules; end)[0]
end
def test_setup_block_is_ran
- @klass.use(Baz)
+ @klass.send(:include, Baz)
assert_equal true, @klass.setup
end
def test_modules_dependencies_are_met
- @klass.use(Bar)
+ @klass.send(:include, Bar)
assert_equal "bar", @klass.new.bar
assert_equal "bar+baz", @klass.new.baz
assert_equal "baz", @klass.baz
- assert_equal [SetupTest::Bar, SetupTest::Baz], @klass.included_modules[0..1]
+ assert_equal [DependencyModuleTest::Bar, DependencyModuleTest::Baz], @klass.included_modules[0..1]
end
end