Module: Statesman::Machine
- Defined in:
- lib/statesman/machine.rb
Overview
The main module, that should be ‘extend`ed in to state machine classes.
Defined Under Namespace
Modules: ClassMethods
Class Method Summary collapse
Instance Method Summary collapse
- #allowed_transitions ⇒ Object
- #can_transition_to?(new_state, metadata = nil) ⇒ Boolean
- #current_state ⇒ Object
- #execute(phase, initial_state, new_state, transition) ⇒ Object
- #history ⇒ Object
- #initialize(object, options = { transition_class: Statesman::Adapters::MemoryTransition }) ⇒ Object
- #last_transition ⇒ Object
- #transition_to(new_state, metadata = nil) ⇒ Object
- #transition_to!(new_state, metadata = nil) ⇒ Object
Class Method Details
.included(base) ⇒ Object
10 11 12 13 |
# File 'lib/statesman/machine.rb', line 10 def self.included(base) base.extend(ClassMethods) base.send(:attr_reader, :object) end |
Instance Method Details
#allowed_transitions ⇒ Object
156 157 158 159 160 |
# File 'lib/statesman/machine.rb', line 156 def allowed_transitions successors_for(current_state).select do |state| can_transition_to?(state) end end |
#can_transition_to?(new_state, metadata = nil) ⇒ Boolean
166 167 168 169 170 171 172 173 |
# File 'lib/statesman/machine.rb', line 166 def can_transition_to?(new_state, = nil) validate_transition(from: current_state, to: new_state, metadata: ) true rescue TransitionFailedError, GuardFailedError false end |
#current_state ⇒ Object
151 152 153 154 |
# File 'lib/statesman/machine.rb', line 151 def current_state last_action = last_transition last_action ? last_action.to_state : self.class.initial_state end |
#execute(phase, initial_state, new_state, transition) ⇒ Object
192 193 194 195 |
# File 'lib/statesman/machine.rb', line 192 def execute(phase, initial_state, new_state, transition) callbacks = callbacks_for(phase, from: initial_state, to: new_state) callbacks.each { |cb| cb.call(@object, transition) } end |
#history ⇒ Object
175 176 177 |
# File 'lib/statesman/machine.rb', line 175 def history @storage_adapter.history end |
#initialize(object, options = { transition_class: Statesman::Adapters::MemoryTransition }) ⇒ Object
140 141 142 143 144 145 146 147 148 149 |
# File 'lib/statesman/machine.rb', line 140 def initialize(object, = { transition_class: Statesman::Adapters::MemoryTransition }) @object = object @transition_class = [:transition_class] @storage_adapter = adapter_class(@transition_class) .new(@transition_class, object, self) send(:after_initialize) if respond_to? :after_initialize end |
#last_transition ⇒ Object
162 163 164 |
# File 'lib/statesman/machine.rb', line 162 def last_transition @storage_adapter.last end |
#transition_to(new_state, metadata = nil) ⇒ Object
197 198 199 200 201 |
# File 'lib/statesman/machine.rb', line 197 def transition_to(new_state, = nil) self.transition_to!(new_state, ) rescue TransitionFailedError, GuardFailedError false end |
#transition_to!(new_state, metadata = nil) ⇒ Object
179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/statesman/machine.rb', line 179 def transition_to!(new_state, = nil) initial_state = current_state new_state = new_state.to_s validate_transition(from: initial_state, to: new_state, metadata: ) @storage_adapter.create(initial_state, new_state, ) true end |