def fire_events!(*events)
      run_action = [true, false].include?(events.last) ? events.pop : true
      fire_events(*(events + [run_action])) || fail(StateMachines::InvalidParallelTransition.new(self, events))
    end
def fire_events!(*events)
      run_action = [true, false].include?(events.last) ? events.pop : true
      fire_events(*(events + [run_action])) || fail(StateMachines::InvalidParallelTransition.new(self, events))
    end
Run one or more events in parallel.  If any event fails to run, then
 a StateMachines::InvalidTransition exception will be raised.

 See StateMachines::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) # => StateMachines::InvalidParallelTransition: Cannot run events in parallel: ignite, disable_alarm