Class: ActiveSupport::Callbacks::CallbackSequence
- Defined in:
- lib/active_support/callbacks.rb
Overview
Execute before and after filters in a sequence instead of chaining them with nested lambda calls, see: github.com/rails/rails/issues/18011
Instance Method Summary collapse
- #after(&after) ⇒ Object
- #around(&around) ⇒ Object
- #before(&before) ⇒ Object
- #call(*args) ⇒ Object
-
#initialize(&call) ⇒ CallbackSequence
constructor
A new instance of CallbackSequence.
Constructor Details
#initialize(&call) ⇒ CallbackSequence
Returns a new instance of CallbackSequence.
479 480 481 482 483 |
# File 'lib/active_support/callbacks.rb', line 479 def initialize(&call) @call = call @before = [] @after = [] end |
Instance Method Details
#after(&after) ⇒ Object
490 491 492 493 |
# File 'lib/active_support/callbacks.rb', line 490 def after(&after) @after.push(after) self end |
#around(&around) ⇒ Object
495 496 497 498 499 500 501 |
# File 'lib/active_support/callbacks.rb', line 495 def around(&around) CallbackSequence.new do |*args| around.call(*args) { self.call(*args) } end end |
#before(&before) ⇒ Object
485 486 487 488 |
# File 'lib/active_support/callbacks.rb', line 485 def before(&before) @before.unshift(before) self end |
#call(*args) ⇒ Object
503 504 505 506 507 508 |
# File 'lib/active_support/callbacks.rb', line 503 def call(*args) @before.each { |b| b.call(*args) } value = @call.call(*args) @after.each { |a| a.call(*args) } value end |