Module: Qu::Delayed::Backend::Mongo

Defined in:
lib/qu/delayed/backend/mongo.rb

Instance Method Summary collapse

Instance Method Details

#clear_delayedObject



35
36
37
38
# File 'lib/qu/delayed/backend/mongo.rb', line 35

def clear_delayed
  logger.info { "Clearing delayed jobs queue" }
  delayed_jobs.drop
end

#delayed_jobsObject



31
32
33
# File 'lib/qu/delayed/backend/mongo.rb', line 31

def delayed_jobs
  self[:delayed_jobs]
end

#enqueue_at(payload) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
# 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_jobObject

Retrieves next delayed job.

If there is no job to enqueue returns nil.



22
23
24
25
26
27
28
29
# 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