module Statum::ClassMethods

Public Instance Methods

state_machines() click to toggle source

Returns defined state machines

@return [Array<Statum::Machine>]

# File lib/statum/class_methods.rb, line 18
def state_machines
  instance_variable_get(STATE_MACHINES_VARIABLE) || []
end
statum(field, options = {}, &block) click to toggle source

Define new state machine

@param [Symbol] field Field to store state @param [Hash] options Options @option options [Symbol] initial Initial value @param [Block] block Bloc with DSL

# File lib/statum/class_methods.rb, line 9
def statum(field, options = {}, &block)
  definer = Statum::StateDefiner.new(self, field, options)
  definer.instance_eval(&block) if block_given?
  add_machine(definer.state_machine)
end

Private Instance Methods

add_machine(machine) click to toggle source

Add new state machine

@param [Statum::Machine] machine New state machine @raise Statum::ExistingMachineError

# File lib/statum/class_methods.rb, line 28
def add_machine(machine)
  if state_machines.any? { |m| m.name == machine.name }
    raise Statum::ExistingMachineError, "State machine for #{machine.name} already exists"
  end
  instance_variable_set(STATE_MACHINES_VARIABLE, state_machines + [machine])
end