### WARNING: This file is auto-generated by the asana-api-meta repo. Do not ### edit it manually. module Asana module Resources # A _section_ is a subdivision of a project that groups tasks together. It can # either be a header above a list of tasks in a list view or a column in a # board view of a project. class Section < Resource attr_reader :id attr_reader :name attr_reader :project attr_reader :created_at class << self # Returns the plural name of the resource. def plural_name 'sections' end # Creates a new section in a project. # # Returns the full record of the newly created section. # # project - [Id] The project to create the section in # name - [String] The text to be displayed as the section name. This cannot be an empty string. # options - [Hash] the request I/O options. # data - [Hash] the attributes to post. def create_in_project(client, project: required("project"), name: required("name"), options: {}, **data) with_params = data.merge(name: name).reject { |_,v| v.nil? || Array(v).empty? } self.new(parse(client.post("/projects/#{project}/sections", body: with_params, options: options)).first, client: client) end # Returns the compact records for all sections in the specified project. # # project - [Id] The project to get sections from. # per_page - [Integer] the number of records to fetch per page. # options - [Hash] the request I/O options. def find_by_project(client, project: required("project"), per_page: 20, options: {}) params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? } Collection.new(parse(client.get("/projects/#{project}/sections", params: params, options: options)), type: self, client: client) end # Returns the complete record for a single section. # # id - [Id] The section to get. # options - [Hash] the request I/O options. def find_by_id(client, id, options: {}) self.new(parse(client.get("/sections/#{id}", options: options)).first, client: client) end end # A specific, existing section can be updated by making a PUT request on # the URL for that project. Only the fields provided in the `data` block # will be updated; any unspecified fields will remain unchanged. (note that # at this time, the only field that can be updated is the `name` field.) # # 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. # # Returns the complete updated section record. # # options - [Hash] the request I/O options. # data - [Hash] the attributes to post. def update(options: {}, **data) refresh_with(parse(client.put("/sections/#{id}", body: data, options: options)).first) end # A specific, existing section can be deleted by making a DELETE request # on the URL for that section. # # Note that sections must be empty to be deleted. # # The last remaining section in a board view cannot be deleted. # # Returns an empty data block. def delete() client.delete("/sections/#{id}") && true end # Move sections relative to each other in a board view. One of # `before_section` or `after_section` is required. # # Sections cannot be moved between projects. # # At this point in time, moving sections is not supported in list views, only board views. # # Returns an empty data block. # # project - [Id] The project in which to reorder the given section # before_section - [Id] Insert the given section immediately before the section specified by this parameter. # after_section - [Id] Insert the given section immediately after the section specified by this parameter. # options - [Hash] the request I/O options. # data - [Hash] the attributes to post. def insert_in_project(project: required("project"), before_section: nil, after_section: nil, options: {}, **data) with_params = data.merge(before_section: before_section, after_section: after_section).reject { |_,v| v.nil? || Array(v).empty? } client.post("/projects/#{project}/sections/insert", body: with_params, options: options) && true end end end end