Module: Sidekiq::Repeat::Repeatable::ClassMethods
- Defined in:
- lib/sidekiq/repeat/repeatable.rb
Instance Method Summary collapse
Instance Method Details
#cronline ⇒ Object
9 10 11 12 13 14 15 16 17 |
# 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 ⇒ Object
39 40 41 42 |
# 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) ⇒ Object
5 6 7 |
# File 'lib/sidekiq/repeat/repeatable.rb', line 5 def repeat(&block) @block = block end |
#reschedule ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# 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 |