junhanamaki/rekiq

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Rekiq

[![Gem Version](https://badge.fury.io/rb/rekiq.svg)](http://badge.fury.io/rb/rekiq)
[![Build Status](https://travis-ci.org/junhanamaki/rekiq.svg?branch=master)](https://travis-ci.org/junhanamaki/rekiq)
[![Code Climate](https://codeclimate.com/github/junhanamaki/rekiq.png)](https://codeclimate.com/github/junhanamaki/rekiq)
[![Test Coverage](https://codeclimate.com/github/junhanamaki/rekiq/coverage.png)](https://codeclimate.com/github/junhanamaki/rekiq)
[![Dependency Status](https://gemnasium.com/junhanamaki/rekiq.svg)](https://gemnasium.com/junhanamaki/rekiq)

**Rekiq is a recurring worker extension for
[Sidekiq](https://github.com/mperham/sidekiq).**

Rekiq extends Sidekiq and adds functionality to schedule recurring workers.

Sidekiq is an amazing gem that allows us to execute work asynchronously, or
even schedule work to be run at a given time. Now, wouldn't it be nice
if it also allowed us to schedule a worker to do recurring work? That's
the purpose of rekiq.

For example, rekiq allows you to schedule a worker to repeat the same
work every friday at 23:00.

## Dependencies

Tested with:

  * ruby 2.2.0, 2.1.1, 2.0.0

  * sidekiq 3.3.3

## Installation

Add this line to your application's Gemfile:

    gem 'rekiq'

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install rekiq

## Basic usage

1. Require rekiq after sidekiq:

        require 'sidekiq'
        require 'rekiq'

2. We need a 'schedule' object (responsible for returning the time at which the
worker should start) which must respond to method next_occurrence and
receives one argument of type Time (more at [The schedule object](https://github.com/junhanamaki/rekiq/wiki/The-schedule-object)).
For our example we'll be using the gem [ice_cube](https://github.com/seejohnrun/ice_cube)
(don't forget to require it):

        # define worker as normal
        class ExampleWorker
          include Sidekiq::Worker

          def perform(arg1, arg2)
            # Do some work
          end
        end

        # create schedule for worker to repeat every friday at 2am
        schedule = IceCube::Schedule.new do |s|
            s.rrule IceCube::Rule.daily.day(:friday).hour_of_day(2)
          end

        # now just start your worker
        ExampleWorker.perform_recurringly(schedule, 'argument_1', 'argument_2')

And that's it! Now the worker will run every friday as 2am.

You can use your own schedule object, configure worker to schedule before or
after work is done, set a margin, and much more! So please feel free to check
[wiki](https://github.com/junhanamaki/rekiq/wiki) for more details.

## Contributing

1. Fork it ( https://github.com/junhanamaki/rekiq/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request