Class: Hyrax::Operation
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Hyrax::Operation
- Defined in:
- app/models/hyrax/operation.rb
Overview
The database storage of inter-related jobs and their states.
Direct Known Subclasses
Constant Summary collapse
- PENDING =
'pending'.freeze
- PERFORMING =
'performing'.freeze
- FAILURE =
'failure'.freeze
- SUCCESS =
'success'.freeze
Instance Method Summary collapse
-
#fail!(message = nil) ⇒ Object
Mark this operation as a FAILURE.
-
#pending_job(job) ⇒ Object
Sets the operation status to PENDING.
-
#performing! ⇒ Object
Sets the operation status to PERFORMING.
-
#rollup_status ⇒ Object
If this is a batch job (has children), check to see if all the children are complete.
-
#success! ⇒ Object
Mark this operation as a SUCCESS.
Instance Method Details
#fail!(message = nil) ⇒ Object
Where are these callbacks defined? Document this
This will run any registered :success callbacks
Mark this operation as a FAILURE. If this is a child operation, roll up to the parent any failures.
66 67 68 69 70 71 |
# File 'app/models/hyrax/operation.rb', line 66 def fail!( = nil) run_callbacks :failure do update(status: FAILURE, message: ) parent.rollup_status if parent end end |
#pending_job(job) ⇒ Object
Sets the operation status to PENDING
82 83 84 |
# File 'app/models/hyrax/operation.rb', line 82 def pending_job(job) update(job_class: job.class.to_s, job_id: job.job_id, status: Hyrax::Operation::PENDING) end |
#performing! ⇒ Object
Sets the operation status to PERFORMING
75 76 77 |
# File 'app/models/hyrax/operation.rb', line 75 def performing! update(status: PERFORMING) end |
#rollup_status ⇒ Object
If this is a batch job (has children), check to see if all the children are complete
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/models/hyrax/operation.rb', line 28 def rollup_status with_lock do # We don't need all of the status of the children, just need to see # if there is at least one PENDING, PERFORMING, or FAILURE. # however, we can't use distinct with order by (from acts_as_nested_set) # with postgres or you get the following error: # ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list stats = children.pluck(:status).uniq # Don't mark as pass or fail until all jobs are complete return if stats.include?(PENDING) || stats.include?(PERFORMING) return fail! if stats.include?(FAILURE) success! end end |
#success! ⇒ Object
Where are these callbacks defined? Document this
This will run any registered :success callbacks
Mark this operation as a SUCCESS. If this is a child operation, roll up to the parent any failures.
51 52 53 54 55 56 |
# File 'app/models/hyrax/operation.rb', line 51 def success! run_callbacks :success do update(status: SUCCESS) parent.rollup_status if parent end end |