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