diff options
author | Mike Perham <mperham@gmail.com> | 2014-05-19 15:27:28 -0700 |
---|---|---|
committer | Mike Perham <mperham@gmail.com> | 2014-05-19 15:27:28 -0700 |
commit | 3648838173a1d7217560ed1cf8ab2a217ccbc6d1 (patch) | |
tree | 54f1fdc31dd091cc81652bb7acd2d42fd5b2cdcc /lib/active_job/queue_adapters/sucker_punch_adapter.rb | |
parent | c6925f52d07a01c2b729a70bac60b11f7e514d76 (diff) | |
download | rails-3648838173a1d7217560ed1cf8ab2a217ccbc6d1.tar.gz rails-3648838173a1d7217560ed1cf8ab2a217ccbc6d1.tar.bz2 rails-3648838173a1d7217560ed1cf8ab2a217ccbc6d1.zip |
Implement enqueue_at/enqueue_in
Delayed jobs are supported by all systems except QueueClassic. For it I decided to raise NotImplementedError.
The inline implementation is a bit rough.
Diffstat (limited to 'lib/active_job/queue_adapters/sucker_punch_adapter.rb')
-rw-r--r-- | lib/active_job/queue_adapters/sucker_punch_adapter.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/lib/active_job/queue_adapters/sucker_punch_adapter.rb b/lib/active_job/queue_adapters/sucker_punch_adapter.rb index 182b5ce018..713da08359 100644 --- a/lib/active_job/queue_adapters/sucker_punch_adapter.rb +++ b/lib/active_job/queue_adapters/sucker_punch_adapter.rb @@ -7,6 +7,16 @@ module ActiveJob def queue(job, *args) JobWrapper.new.async.perform(job, *args) end + + def queue_at(job, timestamp, *args) + secs = Time.now.to_f - timestamp + if secs < 1 + # Optimization to enqueue something now that is scheduled to go out now or in the past + JobWrapper.new.async.perform(job, *args) + else + JobWrapper.new.async.later(secs, job, *args) + end + end end class JobWrapper @@ -15,6 +25,10 @@ module ActiveJob def perform(job_name, *args) job_name.new.perform *Parameters.deserialize(args) end + + def later(sec, job_name, *args) + after(sec) { p args; perform(job_name, *args) } + end end end end |