Class: Asana::Resources::Task
- Includes:
- AttachmentUploading, EventSubscription
- Defined in:
- lib/asana/resources/task.rb
Overview
The task is the basic object around which many operations in Asana are centered. In the Asana application, multiple tasks populate the middle pane according to some view parameters, and the set of selected tasks determines the more detailed information presented in the details pane.
Instance Attribute Summary collapse
- #assignee ⇒ Object readonly
- #assignee_status ⇒ Object readonly
- #completed ⇒ Object readonly
- #completed_at ⇒ Object readonly
- #created_at ⇒ Object readonly
- #due_at ⇒ Object readonly
- #due_on ⇒ Object readonly
- #external ⇒ Object readonly
- #followers ⇒ Object readonly
- #hearted ⇒ Object readonly
- #hearts ⇒ Object readonly
- #id ⇒ Object readonly
- #memberships ⇒ Object readonly
- #modified_at ⇒ Object readonly
- #name ⇒ Object readonly
- #notes ⇒ Object readonly
- #num_hearts ⇒ Object readonly
- #parent ⇒ Object readonly
-
#projects(per_page: 20, options: {}) ⇒ Object
readonly
Returns a compact representation of all of the projects the task is in.
- #workspace ⇒ Object readonly
Class Method Summary collapse
-
.create(client, workspace: nil, options: {}, **data) ⇒ Object
Creating a new task is as easy as POSTing to the ‘/tasks` endpoint with a data block containing the fields you’d like to set on the task.
-
.create_in_workspace(client, workspace: required("workspace"), options: {}, **data) ⇒ Object
Creating a new task is as easy as POSTing to the ‘/tasks` endpoint with a data block containing the fields you’d like to set on the task.
-
.find_all(client, assignee: nil, workspace: nil, completed_since: nil, modified_since: nil, per_page: 20, options: {}) ⇒ Object
Returns the compact task records for some filtered set of tasks.
-
.find_by_id(client, id, options: {}) ⇒ Object
Returns the complete task record for a single task.
-
.find_by_project(client, projectId: required("projectId"), per_page: 20, options: {}) ⇒ Object
Returns the compact task records for all tasks within the given project, ordered by their priority within the project.
-
.find_by_tag(client, tag: required("tag"), per_page: 20, options: {}) ⇒ Object
Returns the compact task records for all tasks with the given tag.
-
.plural_name ⇒ Object
Returns the plural name of the resource.
Instance Method Summary collapse
-
#add_comment(text: required("text"), options: {}, **data) ⇒ Object
Adds a comment to a task.
-
#add_followers(followers: required("followers"), options: {}, **data) ⇒ Object
Adds each of the specified followers to the task, if they are not already following.
-
#add_project(project: required("project"), insertAfter: nil, insertBefore: nil, section: nil, options: {}, **data) ⇒ Object
Adds the task to the specified project, in the optional location specified.
-
#add_subtask(options: {}, **data) ⇒ Object
Creates a new subtask and adds it to the parent task.
-
#add_tag(tag: required("tag"), options: {}, **data) ⇒ Object
Adds a tag to a task.
-
#delete ⇒ Object
A specific, existing task can be deleted by making a DELETE request on the URL for that task.
-
#remove_followers(followers: required("followers"), options: {}, **data) ⇒ Object
Removes each of the specified followers from the task if they are following.
-
#remove_project(project: required("project"), options: {}, **data) ⇒ Object
Removes the task from the specified project.
-
#remove_tag(tag: required("tag"), options: {}, **data) ⇒ Object
Removes a tag from the task.
-
#set_parent(parent: required("parent"), options: {}, **data) ⇒ Object
Changes the parent of a task.
-
#stories(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the stories on the task.
-
#subtasks(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the subtasks of a task.
-
#tags(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the tags the task has.
-
#update(options: {}, **data) ⇒ Object
A specific, existing task can be updated by making a PUT request on the URL for that task.
Methods included from EventSubscription
Methods included from AttachmentUploading
Methods inherited from Resource
inherited, #initialize, #method_missing, #refresh, #respond_to_missing?, #to_h, #to_s
Methods included from ResponseHelper
Constructor Details
This class inherits a constructor from Asana::Resources::Resource
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Asana::Resources::Resource
Instance Attribute Details
#assignee ⇒ Object (readonly)
19 20 21 |
# File 'lib/asana/resources/task.rb', line 19 def assignee @assignee end |
#assignee_status ⇒ Object (readonly)
21 22 23 |
# File 'lib/asana/resources/task.rb', line 21 def assignee_status @assignee_status end |
#completed ⇒ Object (readonly)
25 26 27 |
# File 'lib/asana/resources/task.rb', line 25 def completed @completed end |
#completed_at ⇒ Object (readonly)
27 28 29 |
# File 'lib/asana/resources/task.rb', line 27 def completed_at @completed_at end |
#created_at ⇒ Object (readonly)
23 24 25 |
# File 'lib/asana/resources/task.rb', line 23 def created_at @created_at end |
#due_at ⇒ Object (readonly)
31 32 33 |
# File 'lib/asana/resources/task.rb', line 31 def due_at @due_at end |
#due_on ⇒ Object (readonly)
29 30 31 |
# File 'lib/asana/resources/task.rb', line 29 def due_on @due_on end |
#external ⇒ Object (readonly)
33 34 35 |
# File 'lib/asana/resources/task.rb', line 33 def external @external end |
#followers ⇒ Object (readonly)
35 36 37 |
# File 'lib/asana/resources/task.rb', line 35 def followers @followers end |
#hearted ⇒ Object (readonly)
37 38 39 |
# File 'lib/asana/resources/task.rb', line 37 def hearted @hearted end |
#hearts ⇒ Object (readonly)
39 40 41 |
# File 'lib/asana/resources/task.rb', line 39 def hearts @hearts end |
#id ⇒ Object (readonly)
17 18 19 |
# File 'lib/asana/resources/task.rb', line 17 def id @id end |
#memberships ⇒ Object (readonly)
55 56 57 |
# File 'lib/asana/resources/task.rb', line 55 def memberships @memberships end |
#modified_at ⇒ Object (readonly)
41 42 43 |
# File 'lib/asana/resources/task.rb', line 41 def modified_at @modified_at end |
#name ⇒ Object (readonly)
43 44 45 |
# File 'lib/asana/resources/task.rb', line 43 def name @name end |
#notes ⇒ Object (readonly)
45 46 47 |
# File 'lib/asana/resources/task.rb', line 45 def notes @notes end |
#num_hearts ⇒ Object (readonly)
47 48 49 |
# File 'lib/asana/resources/task.rb', line 47 def num_hearts @num_hearts end |
#parent ⇒ Object (readonly)
51 52 53 |
# File 'lib/asana/resources/task.rb', line 51 def parent @parent end |
#projects(per_page: 20, options: {}) ⇒ Object (readonly)
Returns a compact representation of all of the projects the task is in.
209 210 211 |
# File 'lib/asana/resources/task.rb', line 209 def projects @projects end |
#workspace ⇒ Object (readonly)
53 54 55 |
# File 'lib/asana/resources/task.rb', line 53 def workspace @workspace end |
Class Method Details
.create(client, workspace: nil, options: {}, **data) ⇒ Object
Creating a new task is as easy as POSTing to the ‘/tasks` endpoint with a data block containing the fields you’d like to set on the task. Any unspecified fields will take on default values.
Every task is required to be created in a specific workspace, and this workspace cannot be changed once set. The workspace need not be set explicitly if you specify a ‘project` or a `parent` task instead.
74 75 76 77 |
# File 'lib/asana/resources/task.rb', line 74 def create(client, workspace: nil, options: {}, **data) with_params = data.merge(workspace: workspace).reject { |_,v| v.nil? || Array(v).empty? } self.new(parse(client.post("/tasks", body: with_params, options: )).first, client: client) end |
.create_in_workspace(client, workspace: required("workspace"), options: {}, **data) ⇒ Object
Creating a new task is as easy as POSTing to the ‘/tasks` endpoint with a data block containing the fields you’d like to set on the task. Any unspecified fields will take on default values.
Every task is required to be created in a specific workspace, and this workspace cannot be changed once set. The workspace need not be set explicitly if you specify a ‘project` or a `parent` task instead.
90 91 92 93 |
# File 'lib/asana/resources/task.rb', line 90 def create_in_workspace(client, workspace: required("workspace"), options: {}, **data) self.new(parse(client.post("/workspaces/#{workspace}/tasks", body: data, options: )).first, client: client) end |
.find_all(client, assignee: nil, workspace: nil, completed_since: nil, modified_since: nil, per_page: 20, options: {}) ⇒ Object
Returns the compact task records for some filtered set of tasks. Use one or more of the parameters provided to filter the tasks returned.
149 150 151 152 |
# File 'lib/asana/resources/task.rb', line 149 def find_all(client, assignee: nil, workspace: nil, completed_since: nil, modified_since: nil, per_page: 20, options: {}) params = { assignee: assignee, workspace: workspace, completed_since: completed_since, modified_since: modified_since, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tasks", params: params, options: )), type: self, client: client) end |
.find_by_id(client, id, options: {}) ⇒ Object
Returns the complete task record for a single task.
99 100 101 102 |
# File 'lib/asana/resources/task.rb', line 99 def find_by_id(client, id, options: {}) self.new(parse(client.get("/tasks/#{id}", options: )).first, client: client) end |
.find_by_project(client, projectId: required("projectId"), per_page: 20, options: {}) ⇒ Object
Returns the compact task records for all tasks within the given project, ordered by their priority within the project.
110 111 112 113 |
# File 'lib/asana/resources/task.rb', line 110 def find_by_project(client, projectId: required("projectId"), per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/projects/#{projectId}/tasks", params: params, options: )), type: self, client: client) end |
.find_by_tag(client, tag: required("tag"), per_page: 20, options: {}) ⇒ Object
Returns the compact task records for all tasks with the given tag.
120 121 122 123 |
# File 'lib/asana/resources/task.rb', line 120 def find_by_tag(client, tag: required("tag"), per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tags/#{tag}/tasks", params: params, options: )), type: self, client: client) end |
.plural_name ⇒ Object
Returns the plural name of the resource.
59 60 61 |
# File 'lib/asana/resources/task.rb', line 59 def plural_name 'tasks' end |
Instance Method Details
#add_comment(text: required("text"), options: {}, **data) ⇒ Object
Adds a comment to a task. The comment will be authored by the currently authenticated user, and timestamped when the server receives the request.
330 331 332 333 |
# File 'lib/asana/resources/task.rb', line 330 def add_comment(text: required("text"), options: {}, **data) with_params = data.merge(text: text).reject { |_,v| v.nil? || Array(v).empty? } Story.new(parse(client.post("/tasks/#{id}/stories", body: with_params, options: )).first, client: client) end |
#add_followers(followers: required("followers"), options: {}, **data) ⇒ Object
Adds each of the specified followers to the task, if they are not already following. Returns the complete, updated record for the affected task.
189 190 191 192 |
# File 'lib/asana/resources/task.rb', line 189 def add_followers(followers: required("followers"), options: {}, **data) with_params = data.merge(followers: followers).reject { |_,v| v.nil? || Array(v).empty? } refresh_with(parse(client.post("/tasks/#{id}/addFollowers", body: with_params, options: )).first) end |
#add_project(project: required("project"), insertAfter: nil, insertBefore: nil, section: nil, options: {}, **data) ⇒ Object
Adds the task to the specified project, in the optional location specified. If no location arguments are given, the task will be added to the beginning of the project.
‘addProject` can also be used to reorder a task within a project that already contains it.
235 236 237 238 |
# File 'lib/asana/resources/task.rb', line 235 def add_project(project: required("project"), insertAfter: nil, insertBefore: nil, section: nil, options: {}, **data) with_params = data.merge(project: project, insertAfter: insertAfter, insertBefore: insertBefore, section: section).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/addProject", body: with_params, options: ) && true end |
#add_subtask(options: {}, **data) ⇒ Object
Creates a new subtask and adds it to the parent task. Returns the full record for the newly created subtask.
296 297 298 299 |
# File 'lib/asana/resources/task.rb', line 296 def add_subtask(options: {}, **data) self.class.new(parse(client.post("/tasks/#{id}/subtasks", body: data, options: )).first, client: client) end |
#add_tag(tag: required("tag"), options: {}, **data) ⇒ Object
Adds a tag to a task. Returns an empty data block.
267 268 269 270 |
# File 'lib/asana/resources/task.rb', line 267 def add_tag(tag: required("tag"), options: {}, **data) with_params = data.merge(tag: tag).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/addTag", body: with_params, options: ) && true end |
#delete ⇒ Object
A specific, existing task can be deleted by making a DELETE request on the URL for that task. Deleted tasks go into the “trash” of the user making the delete request. Tasks can be recovered from the trash within a period of 30 days; afterward they are completely removed from the system.
178 179 180 181 |
# File 'lib/asana/resources/task.rb', line 178 def delete() client.delete("/tasks/#{id}") && true end |
#remove_followers(followers: required("followers"), options: {}, **data) ⇒ Object
Removes each of the specified followers from the task if they are following. Returns the complete, updated record for the affected task.
200 201 202 203 |
# File 'lib/asana/resources/task.rb', line 200 def remove_followers(followers: required("followers"), options: {}, **data) with_params = data.merge(followers: followers).reject { |_,v| v.nil? || Array(v).empty? } refresh_with(parse(client.post("/tasks/#{id}/removeFollowers", body: with_params, options: )).first) end |
#remove_project(project: required("project"), options: {}, **data) ⇒ Object
Removes the task from the specified project. The task will still exist in the system, but it will not be in the project anymore.
248 249 250 251 |
# File 'lib/asana/resources/task.rb', line 248 def remove_project(project: required("project"), options: {}, **data) with_params = data.merge(project: project).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/removeProject", body: with_params, options: ) && true end |
#remove_tag(tag: required("tag"), options: {}, **data) ⇒ Object
Removes a tag from the task. Returns an empty data block.
277 278 279 280 |
# File 'lib/asana/resources/task.rb', line 277 def remove_tag(tag: required("tag"), options: {}, **data) with_params = data.merge(tag: tag).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/removeTag", body: with_params, options: ) && true end |
#set_parent(parent: required("parent"), options: {}, **data) ⇒ Object
Changes the parent of a task. Each task may only be a subtask of a single parent, or no parent task at all. Returns an empty data block.
307 308 309 310 |
# File 'lib/asana/resources/task.rb', line 307 def set_parent(parent: required("parent"), options: {}, **data) with_params = data.merge(parent: parent).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/setParent", body: with_params, options: ) && true end |
#stories(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the stories on the task.
316 317 318 319 |
# File 'lib/asana/resources/task.rb', line 316 def stories(per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tasks/#{id}/stories", params: params, options: )), type: Story, client: client) end |
#subtasks(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the subtasks of a task.
286 287 288 289 |
# File 'lib/asana/resources/task.rb', line 286 def subtasks(per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tasks/#{id}/subtasks", params: params, options: )), type: self.class, client: client) end |
#tags(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the tags the task has.
257 258 259 260 |
# File 'lib/asana/resources/task.rb', line 257 def (per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tasks/#{id}/tags", params: params, options: )), type: Tag, client: client) end |
#update(options: {}, **data) ⇒ Object
A specific, existing task can be updated by making a PUT request on the URL for that task. Only the fields provided in the ‘data` block will be updated; any unspecified fields will remain unchanged.
When using this method, it is best to specify only those fields you wish to change, or else you may overwrite changes made by another user since you last retrieved the task.
167 168 169 170 |
# File 'lib/asana/resources/task.rb', line 167 def update(options: {}, **data) refresh_with(parse(client.put("/tasks/#{id}", body: data, options: )).first) end |