aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/concern.rb
diff options
context:
space:
mode:
authorJosep M. Bach <josep.m.bach@gmail.com>2010-08-14 16:52:05 +0200
committerXavier Noria <fxn@hashref.com>2010-08-15 02:22:37 +0200
commitca87d0a395c43eb95f0f744dd71b85cfb76e9545 (patch)
treedfb1149a75b67692e626a1a97b7e4dd167d21dde /activesupport/lib/active_support/concern.rb
parent98818f92b8a61ad70f99dc18f148b3d2f34f2cbe (diff)
downloadrails-ca87d0a395c43eb95f0f744dd71b85cfb76e9545.tar.gz
rails-ca87d0a395c43eb95f0f744dd71b85cfb76e9545.tar.bz2
rails-ca87d0a395c43eb95f0f744dd71b85cfb76e9545.zip
Documentation just before Concern module
Diffstat (limited to 'activesupport/lib/active_support/concern.rb')
-rw-r--r--activesupport/lib/active_support/concern.rb230
1 files changed, 115 insertions, 115 deletions
diff --git a/activesupport/lib/active_support/concern.rb b/activesupport/lib/active_support/concern.rb
index 6781082786..d1e03e596c 100644
--- a/activesupport/lib/active_support/concern.rb
+++ b/activesupport/lib/active_support/concern.rb
@@ -1,119 +1,119 @@
-# A typical module looks like this:
-#
-# module M
-# def self.included(base)
-# base.send(:extend, ClassMethods)
-# base.send(:include, InstanceMethods)
-# scope :foo, :conditions => { :created_at => nil }
-# 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 }
-# 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:
-#
-# 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
-#
-# module Bar
-# def self.included(base)
-# base.send(:enhanced_method)
-# end
-# end
-#
-# class Host
-# include Foo # We need to include this dependency for Bar
-# 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
-#
-# module Bar
-# include Foo
-# def self.included(base)
-# base.send(:enhanced_method)
-# end
-# end
-#
-# class Host
-# 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:
-#
-# require 'active_support/concern'
-#
-# module Foo
-# extend ActiveSupport::Concern
-# included do
-# class_eval do
-# def self.enhanced_method
-# # Do enhanced stuff
-# end
-# end
-# end
-# end
-#
-# module Bar
-# extend ActiveSupport::Concern
-# include Foo
-#
-# included do
-# self.send(:enhanced_method)
-# end
-# end
-#
-# class Host
-# include Bar # Host only needs to care about Bar without needing to know about its dependencies
-# end
-#
module ActiveSupport
+ # A typical module looks like this:
+ #
+ # module M
+ # def self.included(base)
+ # base.send(:extend, ClassMethods)
+ # base.send(:include, InstanceMethods)
+ # scope :foo, :conditions => { :created_at => nil }
+ # 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 }
+ # 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:
+ #
+ # 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
+ #
+ # module Bar
+ # def self.included(base)
+ # base.send(:enhanced_method)
+ # end
+ # end
+ #
+ # class Host
+ # include Foo # We need to include this dependency for Bar
+ # 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
+ #
+ # module Bar
+ # include Foo
+ # def self.included(base)
+ # base.send(:enhanced_method)
+ # end
+ # end
+ #
+ # class Host
+ # 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:
+ #
+ # require 'active_support/concern'
+ #
+ # module Foo
+ # extend ActiveSupport::Concern
+ # included do
+ # class_eval do
+ # def self.enhanced_method
+ # # Do enhanced stuff
+ # end
+ # end
+ # end
+ # end
+ #
+ # module Bar
+ # extend ActiveSupport::Concern
+ # include Foo
+ #
+ # included do
+ # self.send(:enhanced_method)
+ # end
+ # end
+ #
+ # class Host
+ # include Bar # Host only needs to care about Bar without needing to know about its dependencies
+ # end
+ #
module Concern
def self.extended(base)
base.instance_variable_set("@_dependencies", [])