class FiniteMachine::EventDefinition

A class responsible for defining event methods on state machine

Used to add event definitions from {TransitionBuilder} to the {StateMachine} to obtain convenience helpers.

@api private

Attributes

machine[R]

The current state machine

Public Class Methods

new(machine) click to toggle source

Initialize an EventDefinition

@param [StateMachine] machine

@api private

# File lib/finite_machine/event_definition.rb, line 19
def initialize(machine)
  @machine = machine
end

Public Instance Methods

apply(event_name, silent = false) click to toggle source

Define transition event names as state machine events

@param [Symbol] event_name

the event name for which definition is created

@return [nil]

@api public

# File lib/finite_machine/event_definition.rb, line 31
def apply(event_name, silent = false)
  define_event_transition(event_name, silent)
  define_event_bang(event_name, silent)
end

Private Instance Methods

define_event_bang(event_name, silent) click to toggle source

Define event that skips validations and callbacks

@param [Symbol] event_name

the event name

@param [Boolean] silent

if true don't trigger callbacks, otherwise do

@return [nil]

@api private

# File lib/finite_machine/event_definition.rb, line 67
def define_event_bang(event_name, silent)
  machine.send(:define_singleton_method, "#{event_name}!") do |*data, &block|
    method = silent ? :transition! : :trigger!
    machine.public_send(method, event_name, *data, &block)
  end
end
define_event_transition(event_name, silent) click to toggle source

Define transition event

@param [Symbol] event_name

the event name

@param [Boolean] silent

if true don't trigger callbacks, otherwise do

@return [nil]

@api private

# File lib/finite_machine/event_definition.rb, line 49
def define_event_transition(event_name, silent)
  machine.send(:define_singleton_method, event_name) do |*data, &block|
    method = silent ? :transition : :trigger
    machine.public_send(method, event_name, *data, &block)
  end
end