Class: TaskManager::Task
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- TaskManager::Task
- Extended by:
- Enumerize
- Defined in:
- app/models/task_manager/task.rb
Class Method Summary collapse
Instance Method Summary collapse
- #assignee ⇒ Object
- #callbacks ⇒ Object
- #expire ⇒ Object
- #finish ⇒ Object
- #next_reminding_at ⇒ Object
-
#remind ⇒ Object
提醒任务执行者,任务即将到期,并且修改任务下次提醒时间。 如果‘next_reminding_at`返回`nil`,则表示该任务不再需要提醒。.
- #remindable? ⇒ Boolean
Class Method Details
.active ⇒ Object
68 69 70 |
# File 'app/models/task_manager/task.rb', line 68 def active where("status = ? OR status = ?", :new, :in_process) end |
.just_expired ⇒ Object
72 73 74 |
# File 'app/models/task_manager/task.rb', line 72 def just_expired active.where("deadline <= ?", Time.now) end |
.remindable ⇒ Object
76 77 78 |
# File 'app/models/task_manager/task.rb', line 76 def remindable active.where("reminding_at <= ?", Time.now) end |
Instance Method Details
#assignee ⇒ Object
20 21 22 |
# File 'app/models/task_manager/task.rb', line 20 def assignee assignable.assignee end |
#callbacks ⇒ Object
24 25 26 |
# File 'app/models/task_manager/task.rb', line 24 def callbacks callables.collect(&:callback) end |
#expire ⇒ Object
53 54 55 56 57 58 59 60 61 |
# File 'app/models/task_manager/task.rb', line 53 def expire Task.transaction do callbacks.each do |c| c.call(self) if c.respond_to?(:call) end update_attributes!(status: :expired) end end |
#finish ⇒ Object
63 64 65 |
# File 'app/models/task_manager/task.rb', line 63 def finish update_attributes(finished_at: Time.now, status: :finished) end |
#next_reminding_at ⇒ Object
35 36 37 38 39 40 41 |
# File 'app/models/task_manager/task.rb', line 35 def next_reminding_at if remindable? seconds = (deadline - reminding_at) / 60 reminding_at.since(seconds) end end |
#remind ⇒ Object
提醒任务执行者,任务即将到期,并且修改任务下次提醒时间。 如果‘next_reminding_at`返回`nil`,则表示该任务不再需要提醒。
45 46 47 48 49 50 51 |
# File 'app/models/task_manager/task.rb', line 45 def remind Task.transaction do assignee.remind_of_expiring_task(self) if assignee.respond_to?(:remind_of_expiring_task) update_attributes!(reminding_at: next_reminding_at) end end |
#remindable? ⇒ Boolean
28 29 30 31 32 33 |
# File 'app/models/task_manager/task.rb', line 28 def remindable? return false if reminding_at.nil? (status == :new || status == :in_process) && (deadline - reminding_at) / 60 >= 2 * 24 * 60 * 60 end |