class Delayed::Backend::Ironmq::Job

Public Class Methods

new(data = {}) click to toggle source
# File lib/delayed/backend/ironmq.rb, line 20
def initialize(data = {})
  @msg = nil
  if data.is_a?(IronMQ::Message)
    @msg = data
    data = JSON.load(data.body)
  end

  data.symbolize_keys!
  payload_obj = data.delete(:payload_object) || data.delete(:handler)

  @queue_name = data[:queue_name] || Delayed::Worker.queue_name
  @delay      = data[:delay]      || Delayed::Worker.delay
  @timeout    = data[:timeout]    || Delayed::Worker.timeout
  @expires_in = data[:expires_in] || Delayed::Worker.expires_in
  @attributes = data
  self.payload_object = payload_obj
end

Public Instance Methods

destroy() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 74
def destroy
  if @msg
    @msg.delete
  end
end
fail!() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 80
def fail!
  destroy
  # v2: move to separate queue
end
id() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 106
def id
  @msg.id if @msg
end
lock_exclusively!(*args) click to toggle source

No need to check locks

# File lib/delayed/backend/ironmq.rb, line 92
def lock_exclusively!(*args)
  true
end
payload_object() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 38
def payload_object
  @payload_object ||= YAML.load(self.handler)
rescue TypeError, LoadError, NameError, ArgumentError => e
  raise DeserializationError,
    "Job failed to load: #{e.message}. Handler: #{handler.inspect}"
end
payload_object=(object) click to toggle source
# File lib/delayed/backend/ironmq.rb, line 45
def payload_object=(object)
  if object.is_a? String
    @payload_object = YAML.load(object)
    self.handler = object
  else
    @payload_object = object
    self.handler = object.to_yaml
  end
end
reload(*args) click to toggle source
Calls superclass method
# File lib/delayed/backend/ironmq.rb, line 101
def reload(*args)
  # reset
  super
end
save() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 55
def save
  if @attributes[:handler].blank?
    raise "Handler missing!"
  end
  payload = JSON.dump(@attributes)

  @msg.delete if @msg

  ironmq.queue(queue_name).post(payload,
                                :timeout    => @timeout,
                                :delay      => @delay,
                                :expires_in => @expires_in)
  true
end
save!() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 70
def save!
  save
end
unlock(*args) click to toggle source

No need to check locks

# File lib/delayed/backend/ironmq.rb, line 97
def unlock(*args)
  true
end
update_attributes(attributes) click to toggle source
# File lib/delayed/backend/ironmq.rb, line 85
def update_attributes(attributes)
  attributes.symbolize_keys!
  @attributes.merge attributes
  save
end

Private Instance Methods

ironmq() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 116
def ironmq
  ::Delayed::Worker.ironmq
end
queue_name() click to toggle source
# File lib/delayed/backend/ironmq.rb, line 112
def queue_name
  "#{@queue_name}_#{@attributes[:priority] || 0}"
end