class BeTaskable::Task
Public Class Methods
current()
click to toggle source
# File lib/be_taskable/task.rb, line 17 def self.current self.uncompleted.unexpired end
Public Instance Methods
_on_completion()
click to toggle source
called when the task is marked as complete by the state machine
# File lib/be_taskable/task.rb, line 157 def _on_completion self.update_attribute(:completed_at, DateTime.now) assignments.update_all(completed_at: DateTime.now) resolver.on_completion(self) end
_on_expiration()
click to toggle source
expires the task and all the assignments
# File lib/be_taskable/task.rb, line 164 def _on_expiration self.update_attribute(:expired_at, DateTime.now) assignments.each do |assignment| assignment.expire end resolver.on_expiration(self) end
_runner()
click to toggle source
# File lib/be_taskable/task.rb, line 152 def _runner @runner ||= BeTaskable::TaskRunner.new(self) end
all_assignments_done?()
click to toggle source
# File lib/be_taskable/task.rb, line 135 def all_assignments_done? assignments.all?{ |a| a.completed? } end
any_assignment_done?()
click to toggle source
# File lib/be_taskable/task.rb, line 139 def any_assignment_done? assignments.any?{ |a| a.completed? } end
assignees()
click to toggle source
@return {Array} List of current assignees for this task
# File lib/be_taskable/task.rb, line 87 def assignees assignments.map(&:assignee) end
assignment_for(assignee)
click to toggle source
# File lib/be_taskable/task.rb, line 96 def assignment_for(assignee) assignments.where(assignee_id: assignee.id).last end
audit()
click to toggle source
calls refresh and then tally needs to run for irrelevant
# File lib/be_taskable/task.rb, line 61 def audit return if completed? refresh tally end
complete_by(assignee)
click to toggle source
completes the assignment for the given assignee @param {Object} assignee @return false if no assignment found
# File lib/be_taskable/task.rb, line 70 def complete_by(assignee) assignment = assignment_for(assignee) return false unless assignment assignment.complete end
consensus?()
click to toggle source
consensus? @return Boolean
# File lib/be_taskable/task.rb, line 78 def consensus? resolver.consensus?(self) end
enacted_assignments()
click to toggle source
# File lib/be_taskable/task.rb, line 100 def enacted_assignments assignments.enacted end
label!()
click to toggle source
@return {String} Gets the label from the resolver for this task
# File lib/be_taskable/task.rb, line 92 def label! resolver.label_for_task(self) end
majority_of_assignments_done?()
click to toggle source
# File lib/be_taskable/task.rb, line 143 def majority_of_assignments_done? done = assignments.find_all{ |a| a.completed? } done.size > (assignments.size.to_f / 2) end
on_assignment_completed(assignment)
click to toggle source
hook: called from an assignment when completed
# File lib/be_taskable/task.rb, line 127 def on_assignment_completed(assignment) tally end
on_creation()
click to toggle source
# File lib/be_taskable/task.rb, line 122 def on_creation resolver.on_creation(self) end
refresh()
click to toggle source
refresh Check that the current assignments are still relevant Create new assignments as needed or deletes them needs to run for irrelevant
# File lib/be_taskable/task.rb, line 46 def refresh return if completed? _runner.refresh end
resolver()
click to toggle source
resolver @return A resolver instance
# File lib/be_taskable/task.rb, line 106 def resolver if taskable taskable.task_resolver_for_action(action) else # puts self.id # puts self.taskable_id # puts self.taskable_type # puts self.taskable raise "Cannot find taskable" end end
tally()
click to toggle source
tally Check all the completed assignments and decides wherever to complete the task @return nil if completed
# File lib/be_taskable/task.rb, line 54 def tally return if completed? complete if consensus? end