Sha256: 628670a62af49e860558a63bff1491ad9f73baafcb49cecf0882587f557fe464

Contents?: true

Size: 928 Bytes

Versions: 1

Compression:

Stored size: 928 Bytes

Contents

module FSM
  #
  # A State has a name and a list of outgoing transitions.
  # 
  class State
    attr_reader(:name, :transitions)
    
    # name: a symbol which identifies this state
    # options
    #  * :enter : a symbol or string or Proc
    #  * :exit : a symbol or string or Proc
    def initialize(name, options = {})
      @name = name
      @enter = Executable.new options[:enter]
      @exit = Executable.new options[:exit]
      @transitions = {}
    end
    
    # Called when this state is entered
    def enter(target)
      @enter.execute(target, nil)
    end
    # Called when this state is exited
    def exit(target)
      @exit.execute(target, nil)
    end    
    
    # All states that are reachable form this state by one hop
    def to_states
      self.transitions.map { |to_name, transition| transition.to}
    end
    
    def to_s
      "State '#{self.name}' (#{self.object_id})"
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simplificator-fsm-0.1.0 lib/fsm/state.rb