diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-05-28 11:35:36 -0500 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-05-28 11:35:36 -0500 |
commit | 4e50a35fa243f6cf7ad567774a9f7c1cb87a1653 (patch) | |
tree | 6bfb95c899c61b10406a03f8e9a6211b93fecd6b /activesupport | |
parent | de203245afd2bbf7f93f3241fcf3a71a88101d47 (diff) | |
download | rails-4e50a35fa243f6cf7ad567774a9f7c1cb87a1653.tar.gz rails-4e50a35fa243f6cf7ad567774a9f7c1cb87a1653.tar.bz2 rails-4e50a35fa243f6cf7ad567774a9f7c1cb87a1653.zip |
Break up DependencyModule's dual function of providing a "depend_on" DSL and "included" block DSL into separate modules. But, unify both approaches under AS::Concern.
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/autoload.rb | 3 | ||||
-rw-r--r-- | activesupport/lib/active_support/concern.rb | 22 | ||||
-rw-r--r-- | activesupport/lib/active_support/dependency_module.rb | 12 | ||||
-rw-r--r-- | activesupport/test/concern_test.rb (renamed from activesupport/test/dependency_module_test.rb) | 20 |
4 files changed, 35 insertions, 22 deletions
diff --git a/activesupport/lib/active_support/autoload.rb b/activesupport/lib/active_support/autoload.rb index ed229d1c5f..75706855d6 100644 --- a/activesupport/lib/active_support/autoload.rb +++ b/activesupport/lib/active_support/autoload.rb @@ -5,7 +5,7 @@ module ActiveSupport autoload :BufferedLogger, 'active_support/buffered_logger' autoload :Cache, 'active_support/cache' autoload :Callbacks, 'active_support/callbacks' - autoload :NewCallbacks, 'active_support/new_callbacks' + autoload :Concern, 'active_support/concern' autoload :ConcurrentHash, 'active_support/concurrent_hash' autoload :DependencyModule, 'active_support/dependency_module' autoload :Deprecation, 'active_support/deprecation' @@ -15,6 +15,7 @@ module ActiveSupport autoload :MessageEncryptor, 'active_support/message_encryptor' autoload :MessageVerifier, 'active_support/message_verifier' autoload :Multibyte, 'active_support/multibyte' + autoload :NewCallbacks, 'active_support/new_callbacks' autoload :OptionMerger, 'active_support/option_merger' autoload :OrderedHash, 'active_support/ordered_hash' autoload :OrderedOptions, 'active_support/ordered_options' diff --git a/activesupport/lib/active_support/concern.rb b/activesupport/lib/active_support/concern.rb new file mode 100644 index 0000000000..154f8807f7 --- /dev/null +++ b/activesupport/lib/active_support/concern.rb @@ -0,0 +1,22 @@ +require 'active_support/dependency_module' + +module ActiveSupport + module Concern + include DependencyModule + + def append_features(base) + if super + base.extend const_get("ClassMethods") if const_defined?("ClassMethods") + base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block") + end + end + + def included(base = nil, &block) + if base.nil? + @_included_block = block + else + super + end + end + end +end diff --git a/activesupport/lib/active_support/dependency_module.rb b/activesupport/lib/active_support/dependency_module.rb index 9872b9654b..6847c0f86a 100644 --- a/activesupport/lib/active_support/dependency_module.rb +++ b/activesupport/lib/active_support/dependency_module.rb @@ -1,19 +1,9 @@ module ActiveSupport module DependencyModule def append_features(base) - return if base < self + return false if base < self (@_dependencies ||= []).each { |dep| base.send(:include, dep) } super - base.extend const_get("ClassMethods") if const_defined?("ClassMethods") - base.class_eval(&@_included_block) if instance_variable_defined?("@_included_block") - end - - def included(base = nil, &block) - if base.nil? - @_included_block = block - else - super - end end def depends_on(*mods) diff --git a/activesupport/test/dependency_module_test.rb b/activesupport/test/concern_test.rb index be7db0fa7b..22f7ec2064 100644 --- a/activesupport/test/dependency_module_test.rb +++ b/activesupport/test/concern_test.rb @@ -1,9 +1,9 @@ require 'abstract_unit' -require 'active_support/dependency_module' +require 'active_support/concern' -class DependencyModuleTest < Test::Unit::TestCase +class ConcernTest < Test::Unit::TestCase module Baz - extend ActiveSupport::DependencyModule + extend ActiveSupport::Concern module ClassMethods def baz @@ -29,7 +29,7 @@ class DependencyModuleTest < Test::Unit::TestCase end module Bar - extend ActiveSupport::DependencyModule + extend ActiveSupport::Concern depends_on Baz @@ -43,7 +43,7 @@ class DependencyModuleTest < Test::Unit::TestCase end module Foo - extend ActiveSupport::DependencyModule + extend ActiveSupport::Concern depends_on Bar, Baz end @@ -55,17 +55,17 @@ class DependencyModuleTest < Test::Unit::TestCase def test_module_is_included_normally @klass.send(:include, Baz) assert_equal "baz", @klass.new.baz - assert_equal DependencyModuleTest::Baz, @klass.included_modules[0] + assert_equal ConcernTest::Baz, @klass.included_modules[0] @klass.send(:include, Baz) assert_equal "baz", @klass.new.baz - assert_equal DependencyModuleTest::Baz, @klass.included_modules[0] + assert_equal ConcernTest::Baz, @klass.included_modules[0] end def test_class_methods_are_extended @klass.send(:include, Baz) assert_equal "baz", @klass.baz - assert_equal DependencyModuleTest::Baz::ClassMethods, (class << @klass; self.included_modules; end)[0] + assert_equal ConcernTest::Baz::ClassMethods, (class << @klass; self.included_modules; end)[0] end def test_included_block_is_ran @@ -78,11 +78,11 @@ class DependencyModuleTest < Test::Unit::TestCase assert_equal "bar", @klass.new.bar assert_equal "bar+baz", @klass.new.baz assert_equal "baz", @klass.baz - assert_equal [DependencyModuleTest::Bar, DependencyModuleTest::Baz], @klass.included_modules[0..1] + assert_equal [ConcernTest::Bar, ConcernTest::Baz], @klass.included_modules[0..1] end def test_depends_on_with_multiple_modules @klass.send(:include, Foo) - assert_equal [DependencyModuleTest::Foo, DependencyModuleTest::Bar, DependencyModuleTest::Baz], @klass.included_modules[0..2] + assert_equal [ConcernTest::Foo, ConcernTest::Bar, ConcernTest::Baz], @klass.included_modules[0..2] end end |