module ActiveRecord::AfterTransaction::Methods

Public Class Methods

included(klass) click to toggle source
# File lib/activerecord-after-transaction/methods.rb, line 5
def self.included(klass)
  klass.class_eval do
    after_commit :execute_after_transaction
    after_rollback :clear_after_transaction
  end
end

Public Instance Methods

after_transaction(&block) click to toggle source
# File lib/activerecord-after-transaction/methods.rb, line 12
def after_transaction(&block)
  return block.call if self.class.connection.open_transactions == 0
  self.class.connection.add_transaction_record self

  @after_transaction_queue ||= []
  @after_transaction_queue.push block
  logger && logger.debug("Push #{block}")
end

Private Instance Methods

clear_after_transaction() click to toggle source
# File lib/activerecord-after-transaction/methods.rb, line 36
def clear_after_transaction
  logger && logger.debug("Clear the queue")
  @after_transaction_queue ||= []
  @after_transaction_queue.clear
end
execute_after_transaction() click to toggle source
# File lib/activerecord-after-transaction/methods.rb, line 23
def execute_after_transaction
  queue = @after_transaction_queue ||= []
  if !queue.empty?
    logger && logger.debug("Execute the queue")
    queue = queue.dup
    clear_after_transaction
    queue.each do |block|
      logger && logger.debug("Execute #{block}")
      block.call
    end
  end
end