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