class DjOne::Plugin::Handler

Public Class Methods

new(lifecycle) click to toggle source
# File lib/dj_one.rb, line 18
def initialize(lifecycle)
  lifecycle.around(:enqueue, &method(:enqueue))
  lifecycle.around(:perform, &method(:perform))
  lifecycle.around(:failure, &method(:failure))
end

Public Instance Methods

calculate_run_at(job) click to toggle source
# File lib/dj_one.rb, line 53
def calculate_run_at(job)
  delay = get_attribute(job, :duplicate_delay) || DEFAULT_DUPLICATE_DELAY
  Time.now + delay
end
enqueue(job, &proceed) click to toggle source
# File lib/dj_one.rb, line 24
def enqueue(job, &proceed)
  job.unique_id = get_attribute(job, :enqueue_id)
  proceed.call(job)
rescue ActiveRecord::RecordNotUnique
end
failure(worker, job, &proceed) click to toggle source
# File lib/dj_one.rb, line 41
def failure(worker, job, &proceed)
  job.unique_id = nil
  proceed.call(worker, job)
end
get_attribute(job, method_name) click to toggle source
# File lib/dj_one.rb, line 46
def get_attribute(job, method_name)
  object = job.payload_object
  object.respond_to?(method_name) ? object.public_send(method_name) : nil
rescue Delayed::DeserializationError
  nil
end
perform(worker, job, &proceed) click to toggle source
# File lib/dj_one.rb, line 30
def perform(worker, job, &proceed)
  job.unique_id = get_attribute(job, :perform_id)
  job.save! if job.changed?

  proceed.call(worker, job)
rescue ActiveRecord::RecordNotUnique
  job.unique_id = job.unique_id_was
  job.run_at = calculate_run_at(job)
  job.save! if job.changed?
end