class TransitionRules
def initialize
@valid_transitions = [] of {Symbol, Symbol}
end
def add_rules_for_state(from_state, to_states)
to_states.each do |to_state|
@valid_transitions << {from_state, to_state}
end
end
def valid_transition?(from_state, to_state)
@valid_transitions.includes?({from_state, to_state})
end
end
class StateMachine
def initialize(i_state : Symbol, rules : TransitionRules)
@state = i_state
@rules = rules
end
def transition_to(new_state)
return unless @rules.valid_transition?(@state, new_state)
@state = new_state
end
def in_state?(state)
@state == state
end
end