Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 .rvmrc
Octocat-spinner-32 Gemfile
Octocat-spinner-32 LICENSE
Octocat-spinner-32 README.md
Octocat-spinner-32 Rakefile
Octocat-spinner-32 backgrounded.gemspec
README.md

Build Status

Backgrounded

The cleanest way to integrate background processing into your application.

Backgrounded provides a thin wrapper around any background processing framework that implements the Backgrounded handler API which makes it trivial to swap out processing frameworks with no impact to your code.

Features

  • clean and concise API which removes any dependency on external “worker” jobs and allows you to execute any model method in the background
  • integrates with any background processing framework (DelayedJob, Resque, JobFu, Workling, etc)
  • background methods can be actually unit tested by using an "in process" runner
  • custom callbacks to execute ActiveRecord callbacks in the background after being committed to the database

General Usage

class User
  def do_stuff
  end
  def self.do_something_else
  end
end

user = User.new
# execute instance method in background
user.backgrounded.do_stuff

# execute class method in background
User.backgrounded.do_something_else

after_commit_backgrounded Callback

Automatically execute a callback in the background after a model has been saved to the database. All of the standard after_commit options are available as well as an optional :backgrounded option which will be passed to the Backgrounded::Handler.

class User < ActiveRecord::Base
  # execute :do_something in the background after committed
  after_commit_backgrounded :do_something

  # execute :do_something_else in the background after committed
  # passing custom options to the backgrounded handler
  after_commit_backgrounded :do_something_else, :backgrounded => {:priority => :high}
end

Installation

$ gem install backgrounded

Configuration

Backgrounded handlers are available for popular libraries in separate gems. Just drop in the gem for your particular framework or write your own!

Resque

see github.com/wireframe/backgrounded-resque

JobFu

see github.com/jnstq/job_fu/tree

Custom Handlers

Writing a custom handler is as simple as:

# config/initializers/backgrounded.rb
class MyHandler
  # @param object is the target object to invoke the method upon
  # @param method is the requested method to call
  # @param args is the optional list of arguments to pass to the method
  # @param options is the optional hash of options passed to the backgrounded call
  def request(object, method, args, options={})
    # process the call however you want!
  end
end
Backgrounded.handler = MyHandler.new

Copyright

Copyright © 2012 Ryan Sonnek. See LICENSE for details.

Something went wrong with that request. Please try again.