Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Make Active Record instance methods asynchronous using resque.
Ruby JavaScript
branch: master

This branch is 1 commit ahead, 5 commits behind nragaz:master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
Gemfile
Gemfile.lock
MIT-LICENSE
README.md
Rakefile
resque-async-method.gemspec

README.md

Resque::Plugins::Async::Method

Make Active Record instance methods asynchronous using resque.

Works with Ruby ~> 1.9, Rails ~> 3 and Resque ~> 1.17. (Probably works with earlier versions too -- but why?)

Usage

class User < ActiveRecord::Base
  # Not needed! This is done using a hook on ActiveRecord::Base.
  # include Resque::Plugins::Async::Method

  def preprocess_avatar_for_a_long_time
    # do stuff
  end
  async_method :preprocess_avatar_for_a_long_time

  def send_a_very_long_email
    # do stuff
  end
  async_method :send_a_very_long_email, queue: 'emails'
end

u = User.find(1)

u.preprocess_avatar_for_a_long_time # => queued in 'users' queue
u.send_a_very_long_email # => queued in 'emails' queue
u.sync_send_a_very_long_email # => happens right away!

Note that in the test environment, none of this magic happens. You can test the expected output immediately.

Method return values will change. Resque.enqueue will return [] from an async'ed method.

Sometimes it's nice to async a method that you're including from a module:

module MyExtension
  extend ActiveSupport::Concern

  include Resque::Plugins::Async::Method

  included do
    async_method :generate_matrix, queue: 'matrices'
  end

  def generate_matrix
    # do stuff
  end
end
Something went wrong with that request. Please try again.