Class: BeTaskable::TaskRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/be_taskable/task_runner.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(task) ⇒ TaskRunner

Returns a new instance of TaskRunner.

Raises:

  • (ArgumentError)


6
7
8
9
# File 'lib/be_taskable/task_runner.rb', line 6

def initialize(task)
  raise ArgumentError, "Invalid task" unless task.is_a?(BeTaskable::Task)
  @task = task
end

Instance Attribute Details

#taskObject (readonly)

Returns the value of attribute task.



4
5
6
# File 'lib/be_taskable/task_runner.rb', line 4

def task
  @task
end

Instance Method Details

#_assigneesObject



78
79
80
# File 'lib/be_taskable/task_runner.rb', line 78

def _assignees
  resolver.assignees_for_task(task)
end

#_assignmentsObject



82
83
84
# File 'lib/be_taskable/task_runner.rb', line 82

def _assignments
  task.assignments
end

#_delete_unconfirmed_assignmentsObject



36
37
38
# File 'lib/be_taskable/task_runner.rb', line 36

def _delete_unconfirmed_assignments
  _assignments.uncompleted.unconfirmed.delete_all
end

#_make_task_irrelevantObject



48
49
50
51
52
# File 'lib/be_taskable/task_runner.rb', line 48

def _make_task_irrelevant
  # assignments will be just deleted
  # no need to update them
  task.make_irrelevant if task.can_make_irrelevant?
end

#_make_task_relevantObject



44
45
46
# File 'lib/be_taskable/task_runner.rb', line 44

def _make_task_relevant
  task.make_relevant if task.can_make_relevant?
end

#_mark_assignments_as_unconfirmedObject



32
33
34
# File 'lib/be_taskable/task_runner.rb', line 32

def _mark_assignments_as_unconfirmed
  _assignments.uncompleted.update_all(confirmed: false)
end

#_relevant?Boolean

Returns:

  • (Boolean)


72
73
74
75
76
# File 'lib/be_taskable/task_runner.rb', line 72

def _relevant?
  # if the taskable cannot be found then assume it is not relevant
  return false unless task.taskable
  resolver.is_task_relevant?(task)
end

#_update_assignmentsObject



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/be_taskable/task_runner.rb', line 54

def _update_assignments
  _assignees.each do |assignee|
    # find the assignment
    assignment = _assignments.where(assignee_id: assignee.id).last

    unless assignment
      assignment = _assignments.create(assignee: assignee)
    end
    
    assignment.complete_by = resolver.due_date_for_assignment(assignment)
    assignment.visible_at = resolver.visible_date_for_assignment(assignment)
    assignment.label = resolver.label_for_assignment(assignment)
    assignment.url = resolver.url_for_assignment(assignment)
    assignment.confirmed = true
    assignment.save
  end
end

#_update_task_labelObject



40
41
42
# File 'lib/be_taskable/task_runner.rb', line 40

def _update_task_label
  task.update_attribute(:label, resolver.label_for_task(task))
end

#refreshObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/be_taskable/task_runner.rb', line 11

def refresh

  return if task.completed?

  _mark_assignments_as_unconfirmed

  if _relevant?
    _make_task_relevant
    _update_task_label
    _update_assignments
  else
    _make_task_irrelevant
  end

  _delete_unconfirmed_assignments
end

#resolverObject



28
29
30
# File 'lib/be_taskable/task_runner.rb', line 28

def resolver
  task.resolver
end