aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/callbacks.rb
diff options
context:
space:
mode:
authorNeeraj Singh <neerajdotname@gmail.com>2010-06-14 15:48:09 -0400
committerNeeraj Singh <neerajdotname@gmail.com>2010-06-14 15:48:09 -0400
commited9a183ea4bfb825d4468100fc6f5ccf3084da59 (patch)
tree2f4c4e564e692344eda2dadac3151db9392b5e22 /activesupport/lib/active_support/callbacks.rb
parentf587dec2c9344949a777f7f1f075c8f95774fffc (diff)
downloadrails-ed9a183ea4bfb825d4468100fc6f5ccf3084da59.tar.gz
rails-ed9a183ea4bfb825d4468100fc6f5ccf3084da59.tar.bz2
rails-ed9a183ea4bfb825d4468100fc6f5ccf3084da59.zip
clearer documentation of how scope applies to ActiveSupport callbacks
Diffstat (limited to 'activesupport/lib/active_support/callbacks.rb')
-rw-r--r--activesupport/lib/active_support/callbacks.rb52
1 files changed, 32 insertions, 20 deletions
diff --git a/activesupport/lib/active_support/callbacks.rb b/activesupport/lib/active_support/callbacks.rb
index 16fdfd04e9..466f6baea8 100644
--- a/activesupport/lib/active_support/callbacks.rb
+++ b/activesupport/lib/active_support/callbacks.rb
@@ -530,28 +530,40 @@ module ActiveSupport
# the given block or an before_filter raises an error. Supply :rescuable => true
# to change this behavior.
#
- # * <tt>:scope</tt> - Show which methods should be executed when a class
+ # * <tt>:scope</tt> - Indicates which methods should be executed when a class
# is given as callback:
#
- # define_callbacks :filters, :scope => [ :kind ]
- #
- # When a class is given:
- #
- # before_filter MyFilter
- #
- # It will call the type of the filter in the given class, which in this
- # case, is "before".
- #
- # If, for instance, you supply the given scope:
- #
- # define_callbacks :validate, :scope => [ :kind, :name ]
- #
- # It will call "#{kind}_#{name}" in the given class. So "before_validate"
- # will be called in the class below:
- #
- # before_validate MyValidation
- #
- # Defaults to :kind.
+ # class Audit
+ # def before(caller)
+ # puts 'Audit: before is called'
+ # end
+ # def before_save(caller)
+ # puts 'Audit: before_save is called'
+ # end
+ # end
+ #
+ # class Account
+ # include ActiveSupport::Callbacks
+ # define_callbacks :save
+ # set_callback :save, :before, Audit.new
+ # def save
+ # run_callbacks :save do
+ # puts 'save in main'
+ # end
+ # end
+ # end
+ #
+ # In the above case if you execute Account.new.save then method "before" of Audit class
+ # will be called. Now change the class "Account" and pass "scope" to method "define_callbacks".
+ #
+ # define_callbacks :save, :scope => [:kind, :name]
+ #
+ # Now if you invoke Account.new.save then method "before_save" of Audit will be called
+ # instead of method "before".
+ #
+ # When you do not pass any scope then the default value of scope ":kind" is implicitly being
+ # passed. In the above case method "before_save" is constructed by calling "#{kind}_#{name}"
+ # in the given class. In this case "kind" is "before" and "name" is "save".
#
def define_callbacks(*callbacks)
config = callbacks.last.is_a?(Hash) ? callbacks.pop : {}