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
- #custom_fields ⇒ 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.
-
#tags(per_page: 20, options: {}) ⇒ Object
readonly
Returns a compact representation of all of the tags the task has.
- #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, project: 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"), insert_after: nil, insert_before: 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.
-
#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 |
#custom_fields ⇒ Object (readonly)
29 30 31 |
# File 'lib/asana/resources/task.rb', line 29 def custom_fields @custom_fields end |
#due_at ⇒ Object (readonly)
33 34 35 |
# File 'lib/asana/resources/task.rb', line 33 def due_at @due_at end |
#due_on ⇒ Object (readonly)
31 32 33 |
# File 'lib/asana/resources/task.rb', line 31 def due_on @due_on end |
#external ⇒ Object (readonly)
35 36 37 |
# File 'lib/asana/resources/task.rb', line 35 def external @external end |
#followers ⇒ Object (readonly)
37 38 39 |
# File 'lib/asana/resources/task.rb', line 37 def followers @followers end |
#hearted ⇒ Object (readonly)
39 40 41 |
# File 'lib/asana/resources/task.rb', line 39 def hearted @hearted end |
#hearts ⇒ Object (readonly)
41 42 43 |
# File 'lib/asana/resources/task.rb', line 41 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)
57 58 59 |
# File 'lib/asana/resources/task.rb', line 57 def memberships @memberships end |
#modified_at ⇒ Object (readonly)
43 44 45 |
# File 'lib/asana/resources/task.rb', line 43 def modified_at @modified_at end |
#name ⇒ Object (readonly)
45 46 47 |
# File 'lib/asana/resources/task.rb', line 45 def name @name end |
#notes ⇒ Object (readonly)
47 48 49 |
# File 'lib/asana/resources/task.rb', line 47 def notes @notes end |
#num_hearts ⇒ Object (readonly)
49 50 51 |
# File 'lib/asana/resources/task.rb', line 49 def num_hearts @num_hearts end |
#parent ⇒ Object (readonly)
53 54 55 |
# File 'lib/asana/resources/task.rb', line 53 def parent @parent end |
#projects(per_page: 20, options: {}) ⇒ Object (readonly)
Returns a compact representation of all of the projects the task is in.
218 219 220 |
# File 'lib/asana/resources/task.rb', line 218 def projects @projects end |
#tags(per_page: 20, options: {}) ⇒ Object (readonly)
Returns a compact representation of all of the tags the task has.
266 267 268 |
# File 'lib/asana/resources/task.rb', line 266 def @tags end |
#workspace ⇒ Object (readonly)
55 56 57 |
# File 'lib/asana/resources/task.rb', line 55 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 ‘projects` or a `parent` task instead.
‘projects` can be a comma separated list of projects, or just a single project the task should belong to.
81 82 83 84 |
# File 'lib/asana/resources/task.rb', line 81 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.
97 98 99 100 |
# File 'lib/asana/resources/task.rb', line 97 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, project: 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. You must specify a ‘project` or `tag` if you do not specify `assignee` and `workspace`.
158 159 160 161 |
# File 'lib/asana/resources/task.rb', line 158 def find_all(client, assignee: nil, project: nil, workspace: nil, completed_since: nil, modified_since: nil, per_page: 20, options: {}) params = { assignee: assignee, project: project, 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.
106 107 108 109 |
# File 'lib/asana/resources/task.rb', line 106 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.
117 118 119 120 |
# File 'lib/asana/resources/task.rb', line 117 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.
127 128 129 130 |
# File 'lib/asana/resources/task.rb', line 127 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.
63 64 65 |
# File 'lib/asana/resources/task.rb', line 63 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.
339 340 341 342 |
# File 'lib/asana/resources/task.rb', line 339 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.
198 199 200 201 |
# File 'lib/asana/resources/task.rb', line 198 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"), insert_after: nil, insert_before: 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.
244 245 246 247 |
# File 'lib/asana/resources/task.rb', line 244 def add_project(project: required("project"), insert_after: nil, insert_before: nil, section: nil, options: {}, **data) with_params = data.merge(project: project, insert_after: insert_after, insert_before: insert_before, 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.
305 306 307 308 |
# File 'lib/asana/resources/task.rb', line 305 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.
276 277 278 279 |
# File 'lib/asana/resources/task.rb', line 276 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.
187 188 189 190 |
# File 'lib/asana/resources/task.rb', line 187 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.
209 210 211 212 |
# File 'lib/asana/resources/task.rb', line 209 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.
257 258 259 260 |
# File 'lib/asana/resources/task.rb', line 257 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.
286 287 288 289 |
# File 'lib/asana/resources/task.rb', line 286 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.
316 317 318 319 |
# File 'lib/asana/resources/task.rb', line 316 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.
325 326 327 328 |
# File 'lib/asana/resources/task.rb', line 325 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.
295 296 297 298 |
# File 'lib/asana/resources/task.rb', line 295 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 |
#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.
176 177 178 179 |
# File 'lib/asana/resources/task.rb', line 176 def update(options: {}, **data) refresh_with(parse(client.put("/tasks/#{id}", body: data, options: )).first) end |