y-yagi/activejob-cancel

View on GitHub
lib/active_job/cancel/queue_adapters/delayed_job_adapter.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'delayed_job'
require 'delayed_job_active_record'

module ActiveJob
  module Cancel
    module QueueAdapters
      class DelayedJobAdapter
        def cancel(job_id, queue_name)
          queue_name = queue_name.call if queue_name.is_a?(Proc)
          job = find_job(job_id, queue_name)
          if job
            job.destroy
            return true
          end
          false
        end

        def cancel_by(opts, _queue_name)
          raise ArgumentError, 'Please specify ":provider_job_id"' unless opts[:provider_job_id]
          job_id = opts[:provider_job_id]

          job = Delayed::Job.find_by(id: job_id)
          if job
            job.destroy
            return true
          end
          false
        end

        private
          def find_job(job_id, queue_name)
            Delayed::Job.where('handler LIKE ?', "%job_id: #{job_id}%").where(queue: queue_name).first
          end
      end
    end
  end
end