Sha256: 623db1532d8229d55e30dd3db34eb46a00d60b7269b4ac02be57e71b175d4cbe

Contents?: true

Size: 588 Bytes

Versions: 1

Compression:

Stored size: 588 Bytes

Contents

# frozen_string_literal: true

module FsmEngine
  # finite state machine
  class Fsm
    attr_accessor :cur_rule, :rules

    def initialize(rules)
      @rules = {}
      @history = []
      rules.each do |rule|
        self.rules[rule.cur_condition] = rule
      end
      @cur_rule = rules.first
    end

    def start(condition)
      results = []

      while (self.cur_rule = rules[condition])
        result = cur_rule.action.call
        results.push({ condition: condition, result: result })
        condition = cur_rule.next_condition
      end

      results
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fsm_engine-0.1.0 lib/fsm_engine/fsm.rb