sonic-pi
https://github.com/sonic-pi-net/sonic-pi
C++
Code. Music. Live.
ActiveSupport::Callbacks::ClassMethods#define_callbacks
Define sets of events in the object life cycle that support callbacks.
define_callbacks :validate
define_callbacks :initialize, :save, :destroy
===== Options
* <tt>:terminator</tt> - Determines when a before filter will halt the
callback chain, preventing following callbacks from being called and
the event from being triggered. This should be a lambda to be executed.
The current object and the return result of the callback will be called
with the lambda.
define_callbacks :validate, terminator: ->(target, result) { result == false }
In this example, if any before validate callbacks returns +false+,
other callbacks are not executed. Defaults to +false+, meaning no value
halts the chain.
* <tt>:skip_after_callbacks_if_terminated</tt> - Determines if after
callbacks should be terminated by the <tt>:terminator</tt> option. By
default after callbacks executed no matter if callback chain was
terminated or not. Option makes sense only when <tt>:terminator</tt>
option is specified.
* <tt>:scope</tt> - Indicates which methods should be executed when an
object is used as a callback.
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 whenever you save an account the method
<tt>Audit#before</tt> will be called. On the other hand
define_callbacks :save, scope: [:kind, :name]
would trigger <tt>Audit#before_save</tt> instead. That's constructed
by calling <tt>#{kind}_#{name}</tt> on the given instance. In this
case "kind" is "before" and "name" is "save". In this context +:kind+
and +:name+ have special meanings: +:kind+ refers to the kind of
callback (before/after/around) and +:name+ refers to the method on
which callbacks are being defined.
A declaration like
define_callbacks :save, scope: [:name]
would call <tt>Audit#save</tt>.Edit
git clone [email protected]:sonic-pi-net/sonic-pi.git
cd sonic-pi
open app/server/ruby/vendor/activesupport-7.0.6/lib/active_support/callbacks.rb
Contribute
# Make a new branchgit checkout -b -your-name--update-docs-ActiveSupport--Callbacks--ClassMethods-define_callbacks-for-pr
# Commit to gitgit add app/server/ruby/vendor/activesupport-7.0.6/lib/active_support/callbacks.rbgit commit -m "better docs for ActiveSupport::Callbacks::ClassMethods#define_callbacks"
# Open pull requestgem install hub # on a mac you can `brew install hub`
hub fork
git push <your name> -your-name--update-docs-ActiveSupport--Callbacks--ClassMethods-define_callbacks-for-pr
hub pull-request
# Celebrate!