Module: ScheduledJob

Defined in:
lib/tasks/jobs.rb,
lib/scheduled_job.rb,
lib/scheduled_job/version.rb

Defined Under Namespace

Modules: ScheduledJobClassMethods Classes: Config, ConfigError, Job

Constant Summary collapse

VERSION =
"0.2.5"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.configObject



13
14
15
# File 'lib/scheduled_job.rb', line 13

def config
  @config ||= Config.new
end

Class Method Details

.configure {|config| ... } ⇒ Object

Yields:



32
33
34
35
# File 'lib/scheduled_job.rb', line 32

def self.configure
  yield(config)
  validate_job_hash(config.jobs) if config.jobs
end

.included(base) ⇒ Object



53
54
55
# File 'lib/scheduled_job.rb', line 53

def self.included(base)
  base.extend ScheduledJobClassMethods
end

.loggerObject



28
29
30
# File 'lib/scheduled_job.rb', line 28

def self.logger
  self.config.logger
end

.rescheduleObject



18
19
20
21
22
23
24
25
26
# File 'lib/scheduled_job.rb', line 18

def self.reschedule
  config.jobs.each do |job, options|
    options[:count].times do
      job = job.to_s if job.is_a?(Symbol)
      job = job.constantize if job.is_a?(String)
      job.schedule_job
    end
  end if config.jobs
end

.validate_job_hash(jobs) ⇒ Object



37
38
39
40
41
42
# File 'lib/scheduled_job.rb', line 37

def self.validate_job_hash(jobs)
  jobs.each do |klass, options|
    raise ConfigError.new("Jobs config found invalid class: #{klass}") unless klass.is_a?(Class) || klass.is_a?(Symbol) || klass.is_a?(String)
    raise ConfigError.new("Jobs config found invalid job count: #{options[:count]}") unless options[:count].to_i >= 0
  end
end

Instance Method Details

#before(job) ⇒ Object



57
58
59
60
# File 'lib/scheduled_job.rb', line 57

def before(job)
  callback = ScheduledJob.config.before_callback
  callback.call(job, self) if callback
end

#error(job, exception) ⇒ Object



75
76
77
78
# File 'lib/scheduled_job.rb', line 75

def error(job, exception)
  ScheduledJob.logger.warn("DelayedJob error: Job: #{job.id}, in queue #{self.class.queue_name}, exception: #{exception}")
  self.class.schedule_job
end

#failure(job) ⇒ Object



69
70
71
72
73
# File 'lib/scheduled_job.rb', line 69

def failure(job)
  ScheduledJob.logger.error("DelayedJob failed: processing job in queue #{self.class.queue_name} failed")
  job.update_attributes!(:failed_at => Time.now.utc)
  self.class.schedule_job
end

#success(job) ⇒ Object



62
63
64
65
66
67
# File 'lib/scheduled_job.rb', line 62

def success(job)
  callback = ScheduledJob.config.success_callback
  callback.call(job, self) if callback
  GC.start
  self.class.schedule_job(job)
end