class Pastafari::Fsm
Attributes
current_state[R]
states[R]
transition_at[R]
Public Class Methods
build(&block)
click to toggle source
# File lib/pastafari/fsm.rb, line 5 def self.build(&block) raise ArgumentError unless block builder = Builders::FsmBuilder.new builder.instance_eval(&block) builder.build end
new(states, transition_at, initial_state)
click to toggle source
# File lib/pastafari/fsm.rb, line 22 def initialize(states, transition_at, initial_state) @transition_at = transition_at @states = states @current_state = initial_state || states.first end
Public Instance Methods
run(input)
click to toggle source
# File lib/pastafari/fsm.rb, line 14 def run(input) Array(input).map { |value| process(value) } end
Private Instance Methods
process(input)
click to toggle source
# File lib/pastafari/fsm.rb, line 28 def process(input) transition!(input) if transition_at == :before output = states[current_state].process(input) transition!(input) if transition_at == :after output end
transition!(input)
click to toggle source
# File lib/pastafari/fsm.rb, line 38 def transition!(input) new_state = states[current_state].evaluate_transitions(input) @current_state = new_state if new_state end