lib/good_job/job.rb in good_job-0.5.0 vs lib/good_job/job.rb in good_job-0.6.0

- old
+ new

@@ -2,9 +2,32 @@ class Job < ActiveRecord::Base include Lockable self.table_name = 'good_jobs' + scope :only_scheduled, -> { where("scheduled_at < ?", Time.current).or(where(scheduled_at: nil)) } + scope :priority_ordered, -> { order(priority: :desc) } + scope :to_performer, -> { Performer.new(self) } + + class Performer + def initialize(query) + @query = query + end + + def next + good_job = nil + + @query.limit(1).with_advisory_lock do |good_jobs| + good_job = good_jobs.first + break unless good_job + + good_job.perform + end + + good_job + end + end + def self.enqueue(active_job, scheduled_at: nil, create_with_advisory_lock: false) good_job = nil ActiveSupport::Notifications.instrument("enqueue_job.good_job", { active_job: active_job, scheduled_at: scheduled_at, create_with_advisory_lock: create_with_advisory_lock }) do |instrument_payload| good_job = GoodJob::Job.new( queue_name: active_job.queue_name,