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