diff --git a/lib/sidetiq/schedulable.rb b/lib/sidetiq/schedulable.rb index 4beaf60..67b1978 100644 --- a/lib/sidetiq/schedulable.rb +++ b/lib/sidetiq/schedulable.rb @@ -12,12 +12,28 @@ module Sidetiq # end module Schedulable module ClassMethods + def last_scheduled_occurrence + get_timestamp "last" + end + + def next_scheduled_occurrence + get_timestamp "next" + end + def tiq(&block) # :nodoc: clock = Sidetiq::Clock.instance clock.synchronize do clock.schedule_for(self).instance_eval(&block) end end + + private + + def get_timestamp key + Sidekiq.redis do |redis| + (redis.get("sidetiq:#{name}:#{key}") || -1).to_f + end + end end def self.included(klass) # :nodoc: @@ -25,4 +41,3 @@ module Sidetiq end end end - diff --git a/test/test_worker.rb b/test/test_worker.rb new file mode 100644 index 0000000..a69f60c --- /dev/null +++ b/test/test_worker.rb @@ -0,0 +1,25 @@ +require_relative 'helper' + +class TestWorker < Sidetiq::TestCase + class FakeWorker + include Sidetiq::Schedulable + end + + def test_timestamps_for_new_worker + assert FakeWorker.last_scheduled_occurrence == -1 + assert FakeWorker.next_scheduled_occurrence == -1 + end + + def test_timestamps_for_existing_worker + last_run = (Time.now - 100).to_f + next_run = (Time.now + 100).to_f + + Sidekiq.redis do |redis| + redis.set "sidetiq:TestWorker::FakeWorker:last", last_run + redis.set "sidetiq:TestWorker::FakeWorker:next", next_run + end + + assert FakeWorker.last_scheduled_occurrence == last_run + assert FakeWorker.next_scheduled_occurrence == next_run + end +end