Class: ComposableStateMachine::Callbacks

Inherits:
Object
  • Object
show all
Defined in:
lib/composable_state_machine/callbacks.rb

Overview

Manages callbacks for a behavior.

Instance Method Summary collapse

Constructor Details

#initialize(callbacks = {}) ⇒ Callbacks

Parameters:

  • callbacks (Hash<trigger, callback(s)>) (defaults to: {})

    maps triggers to zero or more callbacks.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/composable_state_machine/callbacks.rb', line 8

def initialize(callbacks = {})
  @callbacks = Hash.new { |hash, key| hash[key] = [] }
  callbacks.each_pair do |trigger, proc|
    if proc.respond_to?(:each)
      proc.each do |callback|
        on(trigger, callback)
      end
    else
      on(trigger, proc)
    end
  end
end

Instance Method Details

#call(runner, trigger, *args) ⇒ self

Runs the callbacks for a trigger with a runner.

Runs the callbacks for the :any trigger for every trigger.

Parameters:

  • runner (Object)

    the runner

  • trigger (Object)

    the callback trigger

  • args (Array<Object>)

    parameters to pass to the callbacks’ #call methods.

Returns:

  • (self)

    for chaining



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/composable_state_machine/callbacks.rb', line 42

def call(runner, trigger, *args)
  if trigger == :any
    raise InvalidTrigger.new(':any is not a valid trigger')
  end
  @callbacks[trigger].each do |callback|
    runner.run_state_machine_callback(callback, *args)
  end
  @callbacks[:any].each do |callback|
    runner.run_state_machine_callback(callback, *args)
  end
  self
end

#on(trigger, proc = nil, &block) ⇒ self

Adds a callback for a trigger.

Parameters:

  • trigger (Object)

    the callback trigger

  • proc (Proc, Method, ...) (defaults to: nil)

    an object responding to #call. If non-nil, it will be given precedence to #block

  • block (block)

    an optional block implementing the callback

Returns:

  • (self)

    for chaining



28
29
30
31
# File 'lib/composable_state_machine/callbacks.rb', line 28

def on(trigger, proc = nil, &block)
  @callbacks[trigger] << (proc || block)
  self
end