Class: ActiveSupport::Callbacks::CallbackSequence

Inherits:
Object
  • Object
show all
Defined in:
activesupport/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 Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nested = nil, call_template = nil, user_conditions = nil) ⇒ CallbackSequence

Returns a new instance of CallbackSequence.


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

def initialize(nested = nil, call_template = nil, user_conditions = nil)
  @nested = nested
  @call_template = call_template
  @user_conditions = user_conditions

  @before = []
  @after = []
end

Instance Attribute Details

#nestedObject (readonly)

Returns the value of attribute nested


501
502
503
# File 'activesupport/lib/active_support/callbacks.rb', line 501

def nested
  @nested
end

Instance Method Details

#after(&after) ⇒ Object


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

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

#around(call_template, user_conditions) ⇒ Object


493
494
495
# File 'activesupport/lib/active_support/callbacks.rb', line 493

def around(call_template, user_conditions)
  CallbackSequence.new(self, call_template, user_conditions)
end

#before(&before) ⇒ Object


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

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

#expand_call_template(arg, block) ⇒ Object


507
508
509
# File 'activesupport/lib/active_support/callbacks.rb', line 507

def expand_call_template(arg, block)
  @call_template.expand(arg.target, arg.value, block)
end

#final?Boolean

Returns:

  • (Boolean)

503
504
505
# File 'activesupport/lib/active_support/callbacks.rb', line 503

def final?
  !@call_template
end

#invoke_after(arg) ⇒ Object


515
516
517
# File 'activesupport/lib/active_support/callbacks.rb', line 515

def invoke_after(arg)
  @after.each { |a| a.call(arg) }
end

#invoke_before(arg) ⇒ Object


511
512
513
# File 'activesupport/lib/active_support/callbacks.rb', line 511

def invoke_before(arg)
  @before.each { |b| b.call(arg) }
end

#skip?(arg) ⇒ Boolean

Returns:

  • (Boolean)

497
498
499
# File 'activesupport/lib/active_support/callbacks.rb', line 497

def skip?(arg)
  arg.halted || !@user_conditions.all? { |c| c.call(arg.target, arg.value) }
end