Class: ActiveSupport::Callbacks::CallbackSequence

Inherits:
Object
  • Object
show all
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

Constructor Details

#initialize(&call) ⇒ CallbackSequence


476
477
478
479
480
# File 'lib/active_support/callbacks.rb', line 476

def initialize(&call)
  @call = call
  @before = []
  @after = []
end

Instance Method Details

#after(&after) ⇒ Object


487
488
489
490
# File 'lib/active_support/callbacks.rb', line 487

def after(&after)
  @after.push(after)
  self
end

#around(&around) ⇒ Object


492
493
494
495
496
497
498
# File 'lib/active_support/callbacks.rb', line 492

def around(&around)
  CallbackSequence.new do |*args|
    around.call(*args) {
      self.call(*args)
    }
  end
end

#before(&before) ⇒ Object


482
483
484
485
# File 'lib/active_support/callbacks.rb', line 482

def before(&before)
  @before.unshift(before)
  self
end

#call(*args) ⇒ Object


500
501
502
503
504
505
# File 'lib/active_support/callbacks.rb', line 500

def call(*args)
  @before.each { |b| b.call(*args) }
  value = @call.call(*args)
  @after.each { |a| a.call(*args) }
  value
end