class Object

Public Class Methods

ready_to_run(worker_name, max_run_time) click to toggle source

Overriding default scope so we don't select already completed jobs

# File lib/delayed_job_progress/extensions/job.rb, line 6
  def self.ready_to_run(worker_name, max_run_time)
    where_sql = <<-SQL.strip_heredoc
      (run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR locked_by = ?)
      AND failed_at IS NULL
      AND completed_at IS NULL
    SQL
    where(where_sql, db_time_now, db_time_now - max_run_time, worker_name)
  end

Public Instance Methods

destroy(force_destroy = false) click to toggle source
Calls superclass method
# File lib/delayed_job_progress/extensions/job.rb, line 58
def destroy(force_destroy = false)
  if destroy_completed_jobs? || force_destroy
    super()
  else
    update_columns(
      completed_at:     Time.zone.now,
      progress_current: self.progress_max,
      locked_at:        nil,
      locked_by:        nil
    )
  end
end
destroy_completed_jobs?() click to toggle source
# File lib/delayed_job_progress/extensions/job.rb, line 52
def destroy_completed_jobs?
  payload_object.respond_to?(:destroy_completed_jobs?) ?
    payload_object.destroy_completed_jobs? :
    Delayed::Worker.destroy_completed_jobs
end
error=(error) click to toggle source

Introducing `error_message` attribute that excludes backtrace, also able to be manually set it before job errors out.

# File lib/delayed_job_progress/extensions/job.rb, line 43
def error=(error)
  @error = error

  if self.respond_to?(:last_error=)
    self.error_message ||= error.message
    self.last_error = "#{error.message}\n#{error.backtrace.join("\n")}"
  end
end
hook(name, *args) click to toggle source

When enqueue hook is executed, we need to look if there's an identifier provided If there's another Delayed::Job out there with same identifier we need to bail

Calls superclass method
# File lib/delayed_job_progress/extensions/job.rb, line 24
def hook(name, *args)
  super

  if name == :enqueue
    self.handler_class = payload_object.class.to_s
  end
end
payload_object=(object) click to toggle source

Associating AR record with Delayed::Job. Generally when doing: `something.delay.method`

Calls superclass method
# File lib/delayed_job_progress/extensions/job.rb, line 33
def payload_object=(object)
  if object.respond_to?(:object) && object.object.is_a?(ActiveRecord::Base)
    self.record = object.object
  end

  super
end
status() click to toggle source

Helper method to easily grab state of the job

# File lib/delayed_job_progress/extensions/job.rb, line 16
def status
  failed_at.present?? :failed :
  completed_at.present?? :completed :
  locked_at.present?? :processing : :queued
end