Module: DelayedCron

Defined in:
lib/delayed_cron.rb,
lib/delayed_cron/jobs.rb,
lib/delayed_cron/railtie.rb,
lib/delayed_cron/version.rb,
lib/delayed_cron/jobs/resque.rb,
lib/delayed_cron/jobs/sidekiq.rb,
lib/delayed_cron/jobs/delayed_job.rb

Defined Under Namespace

Modules: ClassMethods, Glue, Jobs Classes: Railtie

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.adjust_interval(date, time_string) ⇒ Object



47
48
49
50
51
# File 'lib/delayed_cron.rb', line 47

def adjust_interval(date, time_string)
  time = parse_time(time_string)
  adjusted_date = DateTime.civil(date.year, date.month, date.day, time[:hours], time[:mins], time[:secs], Rational(time[:tz], 2400))
  adjusted_date.to_i - Time.now.to_i
end

.beginning_of_day(seconds) ⇒ Object



43
44
45
# File 'lib/delayed_cron.rb', line 43

def beginning_of_day(seconds)
  (Time.now + seconds).beginning_of_day
end

.define_cron_jobsObject



15
16
17
18
19
20
21
22
# File 'lib/delayed_cron.rb', line 15

def define_cron_jobs
  return false unless cron_jobs.present?
  cron_jobs.each do |job|
    klass, name = job.split(".")
    # TODO: raise error if interval is not set from config
    DelayedCron.schedule(klass, name, { interval: default_interval })
  end
end

.parse_time(string) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/delayed_cron.rb', line 53

def parse_time(string)
  time_array = string.split(/:|\ /).map(&:to_i)
  time = { 
    hours: time_array[0], mins: time_array[1], 
    secs: time_array[2] || 0, tz: time_array[3] || Time.now.strftime("%z").to_i
  }
end

.process_job(klass, method_name, options) ⇒ Object



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

def process_job(klass, method_name, options)
  # TODO: add ability to send args to klass method
  klass.constantize.send(method_name)
  schedule(klass, method_name, options)
end

.processorObject



24
25
26
27
28
# File 'lib/delayed_cron.rb', line 24

def processor
  return DelayedCron::Jobs::DelayedJob if defined? ::Delayed::Job
  return DelayedCron::Jobs::Resque     if defined? ::Resque
  return DelayedCron::Jobs::Sidekiq    if defined? ::Sidekiq
end

.schedule(klass, method_name, options) ⇒ Object



30
31
32
33
34
35
# File 'lib/delayed_cron.rb', line 30

def schedule(klass, method_name, options)
  if options[:at]
    options[:interval] = adjust_interval(beginning_of_day(options[:interval].to_i), options[:at])
  end
  processor.enqueue_delayed_cron(klass, method_name, options)
end

.setup {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (DelayedCron)

    the object that the method was called on



10
11
12
13
# File 'lib/delayed_cron.rb', line 10

def setup
  yield self
  define_cron_jobs
end