module Qu::Delayed::Backend::Mongo

Public Instance Methods

clear_delayed() click to toggle source
# File lib/qu/delayed/backend/mongo.rb, line 35
def clear_delayed
  logger.info { "Clearing delayed jobs queue" }
  delayed_jobs.drop
end
delayed_jobs() click to toggle source
# File lib/qu/delayed/backend/mongo.rb, line 31
def delayed_jobs
  self[:delayed_jobs]
end
enqueue_at(payload) click to toggle source
# File lib/qu/delayed/backend/mongo.rb, line 7
def enqueue_at(payload)
  payload_id = BSON::ObjectId.from_time(payload.run_at, :unique => true)
  delayed_jobs.insert({
                        :_id => payload_id,
                        :klass => payload.klass.to_s,
                        :queue => payload.queue,
                        :args => payload.args
                      })
  logger.debug { "Enqueued delayed job #{payload}" }
  payload
end
next_delayed_job() click to toggle source

Retrieves next delayed job.

If there is no job to enqueue returns nil.

# File lib/qu/delayed/backend/mongo.rb, line 22
def next_delayed_job
  doc = delayed_jobs.find_and_modify(:query => {:_id => {'$lte' => BSON::ObjectId.from_time(Time.now) }}, :remove => true, :safe => true)
  return nil if doc.nil?

  Qu::Delayed::Payload.new(doc).undelay
rescue ::Mongo::OperationFailure
  nil
end