lib/minimus.rb in minimus-0.1.0 vs lib/minimus.rb in minimus-0.1.1

- old
+ new

@@ -2,17 +2,18 @@ class Minimus TransitionError = Class.new(StandardError) - attr_reader :states, :initial_state + attr_reader :states, :initial_state, :possibilities attr_accessor :current_state def initialize(*states) @states = states @initial_state = states.first @current_state = initial_state + @possibilities = {} end def move(new_state) return false unless move_possible?(new_state) self.current_state = new_state @@ -20,19 +21,30 @@ yield if block_given? end def move!(new_state) unless move_possible?(new_state) - raise TransitionError, %Q{unallowed transition from - #{current_state} to #{new_state}} + raise TransitionError, %(unallowed transition from + #{current_state} to #{new_state}) end self.current_state = new_state yield if block_given? end + def can(state, possible:) + possible_array = Array(possible) + return unless possible_array.all? { |value| states.include?(value) } + + possibilities[state] = possible_array + end + private def move_possible?(new_state) - states[states.index(current_state) + 1] == new_state + if state_possibilities = possibilities[current_state] + state_possibilities.include?(new_state) + else + states[states.index(current_state) + 1] == new_state + end end end