Method: Archipelago::Pirate::Captain#transaction
- Defined in:
- lib/archipelago/pirate.rb
#transaction(&block) ⇒ Object
Execute block within a transaction.
Will commit! transaction after the block is finished unless the transaction is aborted or commited already.
Will abort! the transaction if any exception is raised.
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/archipelago/pirate.rb', line 175 def transaction(&block) #:yields: a clone of this Archipelago::Pirate::Captain with the given transaction as default @transaction. raise NoTransactionManagerAvailableException.new(self) if self.trannies.empty? my_clone = self.begin transa = my_clone.active_transaction begin begin return yield(my_clone) ensure raise CommitFailedException.new(my_clone, transa) unless transa.commit! == :commited end rescue Exception => e transa.abort! unless transa.state == :aborted raise e end end |