Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
126 lines (85 sloc) 3.14 KB

ActsAsAsync Build Status

ActsAsAsync is an ActiveRecord extension that provides your models with easy-to-use Resque helpers.

Installation

Installing ActsAsAsync is as simple as adding it to your Gemfile:

gem "acts_as_async"

Usage

ActsAsAsync aims to be as simple as possible to use. Including it in your model is as easy as:

class Post < ActiveRecord::Base
  acts_as_async
end

Basic usage

ActsAsAsync adds three instance methods to your model that you can use to async any other instance method:

post = Post.create(:body => "Wow, acts_as_async is neat!")

# Self-destruct as soon as possible
post.async(:destroy)

# Self-destruct at this time tomorrow
post.async_at(Time.now + 1.day, :destroy)

# Self-destruct in 10 minutes
post.async_in(10.minutes, :destroy)

It also adds three identical class methods:

Post.async(:destroy_all)
Post.async_at(1.day.from_now, :destroy_all)
Post.async_in(10.minutes, :destroy_all)

Dynamic methods

In addition to the helper methods above, ActsAsAsync supports dynamic methods for any existing method on your model. For example:

class Audiobook < ActiveRecord::Base
  acts_as_async

  def transcribe
	# Some long-running logic here
  end

  def read!
	# Computers like to read too!
  end

  def paint(color)
	# I don't know why you'd paint a book...
  end
end

book = Audiobook.first

# Transcribe the book as soon as possible
book.async_transcribe

# Read the book at this time tomorrow
book.async_read_at!(Time.now + 1.day)

# Paint the book blue in a couple years
book.async_paint_in(2.years, "blue")

Additional notes

  • You can pass any number of additional arguments to async'd methods so long as they can be serialized into JSON
  • Adding acts_as_async to your Gemfile automatically loads both Resque and Resque-scheduler's rake tasks. This means you can use both $ rake resque:work and $ rake resque:scheduler right out of the box.
  • By deafult, each model will add tasks to a queue named "default". You can pass the :queue option to acts_as_async to specify a different queue.
  • Dynamic methods support names with exclamation points but not question marks. This was a design decision to discourage misuse of the question mark in method names. If you absolutely must async a method with a question mark, just use one of the async :method helpers.

Everything else...

ActsAsAsync is simply a thin layer on top of Resque and Resque-scheduler. To learn how to configure your redis connection, run workers, view the web interface, and more visit their home pages.

Compatibility

ActsAsAsync is tested against the following Rubies: MRI 1.8.7, MRI 1.9.2, MRI 1.9.3, Rubinius 2.0, and JRuby.

License

ActsAsAsync is released under the MIT license. See the LICENSE file for more info.