This is a celluloid based background jobs library heavily inspired by [Sidekiq][sidekiq].
The difference is that it allows you to change the backend, Redis, to other ones like RabitMQ.
You can start with something _à la_ [sucker_punch][sucker_punch]: background jobs threaded within the application process
and switch to separated processes later using another backend.
## Configuration
Install the gem in your Gemfile:
``` ruby
gem "tennis-jobs"
gem "tennis-jobs-redis" # Not available at the moment
```
Configure Tennis in your `config/application.rb` (or any other file):
``` ruby
Tennis.configure do |config|
config.backend Tennis::Backend::Redis.new(redis_url)
# require "logger"
# config.logger = Logger.new(STDOUT)
end
```
Start tennis from the command line:
```
bundle exec tennis --concurrency 4 --require ./config/application.rb --jobs "MyJob,MyOtherJob"
# There is also a shorter equivalent:
# bundle exex tennis -c 4 -r ./config/application.rb -j "MyJob,MyOtherJob"
```
## Usage
``` ruby
MINUTES = 60
class MyJob
include Tennis::Job
def my_method(*args)
puts "=> #{args}.sum = args.inject(0, &:+)"
end
end
my_job_instance = MyJob.new
my_job_instance.async.my_method(1, 2, 3)
# Will print in your `tennis` process:
# => [1, 2, 3].sum = 6
my_job_instance.async_in(2 * MINUTES).my_method(4, 5, 6)
# Will print, in approximatively two minutes, in your `tennis` process:
# => [4, 5, 6].sum = 15
```
The `my_method`'s arguments can be quite complex depending on your backend support.
The same goes for the `MyJob`'s instance.
With the `Tennis::Backend::Memory` backend, you can use anything and it will be kept as it is.
## Testing
This section is waiting to beeing written.
[sidekiq]: https://github.com/mperham/sidekiq
[sucker_punch]: https://github.com/brandonhilkert/sucker_punch