Class: EndState::TransitionConfigurationSet

Inherits:
Object
  • Object
show all
Defined in:
lib/end_state/transition_configuration_set.rb

Instance Method Summary collapse

Constructor Details

#initializeTransitionConfigurationSet

Returns a new instance of TransitionConfigurationSet.



4
5
6
7
# File 'lib/end_state/transition_configuration_set.rb', line 4

def initialize
  @end_state_map = { any_state: {} }      # [start_state][event] = end_state
  @configuration_map = { any_state: {} }  # [start_state][end_state] = configuration
end

Instance Method Details

#add(start_state, end_state, configuration, event = nil) ⇒ Object



9
10
11
12
13
14
15
16
17
# File 'lib/end_state/transition_configuration_set.rb', line 9

def add(start_state, end_state, configuration, event = nil)
  if event
    end_state_map[start_state] ||= {}
    end_state_map[start_state][event] = end_state
  end

  configuration_map[start_state] ||= {}
  configuration_map[start_state][end_state] = configuration
end

#each(&block) ⇒ Object



48
49
50
# File 'lib/end_state/transition_configuration_set.rb', line 48

def each &block
  all_transitions.each(&block)
end

#end_statesObject



36
37
38
# File 'lib/end_state/transition_configuration_set.rb', line 36

def end_states
  configuration_map.map { |_, v| v.keys }.flatten.uniq
end

#event_conflicts?(start_state, event) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
# File 'lib/end_state/transition_configuration_set.rb', line 44

def event_conflicts?(start_state, event)
  !!get_end_state(start_state, event) || (start_state == :any_state && events.include?(event))
end

#eventsObject



40
41
42
# File 'lib/end_state/transition_configuration_set.rb', line 40

def events
  end_state_map.map { |_, v| v.keys }.flatten.uniq
end

#get_configuration(start_state, end_state) ⇒ Object



19
20
21
22
# File 'lib/end_state/transition_configuration_set.rb', line 19

def get_configuration(start_state, end_state)
  local_map = configuration_map[start_state] || {}
  local_map[end_state] || configuration_map[:any_state][end_state]
end

#get_end_state(start_state, event) ⇒ Object



24
25
26
27
# File 'lib/end_state/transition_configuration_set.rb', line 24

def get_end_state(start_state, event)
  local_map = end_state_map[start_state] || {}
  local_map[event] || end_state_map[:any_state][event]
end

#start_statesObject



29
30
31
32
33
34
# File 'lib/end_state/transition_configuration_set.rb', line 29

def start_states
  states = configuration_map.keys
  states.delete(:any_state)
  states += end_states unless configuration_map[:any_state].empty?
  states.uniq
end