A silly little state machine.
# File lib/puppet/type/zone.rb, line 11 def initialize @state = {} @sequence = [] @state_aliases = {} @default = nil end
# File lib/puppet/type/zone.rb, line 24 def alias_state(state, salias) @state_aliases[state] = salias end
# File lib/puppet/type/zone.rb, line 46 def cmp?(a,b) index(a) < index(b) end
# File lib/puppet/type/zone.rb, line 32 def index(state) @sequence.index(name(state)) end
The order of calling #insert_state is important
# File lib/puppet/type/zone.rb, line 19 def insert_state(name, transitions) @sequence << name @state[name] = transitions end
# File lib/puppet/type/zone.rb, line 28 def name(n) @state_aliases[n.to_sym] || n.to_sym end
return all states between fs and ss excluding fs
# File lib/puppet/type/zone.rb, line 37 def sequence(fs, ss) fi = index(fs) si= index(ss) (if fi > si then @sequence[si .. fi].map{|i| @state[i]}.reverse else @sequence[fi .. si].map{|i| @state[i]} end)[1..-1] end