h1. after_commit

An ActiveRecord/Rails library to add @before_commit@, @after_commit@, @before_rollback@ and @after_rollback@ callbacks. These callbacks are focused on the transactions, instead of specific model actions. This is beneficial in situations where you are doing asynchronous processing and need committed objects.

h2. Installation

<pre><code>gem install after_commit --source http://gemcutter.org</code></pre>

h2. Usage

The following callbacks are provided:

* before_commit
* before_commit_on_create
* before_commit_on_update
* before_commit_on_destroy
* after_commit
* after_commit_on_create
* after_commit_on_update
* after_commit_on_destroy
* before_rollback
* after_rollback

You can use these just like you would any other callback:

<pre><code>class Article < ActiveRecord::Base
  after_commit :method_to_call_after_commit
  
  # ...
  
  private
  
  def method_to_call_after_commit
    # Do something knowing that the transaction is committed.
  end
end</code></pre>

h2. Credits

This code first appeared in a blog post "by Eli Miller":http://elimiller.blogspot.com/2007/06/proper-cache-expiry-with-aftercommit.html, and was then included in "Thinking Sphinx":http://ts.freelancing-gods.com by "Pat Allan":http://freelancing-gods.com, with modifications from Joost Hietbrink. The code was then "put on GitHub as a plugin":http://github.com/GUI/after_commit by Nick Muerdter, and many people forked and added their own contributions.

This version (maintained by Pat Allan) includes the following patches:

* Callbacks for specific types of actions (create, update, destroy) ("DeLynn Berry":http://delynnberry.com/)
* Fixes to extra callbacks ("Xavier Shay":http://rhnh.net/)
* Gemspec and extended tests ("David Yip":http://github.com/yipdw)
* Thread-safety ("Dmitry Galinsky":http://dima-exe.ru/)
* after_rollback callback ("Justin Balthrop":http://github.com/ninjudd)
* Test environment fix ("Pivotal Labs":http://pivotalblabs.com/)
* Scoping callbacks to specific connections ("Mat Brown":http://outofti.me/)
* before_* callbacks ("Trotter Cashion":http://trottercashion.com/)