Sha256: c9adcf683a074733f1563545c4a2e13026b0476fbb34d6f0f494efe49f6fbc6e
Contents?: true
Size: 1.87 KB
Versions: 7
Compression:
Stored size: 1.87 KB
Contents
module CanvasSync::JobUniqueness module Compat module ActiveJob class ActiveJobLockContext < LockContext def job_scheduled_at job_instance&.scheduled_at end def reenqueue(schedule_in:) job_class.set( queue: job_queue.to_sym, wait: schedule_in, priortity: job_instance.priority, ).perform_later(*job_instance.arguments) end end module UniqueJobExtension extend ActiveSupport::Concern included do set_callback(:enqueue, :around, prepend: true) do |job, block| ctx = uniqueness_lock_context @uniqueness_cache_data = ctx.cache_data ctx.handle_lifecycle!(:enqueue, &block) end around_perform do |job, block| ctx = uniqueness_lock_context ctx.handle_lifecycle!(:perform, &block) end end def serialize super.tap do |data| data['uniqueness_cache_data'] = @uniqueness_cache_data.stringify_keys end end def deserialize(data) super @uniqueness_cache_data = data['uniqueness_cache_data'].symbolize_keys end def uniqueness_lock_context ActiveJobLockContext.new({ job_clazz: self.class, jid: self.job_id, args: self.arguments, queue: self.queue_name, **(@uniqueness_cache_data || {}) }, job_instance: self) end end module JobExtension extend ActiveSupport::Concern include UniqueJobCommon class_methods do def ensure_uniqueness(**kwargs) super(**kwargs) include UniqueJobExtension end end end def self.configure ::ActiveJob::Base.include JobExtension end end end end
Version data entries
7 entries across 7 versions & 1 rubygems