diff options
author | Xavier Noria <fxn@hashref.com> | 2010-08-14 17:04:17 +0200 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2010-08-15 02:22:37 +0200 |
commit | 21bbcfe42cf163f532beff1f7a8ceb5e12f2907b (patch) | |
tree | 18273c884acfe38aa6529220ee8a4d8b81c979bd /activesupport | |
parent | c7adc961868a8a0b83e70fc2be8c60013a20fa1b (diff) | |
download | rails-21bbcfe42cf163f532beff1f7a8ceb5e12f2907b.tar.gz rails-21bbcfe42cf163f532beff1f7a8ceb5e12f2907b.tar.bz2 rails-21bbcfe42cf163f532beff1f7a8ceb5e12f2907b.zip |
reviews commit dcc9d38
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/concern.rb | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/activesupport/lib/active_support/concern.rb b/activesupport/lib/active_support/concern.rb index d1e03e596c..ac94d12e5e 100644 --- a/activesupport/lib/active_support/concern.rb +++ b/activesupport/lib/active_support/concern.rb @@ -3,48 +3,48 @@ module ActiveSupport # # module M # def self.included(base) - # base.send(:extend, ClassMethods) + # base.extend, ClassMethods # base.send(:include, InstanceMethods) - # scope :foo, :conditions => { :created_at => nil } + # scope :disabled, where(:disabled => true) # end # # module ClassMethods - # def cm; puts 'I am a class method'; end + # ... # end # # module InstanceMethods - # def im; puts 'I am an instance method'; end + # ... # end # end # # By using <tt>ActiveSupport::Concern</tt> the above module could instead be written as: - # + # # require 'active_support/concern' # # module M # extend ActiveSupport::Concern # # included do - # scope :foo, :conditions => { :created_at => nil } + # scope :disabled, where(:disabled => true) # end # # module ClassMethods - # def cm; puts 'I am a class method'; end + # ... # end # # module InstanceMethods - # def im; puts 'I am an instance method'; end + # ... # end # end # - # Moreover, it gracefully handles module dependencies. Given a Foo module and a Bar module which depends on the former, we would typically write the following: + # Moreover, it gracefully handles module dependencies. Given a +Foo+ module and a +Bar+ + # module which depends on the former, we would typically write the following: # # module Foo # def self.included(base) - # # Define some :enhanced_method for Host class # base.class_eval do - # def self.enhanced_method - # # Do enhanced stuff + # def self.method_injected_by_foo + # ... # end # end # end @@ -52,7 +52,7 @@ module ActiveSupport # # module Bar # def self.included(base) - # base.send(:enhanced_method) + # base.method_injected_by_foo # end # end # @@ -61,23 +61,13 @@ module ActiveSupport # include Bar # Bar is the module that Host really needs # end # - # But why should Host care about Bar's dependencies, namely Foo? We could try to hide these from Host directly including Foo in Bar: - # - # module Foo - # def self.included(base) - # # Define some :enhanced_method for Host class - # base.class_eval do - # def self.enhanced_method - # # Do enhanced stuff - # end - # end - # end - # end + # But why should +Host+ care about +Bar+'s dependencies, namely +Foo+? We could try to hide + # these from +Host+ directly including +Foo+ in +Bar+: # # module Bar # include Foo # def self.included(base) - # base.send(:enhanced_method) + # base.method_injected_by_foo # end # end # @@ -85,8 +75,8 @@ module ActiveSupport # include Bar # end # - # Unfortunately this won't work, since when Foo is included, its <tt>base</tt> is Bar module, not Host class. - # With <tt>ActiveSupport::Concern</tt>, module dependencies are properly resolved: + # Unfortunately this won't work, since when +Foo+ is included, its <tt>base</tt> is the +Bar+ module, + # not the +Host+ class. With <tt>ActiveSupport::Concern</tt>, module dependencies are properly resolved: # # require 'active_support/concern' # @@ -94,8 +84,8 @@ module ActiveSupport # extend ActiveSupport::Concern # included do # class_eval do - # def self.enhanced_method - # # Do enhanced stuff + # def self.method_injected_by_foo + # ... # end # end # end @@ -106,12 +96,12 @@ module ActiveSupport # include Foo # # included do - # self.send(:enhanced_method) + # self.method_injected_by_foo # end # end # # class Host - # include Bar # Host only needs to care about Bar without needing to know about its dependencies + # include Bar # works, Bar takes care now of its dependencies # end # module Concern |