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