class Pastafari::Builders::FsmBuilder
Constants
- VALID_TRANSITIONS
Public Class Methods
new()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 6 def initialize @states = {} @transition_at = :after end
Public Instance Methods
build()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 30 def build validate_states_given validate_initial_state validate_transitions set_initial_state! Pastafari::Fsm.new(@states, @transition_at, @initial_state) end
initial_state(state)
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 26 def initial_state(state) @initial_state = state end
state(name, &block)
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 11 def state(name, &block) builder = Builders::StateBuilder.new(name) builder.instance_eval(&block) state = builder.build @states[state.name] = state end
transition(at)
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 20 def transition(at) validate_transition_at(at) @transition_at = at end
Private Instance Methods
set_initial_state!()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 42 def set_initial_state! @initial_state ||= @states.values.first.name end
validate_initial_state()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 58 def validate_initial_state return unless @initial_state return if @states.key?(@initial_state) raise Pastafari::Errors::InvalidStateError, 'Initial state points to a non-existent state.' end
validate_states_given()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 52 def validate_states_given return unless @states.length.zero? raise Pastafari::Errors::InvalidStateError, 'No states defined.' end
validate_transition_at(at)
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 46 def validate_transition_at(at) return if VALID_TRANSITIONS.include?(at) raise ArgumentError, 'Transition value must be one of :before, :after.' end
validate_transitions()
click to toggle source
# File lib/pastafari/builders/fsm_builder.rb, line 67 def validate_transitions @states.each do |name, state| state.transitions.map(&:next_state).each do |k| next if @states.key? k raise Pastafari::Errors::InvalidStateError, "State #{name} is transitioning to non-existent state #{k}" end end end