Module: Sidekiq::Repeat::Repeatable::ClassMethods

Defined in:
lib/sidekiq/repeat/repeatable.rb

Instance Method Summary collapse

Instance Method Details

#next_scheduled_jobObject



32
33
34
35
# File 'lib/sidekiq/repeat/repeatable.rb', line 32

def next_scheduled_job
  @ss ||= Sidekiq::ScheduledSet.new
  @ss.find { |job| job.klass == self.name }
end

#repeat(&block) ⇒ Object



5
6
7
8
9
10
# File 'lib/sidekiq/repeat/repeatable.rb', line 5

def repeat(&block)
  @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

#rescheduleObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/sidekiq/repeat/repeatable.rb', line 12

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