module QueuedStateMachine::ClassMethods

Attributes

initial_state[R]

Public Instance Methods

callbacks() click to toggle source
# File lib/queued_state_machine.rb, line 28
def callbacks
  @callbacks ||= []
end
clean_state(name) click to toggle source
# File lib/queued_state_machine.rb, line 70
def clean_state(name)
  name.to_s
end
clean_state_list(arg) click to toggle source
# File lib/queued_state_machine.rb, line 74
def clean_state_list(arg)
  case
  when arg == nil
    states
  when arg.respond_to?(:to_a)
    list = arg
    list.map! {|name| clean_state(name) }
    list
  else
    name = arg
    [clean_state(name)]
  end
end
inherited(subclass) click to toggle source
# File lib/queued_state_machine.rb, line 13
def inherited(subclass)
  subclass.instance_variable_set("@states", instance_variable_get("@states").dup)
  subclass.instance_variable_set("@initial_state", instance_variable_get("@initial_state"))
  subclass.instance_variable_set("@transitions", instance_variable_get("@transitions").dup)
  subclass.instance_variable_set("@callbacks", instance_variable_get("@callbacks").dup)
end
initial_state=(name) click to toggle source
# File lib/queued_state_machine.rb, line 93
def initial_state=(name)
  raise 'Error: initial state already set' if @initial_state
  @initial_state = name
end
on_transition(from: nil, to: nil, &block) click to toggle source
# File lib/queued_state_machine.rb, line 56
def on_transition(from: nil, to: nil, &block)
  unless block_given?
    'Error: no callback defined'
  end
  from = clean_state_list(from)
  to = clean_state_list(to)
  missing_state = (from + to).find { |state| !states.include?(state) }
  if missing_state
    raise "Error: state #{missing_state} not defined"
  end
  callbacks << {from: from, to: to, callback: block}
  nil
end
state(name, initial: false) click to toggle source
# File lib/queued_state_machine.rb, line 32
def state(name, initial: false)
  unless transitions.empty? && callbacks.empty?
    raise 'Error: all states must be defined before any transitions of callbacks'
  end
  name = clean_state(name)
  self.initial_state = name if initial
  states << name
  nil
end
states() click to toggle source
# File lib/queued_state_machine.rb, line 20
def states
  @states ||= []
end
transition(from: nil, to: nil) click to toggle source
# File lib/queued_state_machine.rb, line 42
def transition(from: nil, to: nil)
  if block_given?
    raise "Error: transitions do not accept blocks, use 'on_transition'"
  end
  from = clean_state_list(from)
  to = clean_state_list(to)
  missing_state = (from + to).find { |state| !states.include?(state) }
  if missing_state
    raise "Error: state #{missing_state} not defined"
  end
  transitions << {from: from, to: to}
  nil
end
transitions() click to toggle source
# File lib/queued_state_machine.rb, line 24
def transitions
  @transitions ||= []
end