From ed9a183ea4bfb825d4468100fc6f5ccf3084da59 Mon Sep 17 00:00:00 2001 From: Neeraj Singh Date: Mon, 14 Jun 2010 15:48:09 -0400 Subject: [PATCH] clearer documentation of how scope applies to ActiveSupport callbacks --- activesupport/lib/active_support/callbacks.rb | 42 ++++++++++++------- 1 file changed, 27 insertions(+), 15 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. # - # * :scope - Show which methods should be executed when a class + # * :scope - Indicates which methods should be executed when a class # is given as callback: # - # define_callbacks :filters, :scope => [ :kind ] + # class Audit + # def before(caller) + # puts 'Audit: before is called' + # end + # def before_save(caller) + # puts 'Audit: before_save is called' + # end + # end # - # When a class is given: + # 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 # - # before_filter MyFilter + # 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". # - # It will call the type of the filter in the given class, which in this - # case, is "before". + # define_callbacks :save, :scope => [:kind, :name] # - # If, for instance, you supply the given scope: + # Now if you invoke Account.new.save then method "before_save" of Audit will be called + # instead of method "before". # - # 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. + # 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 : {}