module SimpleSchedule

Public Instance Methods

run() click to toggle source
# File lib/simple_schedule.rb, line 5
def run
  scheduler = Rufus::Scheduler.new

  jobs.each do |type, schedule, job|
    if job.respond_to?(:perform_later)
      scheduler.public_send(type, schedule) do
        logger.info { "Enqueueing #{job} to be performed later" }
        job.perform_later
      end
    elsif job.respond_to?(:perform)
      scheduler.public_send(type, schedule) do
        logger.info { "Performing #{job} synchronously" }
        job.perform
      end
    elsif job.instance_methods.include?(:perform)
      scheduler.public_send(type, schedule) do
        logger.info { "Performing #{job} synchronously" }
        job.new.perform
      end
    else
      raise ArgumentError.new("Job #{job} does not respond to #{job}.perform_async, #{job}.perform, or #{job}#perform")
    end
  end

  Signal.trap('INT') { scheduler.shutdown }
  Signal.trap('TERM') { scheduler.shutdown }

  scheduler.join
end

Private Instance Methods

cron(tab, job) click to toggle source
# File lib/simple_schedule.rb, line 61
def cron(tab, job)
  jobs << [:cron, tab, job]
end
every(interval, job) click to toggle source
# File lib/simple_schedule.rb, line 53
def every(interval, job)
  jobs << [:every, interval, job]
end
interval(interval, job) click to toggle source
# File lib/simple_schedule.rb, line 57
def interval(interval, job)
  jobs << [:interval, interval, job]
end
jobs() click to toggle source
# File lib/simple_schedule.rb, line 41
def jobs
  @jobs ||= []
end
logger() click to toggle source
# File lib/simple_schedule.rb, line 37
def logger
  @logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
end
once_at(time, job) click to toggle source
# File lib/simple_schedule.rb, line 49
def once_at(time, job)
  jobs << [:at, time, job]
end
once_in(interval, job) click to toggle source
# File lib/simple_schedule.rb, line 45
def once_in(interval, job)
  jobs << [:in, interval, job]
end