Job options

This commit is contained in:
Dzmitry Plashchynski
2016-11-29 15:41:39 +02:00
parent 64dde82342
commit f5d65b6cc7
3 changed files with 16 additions and 4 deletions

View File

@@ -6,15 +6,16 @@ module Crono
class Job class Job
include Logging include Logging
attr_accessor :performer, :period, :job_args, :last_performed_at, attr_accessor :performer, :period, :job_args, :last_performed_at, :job_options,
:next_performed_at, :job_log, :job_logger, :healthy, :execution_interval :next_performed_at, :job_log, :job_logger, :healthy, :execution_interval
def initialize(performer, period, job_args) def initialize(performer, period, job_args, job_options = {})
self.execution_interval = 0.minutes self.execution_interval = 0.minutes
self.performer, self.period = performer, period self.performer, self.period = performer, period
self.job_args = JSON.generate(job_args) self.job_args = JSON.generate(job_args)
self.job_log = StringIO.new self.job_log = StringIO.new
self.job_logger = Logger.new(job_log) self.job_logger = Logger.new(job_log)
self.job_options = job_options
self.next_performed_at = period.next self.next_performed_at = period.next
@semaphore = Mutex.new @semaphore = Mutex.new
end end

View File

@@ -8,7 +8,7 @@ module Crono
end end
def every(period, *args) def every(period, *args)
@job = Job.new(@performer, Period.new(period, *args), @job_args) @job = Job.new(@performer, Period.new(period, *args), @job_args, @options)
@scheduler.add_job(@job) @scheduler.add_job(@job)
self self
end end
@@ -17,6 +17,11 @@ module Crono
@job.execution_interval = execution_interval if @job @job.execution_interval = execution_interval if @job
self self
end end
def with_options(options)
@options = options
self
end
end end
def self.perform(performer, *job_args) def self.perform(performer, *job_args)

View File

@@ -20,8 +20,14 @@ describe Crono::PerformerProxy do
end end
it 'should add job with args to schedule' do it 'should add job with args to schedule' do
expect(Crono::Job).to receive(:new).with(TestJob, kind_of(Crono::Period), [:some, {some: 'data'}]) expect(Crono::Job).to receive(:new).with(TestJob, kind_of(Crono::Period), [:some, {some: 'data'}], nil)
allow(Crono.scheduler).to receive(:add_job) allow(Crono.scheduler).to receive(:add_job)
Crono.perform(TestJob, :some, {some: 'data'}).every(2.days, at: '15:30') Crono.perform(TestJob, :some, {some: 'data'}).every(2.days, at: '15:30')
end end
it 'should add job with options to schedule' do
expect(Crono::Job).to receive(:new).with(TestJob, kind_of(Crono::Period), [], {some_option: true})
allow(Crono.scheduler).to receive(:add_job)
Crono.perform(TestJob).with_options(some_option: true).every(2.days, at: '15:30')
end
end end