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

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

Instance Method Summary collapse

Instance Method Details

#already_scheduled?Boolean

Returns:

  • (Boolean)


30
31
32
33
# File 'lib/sidekiq/repeat/repeatable.rb', line 30

def already_scheduled?
  @ss ||= Sidekiq::ScheduledSet.new
  @ss.any? { |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

#repeat_arguments(ts) ⇒ Object



22
23
24
# File 'lib/sidekiq/repeat/repeatable.rb', line 22

def repeat_arguments(ts)
  [Time.now.to_f, ts.to_f].compact.take(instance_method(:perform).arity)
end

#repeat_configured?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/sidekiq/repeat/repeatable.rb', line 26

def repeat_configured?
  !!@cronline
end

#rescheduleObject



12
13
14
15
16
17
18
19
20
# File 'lib/sidekiq/repeat/repeatable.rb', line 12

def reschedule
  return unless repeat_configured?
  return if     already_scheduled?

  ts = @cronline.next
  args = repeat_arguments(ts)
  self.perform_at ts.to_f, *args
  Sidekiq.logger.info "Scheduled #{self.name} for #{ts}."
end