Sha256: c5078a276cbb388c35a99c1021455ea85fd4f4ea4102d404ffcfd211fb91036e

Contents?: true

Size: 913 Bytes

Versions: 1

Compression:

Stored size: 913 Bytes

Contents

require "run_after_commit/version"

module RunAfterCommit
  def self.included(base)
    base.after_commit :run_after_commit_queue
    base.after_rollback :clear_after_commit_queue
  end

  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

  def run_after_commit_queue
    after_commit_queue.each do |action|
      self.instance_eval(&action)
    end
  ensure
    clear_after_commit_queue
  end

  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

  def clear_after_commit_queue
    self.class.connection.instance_variable_set "@run_after_commit_queue", []

    true
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
run_after_commit-0.0.1 lib/run_after_commit.rb