Class: TaskManager::Task

Inherits:
ActiveRecord::Base
  • Object
show all
Extended by:
Enumerize
Defined in:
app/models/task_manager/task.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.activeObject



68
69
70
# File 'app/models/task_manager/task.rb', line 68

def active
  where("status = ? OR status = ?", :new, :in_process)
end

.just_expiredObject



72
73
74
# File 'app/models/task_manager/task.rb', line 72

def just_expired
  active.where("deadline <= ?", Time.now)
end

.remindableObject



76
77
78
# File 'app/models/task_manager/task.rb', line 76

def remindable
  active.where("reminding_at <= ?", Time.now)
end

Instance Method Details

#assigneeObject



20
21
22
# File 'app/models/task_manager/task.rb', line 20

def assignee
  assignable.assignee
end

#callbacksObject



24
25
26
# File 'app/models/task_manager/task.rb', line 24

def callbacks
  callables.collect(&:callback)
end

#expireObject



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

#finishObject



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_atObject



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

#remindObject

提醒任务执行者,任务即将到期,并且修改任务下次提醒时间。 如果‘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

Returns:

  • (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