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