class Jsm::States

Jsm::States job is to collect all states

Attributes

list[R]

Public Class Methods

new() click to toggle source
# File lib/jsm/states.rb, line 6
def initialize
  @list = []
end

Public Instance Methods

add_state(state_name, params = {}) click to toggle source

register new state into the list @param state_name @param params: allowed params is `initial`(boolean value, default is false)

# File lib/jsm/states.rb, line 13
def add_state(state_name, params = {})
  initial = params.fetch(:initial) { false }
  if !state_unique?(state_name)
    raise Jsm::NotUniqueStateError, "state #{state_name} has been defined"
  end

  if initial && !initial_state.nil?
    raise Jsm::InvalidStateError,"can not set initial state to #{state_name}. current initial state is #{initial_state.name}"
  end

  state = create_state(state_name, initial)
  list.push(state)

  @initial_state = state if state.initial
end
has_state?(state_name) click to toggle source
# File lib/jsm/states.rb, line 33
def has_state?(state_name)
  list.any? { |state| state.name == state_name}
end
initial_state() click to toggle source
# File lib/jsm/states.rb, line 29
def initial_state
  @initial_state
end

Private Instance Methods

create_state(state_name, initial) click to toggle source
# File lib/jsm/states.rb, line 39
def create_state(state_name, initial)
  Jsm::State.new(state_name, initial)
end
state_unique?(state_name) click to toggle source
# File lib/jsm/states.rb, line 43
def state_unique?(state_name)
  list.all? {|state| state.name != state_name }
end