Method: StateMachine::InstanceMethods#fire_events!
- Defined in:
- lib/state_machine/extensions.rb
#fire_events!(*events) ⇒ Object
Run one or more events in parallel. If any event fails to run, then a StateMachine::InvalidTransition exception will be raised.
See StateMachine::InstanceMethods#fire_events for more information.
Example
class Vehicle
state_machine :initial => :parked do
event :ignite do
transition :parked => :idling
end
event :park do
transition :idling => :parked
end
end
state_machine :alarm_state, :namespace => 'alarm', :initial => :active do
event :enable do
transition all => :active
end
event :disable do
transition all => :off
end
end
end
vehicle = Vehicle.new # => #<Vehicle:0xb7c02850 @state="parked", @alarm_state="active">
vehicle.fire_events(:ignite, :disable_alarm) # => true
vehicle.fire_events!(:ignite, :disable_alarm) # => StateMachine::InvalidTranstion: Cannot run events in parallel: ignite, disable_alarm
139 140 141 142 |
# File 'lib/state_machine/extensions.rb', line 139 def fire_events!(*events) run_action = [true, false].include?(events.last) ? events.pop : true fire_events(*(events + [run_action])) || raise(StateMachine::InvalidParallelTransition.new(self, events)) end |