class Raft4r::FSM
Public Class Methods
new(&block)
click to toggle source
# File lib/raft4r/fsm.rb, line 27 def initialize &block self.instance_eval(&block) if block_given? end
Public Instance Methods
current_state()
click to toggle source
# File lib/raft4r/fsm.rb, line 82 def current_state @fsm_current end
dump()
click to toggle source
# File lib/raft4r/fsm.rb, line 78 def dump p self end
goto(s)
click to toggle source
# File lib/raft4r/fsm.rb, line 65 def goto s return if s == @current self.instance_eval(¤t.onleave) if current.onleave set_current s self.instance_eval(¤t.onenter) if current.onenter end
init(st)
click to toggle source
# File lib/raft4r/fsm.rb, line 43 def init st @fsm_states = {} @fsm_current = nil @fsm_init = st end
on(s, *arguments)
click to toggle source
# File lib/raft4r/fsm.rb, line 56 def on s, *arguments curr = @fsm_states[@fsm_current] if curr.triggers[s] self.instance_exec(*arguments, &curr.triggers[s]) else STDERR.puts "State: #{@fsm_current}, trigger #{s} not exists" end end
reset()
click to toggle source
# File lib/raft4r/fsm.rb, line 72 def reset raise 'No init state' unless @fsm_init set_current @fsm_init self.instance_eval(¤t.onenter) if current.onenter end
state(s, &block)
click to toggle source
# File lib/raft4r/fsm.rb, line 49 def state s, &block raise 'State already exists' if @fsm_states[s] ss = StateScope.new s ss.instance_eval(&block) @fsm_states[s] = ss end
Private Instance Methods
current()
click to toggle source
# File lib/raft4r/fsm.rb, line 31 def current curr = @fsm_states[@fsm_current] raise "Invalid state #{s}" unless curr curr end
set_current(s)
click to toggle source
# File lib/raft4r/fsm.rb, line 37 def set_current s raise "Invalid new state #{s}" unless @fsm_states[s] @fsm_current = s end