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
Class Method Summary collapse
-
.create(client, 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(subtask: required("subtask"), options: {}, **data) ⇒ Object
Makes an existing task a subtask of another.
-
#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.
-
#projects(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the projects the task is in.
-
#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)
17 18 19 |
# File 'lib/asana/resources/task.rb', line 17 def assignee @assignee end |
#assignee_status ⇒ Object (readonly)
19 20 21 |
# File 'lib/asana/resources/task.rb', line 19 def assignee_status @assignee_status end |
Class Method Details
.create(client, 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.
37 38 39 40 |
# File 'lib/asana/resources/task.rb', line 37 def create(client, options: {}, **data) self.new(parse(client.post("/tasks", body: data, 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.
53 54 55 56 |
# File 'lib/asana/resources/task.rb', line 53 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.
112 113 114 115 |
# File 'lib/asana/resources/task.rb', line 112 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.
62 63 64 65 |
# File 'lib/asana/resources/task.rb', line 62 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.
73 74 75 76 |
# File 'lib/asana/resources/task.rb', line 73 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.
83 84 85 86 |
# File 'lib/asana/resources/task.rb', line 83 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.
23 24 25 |
# File 'lib/asana/resources/task.rb', line 23 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.
293 294 295 296 |
# File 'lib/asana/resources/task.rb', line 293 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.
152 153 154 155 |
# File 'lib/asana/resources/task.rb', line 152 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.
198 199 200 201 |
# File 'lib/asana/resources/task.rb', line 198 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(subtask: required("subtask"), options: {}, **data) ⇒ Object
Makes an existing task a subtask of another. Returns an empty data block.
259 260 261 262 |
# File 'lib/asana/resources/task.rb', line 259 def add_subtask(subtask: required("subtask"), options: {}, **data) with_params = data.merge(subtask: subtask).reject { |_,v| v.nil? || Array(v).empty? } client.post("/tasks/#{id}/subtasks", body: with_params, options: ) && true end |
#add_tag(tag: required("tag"), options: {}, **data) ⇒ Object
Adds a tag to a task. Returns an empty data block.
230 231 232 233 |
# File 'lib/asana/resources/task.rb', line 230 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.
141 142 143 144 |
# File 'lib/asana/resources/task.rb', line 141 def delete() client.delete("/tasks/#{id}") && true end |
#projects(per_page: 20, options: {}) ⇒ Object
Returns a compact representation of all of the projects the task is in.
172 173 174 175 |
# File 'lib/asana/resources/task.rb', line 172 def projects(per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/tasks/#{id}/projects", params: params, options: )), type: Project, client: client) 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.
163 164 165 166 |
# File 'lib/asana/resources/task.rb', line 163 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.
211 212 213 214 |
# File 'lib/asana/resources/task.rb', line 211 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.
240 241 242 243 |
# File 'lib/asana/resources/task.rb', line 240 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.
270 271 272 273 |
# File 'lib/asana/resources/task.rb', line 270 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.
279 280 281 282 |
# File 'lib/asana/resources/task.rb', line 279 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.
249 250 251 252 |
# File 'lib/asana/resources/task.rb', line 249 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.
220 221 222 223 |
# File 'lib/asana/resources/task.rb', line 220 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.
130 131 132 133 |
# File 'lib/asana/resources/task.rb', line 130 def update(options: {}, **data) refresh_with(parse(client.put("/tasks/#{id}", body: data, options: )).first) end |