Sha256: 5ee1b55bdaf82dfe4524382fd048b03df4a44a98358df3fe3cf33dbc7dcc6eb3
Contents?: true
Size: 1.04 KB
Versions: 1
Compression:
Stored size: 1.04 KB
Contents
# Finite State Machine # # Usage: # # machine = MicroMachine.new(:new) # Initial state. # # machine.transitions_for[:confirm] = { :new => :confirmed } # machine.transitions_for[:ignore] = { :new => :ignored } # machine.transitions_for[:reset] = { :confirmed => :new, :ignored => :new } # # machine.trigger(:confirm) #=> true # machine.trigger(:ignore) #=> false # machine.trigger(:reset) #=> true # machine.trigger(:ignore) #=> true # # It also handles callbacks that are executed when entering a different state. # # machine.on(:confirmed) do # puts "Confirmed" # end class MicroMachine attr :transitions_for attr :state def initialize initial_state @state = initial_state @transitions_for = Hash.new @callbacks = Hash.new { |hash, key| hash[key] = [] } end def on key, &block @callbacks[key] << block end def trigger event if transitions_for[event][@state] @state = transitions_for[event][@state] @callbacks[@state].each { |callback| callback.call } true end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
soveran-micromachine-0.0.6 | lib/micromachine.rb |