Module: StateMachine::ClassMethods
- Defined in:
- lib/ruby-state-machine/state_machine.rb
Instance Attribute Summary collapse
-
#machine ⇒ Object
Returns the value of attribute machine.
Instance Method Summary collapse
- #default_state ⇒ Object
- #events ⇒ Object
- #next_state(*args) ⇒ Object
- #next_state_instruction(*args) ⇒ Object
- #state_machine(opts) ⇒ Object
-
#state_transition(opts) ⇒ Object
Add a transition to state machine with the following keys: :state=>state (symbol) for which transition is being declared :event=>event (symbol) which causes transition :decider=>name of instance method on state machine specialization that “decides” next state in case of multiple actions for next state (see below).
- #states ⇒ Object
- #transitions ⇒ Object
Instance Attribute Details
#machine ⇒ Object
Returns the value of attribute machine.
21 22 23 |
# File 'lib/ruby-state-machine/state_machine.rb', line 21 def machine @machine end |
Instance Method Details
#default_state ⇒ Object
60 |
# File 'lib/ruby-state-machine/state_machine.rb', line 60 def default_state; @machine.default_state; end |
#events ⇒ Object
62 |
# File 'lib/ruby-state-machine/state_machine.rb', line 62 def events; @machine.events; end |
#next_state(*args) ⇒ Object
64 |
# File 'lib/ruby-state-machine/state_machine.rb', line 64 def next_state(*args); @machine.next_state(*args); end |
#next_state_instruction(*args) ⇒ Object
65 |
# File 'lib/ruby-state-machine/state_machine.rb', line 65 def next_state_instruction(*args); @machine.next_state_instruction(*args); end |
#state_machine(opts) ⇒ Object
Create state machine with the following options:
states Array[symbols], each symbol is name of state
events Array[symbols], each symbol is name of event
default_state symbol, symbol is one of states
27 28 29 30 |
# File 'lib/ruby-state-machine/state_machine.rb', line 27 def state_machine(opts) @machine = StateMachine::Machine.new(opts) self.send(:include, StateMachine::InstanceMethods) end |
#state_transition(opts) ⇒ Object
Add a transition to state machine with the following keys: :state=>state (symbol) for which transition is being declared :event=>event (symbol) which causes transition :decider=>name of instance method on state machine specialization that “decides”
next state in case of multiple actions for next state (see below).
Method in question should return name of next state, or name of action
if actions are named (not required).
:next=>action to take for this transition, one of:
1) state name(symbol), or special symbol (:stay), which stays at current state
2) hash{:state=>state name(symbol), :action=>code/lambda(string), :name=>id of action, for decider}
3) array of 1 and/or 2. Decider required in this case.
Example 1:
state_transition :state=>:c_state, :event=>:w_event, :decider => :c_state_decider,
:next=>[
{:state=>:a_state, :action=>lambda{|o, args| o.increment_value(7)} },
{:state=>:b_state, :action=>lambda{|o, args| o.increment_value(-10)} }
]
Example 2 (stays at current state):
state_transition :state=>:c_state, :event=>:y_event, :next=>{:state=>:stay, :action=>lambda{|o, args| o.increment_value(-3)}}
Example 3:
state_transition :state=>:b_state, :event=>:z_event, :next=>:a_state
56 57 58 |
# File 'lib/ruby-state-machine/state_machine.rb', line 56 def state_transition(opts) @machine.add_transition(opts) end |
#states ⇒ Object
61 |
# File 'lib/ruby-state-machine/state_machine.rb', line 61 def states; @machine.states; end |
#transitions ⇒ Object
63 |
# File 'lib/ruby-state-machine/state_machine.rb', line 63 def transitions; @machine.transitions; end |