Module: ActsAsJobStatus
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/acts_as_job_status.rb
Overview
ActsAsJobStatus
Tracks the status of background jobs. Intended to be used in a wizard.
Mark your model with ‘acts_as_job_status’
Add the the following columns
job_status :string job_started_at :datetime job_ended_at :datetime job_error :text
Use with_job_status in your background job
Defined Under Namespace
Modules: Base, ClassMethods
Instance Method Summary collapse
- #job_status_completed? ⇒ Boolean
- #job_status_completed_items_count ⇒ Object
- #job_status_display_item_counts? ⇒ Boolean
- #job_status_enqueued? ⇒ Boolean
- #job_status_error? ⇒ Boolean
- #job_status_running? ⇒ Boolean
- #job_status_total_items_count ⇒ Object
-
#perform_with_job_status!(&block) ⇒ Object
Instance Methods.
- #with_job_status(&block) ⇒ Object
Instance Method Details
#job_status_completed? ⇒ Boolean
62 63 64 |
# File 'app/models/concerns/acts_as_job_status.rb', line 62 def job_status_completed? job_status == 'completed' end |
#job_status_completed_items_count ⇒ Object
46 47 48 |
# File 'app/models/concerns/acts_as_job_status.rb', line 46 def job_status_completed_items_count nil end |
#job_status_display_item_counts? ⇒ Boolean
42 43 44 |
# File 'app/models/concerns/acts_as_job_status.rb', line 42 def job_status_display_item_counts? job_status_completed_items_count.present? && job_status_total_items_count.present? end |
#job_status_enqueued? ⇒ Boolean
54 55 56 |
# File 'app/models/concerns/acts_as_job_status.rb', line 54 def job_status_enqueued? job_status == 'enqueued' end |
#job_status_error? ⇒ Boolean
66 67 68 |
# File 'app/models/concerns/acts_as_job_status.rb', line 66 def job_status_error? job_status == 'error' end |
#job_status_running? ⇒ Boolean
58 59 60 |
# File 'app/models/concerns/acts_as_job_status.rb', line 58 def job_status_running? job_status == 'running' end |
#job_status_total_items_count ⇒ Object
50 51 52 |
# File 'app/models/concerns/acts_as_job_status.rb', line 50 def job_status_total_items_count nil end |
#perform_with_job_status!(&block) ⇒ Object
Instance Methods
34 35 36 37 38 39 40 |
# File 'app/models/concerns/acts_as_job_status.rb', line 34 def perform_with_job_status!(&block) assign_attributes(job_status: nil, job_started_at: nil, job_ended_at: nil, job_error: nil) after_commit { yield } save! end |
#with_job_status(&block) ⇒ Object
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'app/models/concerns/acts_as_job_status.rb', line 70 def with_job_status(&block) self.class.where(id: id).update_all( job_status: :running, job_started_at: Time.zone.now, job_ended_at: nil, job_error: nil ) exception = nil job_status = nil job_error = nil begin success = yield raise('Unexpected error') unless success job_status = :completed rescue Exception => e exception = e job_status = :error job_error = e..presence || 'Unexpected error' end self.class.where(id: id).update_all( job_status: job_status, job_ended_at: Time.zone.now, job_error: job_error ) if job_status == :error EffectiveLogger.error(exception., associated: self) if defined?(EffectiveLogger) ExceptionNotifier.notify_exception(exception, data: { id: id, class_name: self.class.name }) if defined?(ExceptionNotifier) end if job_status == :error && !ENV['TESTING_ACTS_AS_JOB_STATUS'] raise(exception) unless Rails.env.production? || Rails.env.staging? end true end |