class FiniteMachine::Definition

A class responsible for defining standalone state machine

Public Class Methods

add_deferred(deferred) click to toggle source

Add deferred

@param [Proc] deferred

the deferred execution

@return [Array]

@api private

# File lib/finite_machine/definition.rb, line 23
def self.add_deferred(deferred)
  deferreds << deferred
end
deferreds() click to toggle source

The machine deferreds

@return [Array]

@api private

# File lib/finite_machine/definition.rb, line 11
def self.deferreds
  @deferreds ||= []
end
inherited(subclass) click to toggle source

Set deferrerd methods on the subclass

@api private

Calls superclass method
# File lib/finite_machine/definition.rb, line 49
def self.inherited(subclass)
  super

  deferreds.each { |d| subclass.add_deferred(d) }
end
method_missing(method_name, *arguments, &block) click to toggle source

Delay lookup of DSL method

@param [Symbol] method_name

@return [nil]

@api private

# File lib/finite_machine/definition.rb, line 62
def self.method_missing(method_name, *arguments, &block)
  deferred = proc do |name, args, blok, object|
    object.send(name, *args, &blok)
  end
  deferred = deferred.curry(4)[method_name][arguments][block]
  add_deferred(deferred)
end
new(*args) click to toggle source

Instantiate a new Definition

@example

class Engine < FiniteMachine::Definition
  ...
end

engine = Engine.new

@return [FiniteMachine::StateMachine]

@api public

# File lib/finite_machine/definition.rb, line 39
def self.new(*args)
  context = self
  FiniteMachine.new(*args) do
    context.deferreds.each { |d| d.call(self) }
  end
end