class StateDesignPattern::StateMachine
Attributes
context[R]
Public Class Methods
new()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 12 def initialize initialize_context transition_to_start_state setup_delegation end
Public Instance Methods
current_state()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 25 def current_state @state.class end
initial_context()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 18 def initial_context end
send_event(name, message = {})
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 38 def send_event(name, message = {}) event = { name: name, source: self }.merge(message) changed notify_observers(event) self end
start_state()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 21 def start_state raise NotImplementedError end
transition_to_state(state_class)
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 34 def transition_to_state(state_class) @state = state_class.new(self) end
transition_to_state_and_send_event(state_class, name, message = {})
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 29 def transition_to_state_and_send_event(state_class, name, message = {}) transition_to_state(state_class) send_event(name, message) end
Private Instance Methods
initialize_context()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 49 def initialize_context @context = initial_context end
setup_action_delegation()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 69 def setup_action_delegation if @state.respond_to?(:actions) methods = @state.actions self.class.def_delegators :@state, *methods end end
setup_context_delegation()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 62 def setup_context_delegation if @context methods = @context.members.map { |reader| [reader, "#{reader}=".to_sym] }.flatten self.class.def_delegators :@context, *methods end end
setup_delegation()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 57 def setup_delegation setup_context_delegation setup_action_delegation end
transition_to_start_state()
click to toggle source
# File lib/state_design_pattern/state_machine.rb, line 53 def transition_to_start_state transition_to_state(start_state) end