module ARAfterTransactionConnection
Public Class Methods
included(base)
click to toggle source
# File lib/ar_after_transaction.rb, line 33 def self.included(base) base.class_eval do attr_accessor :normally_open_transactions attr_accessor :after_transaction_callbacks alias_method :transaction_without_after, :transaction alias_method :transaction, :transaction_with_after end end
Public Instance Methods
after_transaction() { || ... }
click to toggle source
# File lib/ar_after_transaction.rb, line 61 def after_transaction(&block) if transactions_open? self.after_transaction_callbacks ||= [] self.after_transaction_callbacks << block else yield end end
transaction_with_after(**args) { || ... }
click to toggle source
# File lib/ar_after_transaction.rb, line 43 def transaction_with_after(**args) clean = true transaction_without_after(**args) do yield rescue ActiveRecord::Rollback clean = false raise end rescue Exception clean = false raise ensure unless transactions_open? callbacks = delete_after_transaction_callbacks callbacks.each(&:call) if clean end end
Private Instance Methods
delete_after_transaction_callbacks()
click to toggle source
# File lib/ar_after_transaction.rb, line 79 def delete_after_transaction_callbacks result = after_transaction_callbacks || [] self.after_transaction_callbacks = [] result end
transactions_open?()
click to toggle source
# File lib/ar_after_transaction.rb, line 72 def transactions_open? return false unless active? self.normally_open_transactions ||= 0 open_transactions > normally_open_transactions end