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