module RunAfterCommit

Constants

VERSION

Public Class Methods

included(base) click to toggle source
# File lib/run_after_commit.rb, line 5
def self.included(base)
  base.after_commit :run_after_commit_queue
  base.after_rollback :clear_after_commit_queue
end

Public Instance Methods

run_after_commit(method = nil, &block) click to toggle source
# File lib/run_after_commit.rb, line 10
def run_after_commit(method = nil, &block)
  after_commit_queue << Proc.new { send method } if method
  after_commit_queue << block if block

  run_after_commit_queue if self.class.connection.open_transactions.zero?

  true
end

Protected Instance Methods

after_commit_queue() click to toggle source
# File lib/run_after_commit.rb, line 29
def after_commit_queue
  self.class.connection.instance_variable_get("@run_after_commit_queue") || self.class.connection.instance_variable_set("@run_after_commit_queue", [])
end
clear_after_commit_queue() click to toggle source
# File lib/run_after_commit.rb, line 33
def clear_after_commit_queue
  self.class.connection.instance_variable_set "@run_after_commit_queue", []

  true
end
run_after_commit_queue() click to toggle source
# File lib/run_after_commit.rb, line 21
def run_after_commit_queue
  after_commit_queue.each do |action|
    self.instance_eval(&action)
  end
ensure
  clear_after_commit_queue
end