class Granite::Action::TransactionManager::TransactionsStack
A class to manage transaction callbacks stack.
Attributes
depth[R]
Public Class Methods
new()
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 8 def initialize @callbacks = [] @depth = 0 end
Public Instance Methods
add_callback(callback)
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 23 def add_callback(callback) fail 'Start a transaction before you add callbacks on it' if depth.zero? @callbacks.last << callback end
callbacks()
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 29 def callbacks @callbacks.flatten end
transaction() { || ... }
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 13 def transaction start_new! result = yield finish_current! result rescue StandardError, ScriptError rollback_current! raise end
Private Instance Methods
finish_current(result)
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 48 def finish_current(result) fail ArgumentError, 'No current transaction' if @depth.zero? @depth -= 1 if result current = @callbacks.pop previous = @callbacks.pop @callbacks << [previous, current].flatten.compact else @callbacks.pop end end
finish_current!()
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 40 def finish_current! finish_current(true) end
rollback_current!()
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 44 def rollback_current! finish_current(false) end
start_new!()
click to toggle source
# File lib/granite/action/transaction_manager/transactions_stack.rb, line 35 def start_new! @depth += 1 @callbacks << [] end