Class: QueuedTask
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- QueuedTask
- Includes:
- Plok::Loggable
- Defined in:
- app/models/queued_task.rb
Class Method Summary collapse
Instance Method Summary collapse
- #dequeue! ⇒ Object
- #execute! ⇒ Object
- #lock! ⇒ Object
- #process! ⇒ Object
- #stuck? ⇒ Boolean
- #unlock! ⇒ Object
- #unlocked? ⇒ Boolean
Methods included from Plok::Loggable
Class Method Details
.queue(klass, data) ⇒ Object
29 30 31 32 33 |
# File 'app/models/queued_task.rb', line 29 def self.queue(klass, data) task = create!(klass: klass.to_s, data: data.except(:perform_at)) task.update(perform_at: data[:perform_at]) if data[:perform_at].present? task end |
.queue_unless_already_queued(klass, data) ⇒ Object
35 36 37 38 39 |
# File 'app/models/queued_task.rb', line 35 def self.queue_unless_already_queued(klass, data) task = find_by(klass: klass, data: data) return task if task.present? self.queue(klass, data) end |
Instance Method Details
#dequeue! ⇒ Object
41 42 43 |
# File 'app/models/queued_task.rb', line 41 def dequeue! destroy end |
#execute! ⇒ Object
25 26 27 |
# File 'app/models/queued_task.rb', line 25 def execute! klass.to_s.constantize.new(data).execute! end |
#lock! ⇒ Object
13 14 15 |
# File 'app/models/queued_task.rb', line 13 def lock! update_attribute :locked, true end |
#process! ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'app/models/queued_task.rb', line 45 def process! lock! begin execute! dequeue! rescue raise ensure unlock! unless destroyed? end end |
#stuck? ⇒ Boolean
58 59 60 61 62 63 |
# File 'app/models/queued_task.rb', line 58 def stuck? return false if locked? # Make sure task is past its perform_at timestamp. return perform_at <= 30.minutes.ago if perform_at.present? created_at <= 30.minutes.ago end |
#unlock! ⇒ Object
17 18 19 |
# File 'app/models/queued_task.rb', line 17 def unlock! update_attribute :locked, false end |
#unlocked? ⇒ Boolean
21 22 23 |
# File 'app/models/queued_task.rb', line 21 def unlocked? !locked? end |