module Sidekiq::Repeat::Repeatable::ClassMethods

Public Instance Methods

cronline() click to toggle source
# File lib/sidekiq/repeat/repeatable.rb, line 9
def cronline
  return @cronline if @cronline
  return if @block.nil?
  @cronline = MiniIceCube::MainDsl.new.instance_eval(&@block).to_s
  @cronline = CronParser.new(@cronline)

rescue ArgumentError
  fail "repeat '#{@cronline}' in class #{self.name} is not a valid cron line"
end
next_scheduled_job() click to toggle source
# File lib/sidekiq/repeat/repeatable.rb, line 39
def next_scheduled_job
  @ss ||= Sidekiq::ScheduledSet.new
  @ss.find { |job| job.klass == self.name }
end
repeat(&block) click to toggle source
# File lib/sidekiq/repeat/repeatable.rb, line 5
def repeat(&block)
  @block = block
end
reschedule() click to toggle source
# File lib/sidekiq/repeat/repeatable.rb, line 19
def reschedule
  # Only if repeat is configured.
  return unless !!cronline

  ts   = cronline.next
  args = [Time.now.to_f, ts.to_f].take(instance_method(:perform).arity)
  nj   = next_scheduled_job

  if nj
    if nj.at > ts
      nj.item['args'] = args
      nj.reschedule ts.to_f
      Sidekiq.logger.info "Re-scheduled #{self.name} for #{ts}."
    end
  else
    self.perform_at ts.to_f, *args
    Sidekiq.logger.info "Scheduled #{self.name} for #{ts}."
  end
end