class TaskwarriorWeb::Task
MAIN TASK CLASS
Attributes
_errors[RW]
annotations[RW]
depends[RW]
description[RW]
due[RW]
end[RW]
entry[RW]
priority[RW]
project[RW]
start[RW]
status[RW]
urgency[RW]
uuid[RW]
wait[RW]
Public Class Methods
count(*args)
click to toggle source
Get the number of tasks for some paramters.
# File lib/taskwarrior-web/model/task.rb, line 116 def self.count(*args) self.query(*args).count end
exists?(uuid)
click to toggle source
Whether or not a given task exists. Basically sugar for Task.find
, but returns a boolean instead of the actual task.
# File lib/taskwarrior-web/model/task.rb, line 89 def self.exists?(uuid) !!self.find(uuid) end
find(uuid)
click to toggle source
Get a single task by UUID or ID. Returns nil if no such task was found.
# File lib/taskwarrior-web/model/task.rb, line 80 def self.find(uuid) tasks = Parser.parse(Command.new(:query, nil, :uuid => uuid).run) tasks.empty? ? nil : Task.new(tasks.first) end
method_missing(method_sym, *arguments, &block)
click to toggle source
Define method_missing
to implement dynamic finder methods
Calls superclass method
# File lib/taskwarrior-web/model/task.rb, line 121 def self.method_missing(method_sym, *arguments, &block) match = TaskDynamicFinderMatch.new(method_sym) if match.match? self.query(match.attribute.to_s => arguments.first.to_s) else super end end
new(attributes = {})
click to toggle source
MODEL METHODS FOR INDIVIDUAL TASKS
# File lib/taskwarrior-web/model/task.rb, line 16 def initialize(attributes = {}) attributes.each do |attr, value| send("#{attr}=", value) if respond_to?(attr.to_sym) end @_errors = [] @tags = [] if @tags.nil? @annotations = [] if @annotations.nil? end
query(*args)
click to toggle source
Run queries, returns an array of tasks that meet the criteria.
Filters can either be a hash of conditions, or an already-constructed taskwarrior filter string.
For example: { :description => 'test', 'project.not' => '' } 'description:test project.not:'
# File lib/taskwarrior-web/model/task.rb, line 103 def self.query(*args) tasks = [] if !args.empty? && args.first.is_a?(String) command = Command.new(:query, nil, :description => args.first) else command = Command.new(:query, nil, *args) end Parser.parse(command.run).each { |result| tasks << Task.new(result) } tasks end
respond_to?(method_sym, include_private = false)
click to toggle source
Implement respond_to? so that our dynamic finders are declared
Calls superclass method
# File lib/taskwarrior-web/model/task.rb, line 131 def self.respond_to?(method_sym, include_private = false) if TaskDynamicFinderMatch.new(method_sym).match? true else super end end
Public Instance Methods
active?()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 61 def active? status.in? ['pending', 'waiting'] end
annotations=(annotations)
click to toggle source
Create annotation instances.
# File lib/taskwarrior-web/model/task.rb, line 48 def annotations=(annotations) @annotations = [] annotations.each do |annotation| annotation.merge({ :task_id => self.uuid }) @annotations << Annotation.new(annotation) end end
complete!()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 30 def complete! Command.new(:complete, self.uuid).run end
delete!()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 34 def delete! Command.new(:delete, self.uuid).run end
is_valid?()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 56 def is_valid? @_errors << 'You must provide a description' if self.description.blank? @_errors.empty? end
save!()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 26 def save! @uuid ? Command.new(:update, uuid, self.to_hash).run : Command.new(:add, nil, self.to_hash).run end
to_hash()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 65 def to_hash Hash[instance_variables.select { |var| !var.to_s.start_with?('@_') }.map { |var| [var[1..-1].to_sym, instance_variable_get(var)] }] end
to_s()
click to toggle source
# File lib/taskwarrior-web/model/task.rb, line 69 def to_s description.truncate(20) end