Module: Sidekiq::Repeat::Repeatable::ClassMethods
- Defined in:
- lib/sidekiq/repeat/repeatable.rb
Instance Method Summary collapse
- #already_scheduled? ⇒ Boolean
- #repeat(&block) ⇒ Object
- #repeat_arguments(ts) ⇒ Object
- #repeat_configured? ⇒ Boolean
- #reschedule ⇒ Object
Instance Method Details
#already_scheduled? ⇒ 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
26 27 28 |
# File 'lib/sidekiq/repeat/repeatable.rb', line 26 def repeat_configured? !!@cronline end |
#reschedule ⇒ Object
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 |