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