aboutsummaryrefslogtreecommitdiffstats
path: root/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb
diff options
context:
space:
mode:
authorYves Senn <yves.senn@gmail.com>2014-09-02 13:38:11 +0200
committerYves Senn <yves.senn@gmail.com>2014-09-02 13:38:11 +0200
commitcc7faddf1771e627a989e8583223a5729b6e098a (patch)
tree35473fee32b07e99ebed6a8f6504e5f03e1b2073 /activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb
parent368001c0218dbe9a5851ea1b804fdd9d7c0ba45f (diff)
parent5255e4f39f040be28b56740f3ebef667f286926c (diff)
downloadrails-cc7faddf1771e627a989e8583223a5729b6e098a.tar.gz
rails-cc7faddf1771e627a989e8583223a5729b6e098a.tar.bz2
rails-cc7faddf1771e627a989e8583223a5729b6e098a.zip
Merge pull request #16672 from cristianbica/queue-classic-later
ActiveJob: Implemented enqueue_at for QueueClassic
Diffstat (limited to 'activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb')
-rw-r--r--activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb b/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb
index d74f8cf90e..914390a958 100644
--- a/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb
+++ b/activejob/lib/active_job/queue_adapters/queue_classic_adapter.rb
@@ -5,11 +5,26 @@ module ActiveJob
class QueueClassicAdapter
class << self
def enqueue(job, *args)
- QC::Queue.new(job.queue_name).enqueue("#{JobWrapper.name}.perform", job.name, *args)
+ build_queue(job.queue_name).enqueue("#{JobWrapper.name}.perform", job.name, *args)
end
def enqueue_at(job, timestamp, *args)
- raise NotImplementedError
+ queue = build_queue(job.queue_name)
+ unless queue.respond_to?(:enqueue_at)
+ raise NotImplementedError, 'To be able to schedule jobs with Queue Classic ' \
+ 'the QC::Queue needs to respond to `enqueue_at(timestamp, method, *args)`. '
+ 'You can implement this yourself or you can use the queue_classic-later gem.'
+ end
+ queue.enqueue_at(timestamp, "#{JobWrapper.name}.perform", job.name, *args)
+ end
+
+ # Builds a <tt>QC::Queue</tt> object to schedule jobs on.
+ #
+ # If you have a custom <tt>QC::Queue</tt> subclass you'll need to suclass
+ # <tt>ActiveJob::QueueAdapters::QueueClassicAdapter</tt> and override the
+ # <tt>build_queue</tt> method.
+ def build_queue(queue_name)
+ QC::Queue.new(queue_name)
end
end