Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

clearer documentation of how scope applies to ActiveSupport callbacks

  • Loading branch information...
commit ed9a183ea4bfb825d4468100fc6f5ccf3084da59 1 parent f587dec
Neeraj Singh neerajdotname authored
Showing with 32 additions and 20 deletions.
  1. +32 −20 activesupport/lib/active_support/callbacks.rb
52 activesupport/lib/active_support/callbacks.rb
View
@@ -530,28 +530,40 @@ def reset_callbacks(symbol)
# 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 : {}
Please sign in to comment.
Something went wrong with that request. Please try again.