Class: Asana::Resources::CustomField

Inherits:
CustomFieldsBase show all
Defined in:
lib/asana/resources/custom_fields.rb

Overview

Custom Fields store the metadata that is used in order to add user-specified information to tasks in Asana. Be sure to reference the [Custom Fields](/developers/documentation/getting-started/custom-fields) developer documentation for more information about how custom fields relate to various resources in Asana.

Users in Asana can [lock custom fields](/guide/help/premium/custom-fields#gl-lock-fields), which will make them read-only when accessed by other users. Attempting to edit a locked custom field will return HTTP error code ‘403 Forbidden`.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from CustomFieldsBase

create_custom_field, create_enum_option_for_custom_field, delete_custom_field, get_custom_field, get_custom_fields_for_workspace, inherited, insert_enum_option_for_custom_field, update_custom_field, update_enum_option

Methods inherited from Resource

#initialize, #method_missing, #refresh, #respond_to_missing?, #to_h, #to_s

Methods included from ResponseHelper

#parse

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

#descriptionObject (readonly)



26
27
28
# File 'lib/asana/resources/custom_fields.rb', line 26

def description
  @description
end

#enum_optionsObject (readonly)



30
31
32
# File 'lib/asana/resources/custom_fields.rb', line 30

def enum_options
  @enum_options
end

#gidObject (readonly)



18
19
20
# File 'lib/asana/resources/custom_fields.rb', line 18

def gid
  @gid
end

#nameObject (readonly)



24
25
26
# File 'lib/asana/resources/custom_fields.rb', line 24

def name
  @name
end

#precisionObject (readonly)



32
33
34
# File 'lib/asana/resources/custom_fields.rb', line 32

def precision
  @precision
end

#resource_subtypeObject (readonly)



22
23
24
# File 'lib/asana/resources/custom_fields.rb', line 22

def resource_subtype
  @resource_subtype
end

#resource_typeObject (readonly)



20
21
22
# File 'lib/asana/resources/custom_fields.rb', line 20

def resource_type
  @resource_type
end

#typeObject (readonly)



28
29
30
# File 'lib/asana/resources/custom_fields.rb', line 28

def type
  @type
end

Class Method Details

.create(client, workspace: required("workspace"), resource_subtype: nil, type: nil, name: required("name"), description: nil, precision: nil, enum_options: nil, options: {}, **data) ⇒ Object

Creates a new custom field in a workspace. Every custom field is required to be created in a specific workspace, and this workspace cannot be changed once set.

A custom field’s ‘name` must be unique within a workspace and not conflict with names of existing task properties such as ’Due Date’ or ‘Assignee’. A custom field’s ‘type` must be one of ’text’, ‘enum’, or ‘number’.

Parameters:

  • Returns

    the full record of the newly created custom field.

  • workspace (Gid) (defaults to: required("workspace"))

    The workspace to create a custom field in.

  • resource_subtype (String) (defaults to: nil)

    The type of the custom field. Must be one of the given values.

  • type (String) (defaults to: nil)

    **Deprecated: New integrations should prefer the ‘resource_subtype` parameter.**

  • name (String) (defaults to: required("name"))

    The name of the custom field.

  • description (String) (defaults to: nil)

    The description of the custom field.

  • precision (Integer) (defaults to: nil)

    The number of decimal places for the numerical values. Required if the custom field is of type ‘number’.

  • enum_options (String) (defaults to: nil)

    The discrete values the custom field can assume. Required if the custom field is of type ‘enum’.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



55
56
57
58
# File 'lib/asana/resources/custom_fields.rb', line 55

def create(client, workspace: required("workspace"), resource_subtype: nil, type: nil, name: required("name"), description: nil, precision: nil, enum_options: nil, options: {}, **data)
  with_params = data.merge(workspace: workspace, resource_subtype: resource_subtype || type, name: name, description: description, precision: precision, enum_options: enum_options).reject { |_,v| v.nil? || Array(v).empty? }
  Resource.new(parse(client.post("/custom_fields", body: with_params, options: options)).first, client: client)
end

.create_enum_option(client, custom_field: required("custom_field"), name: required("name"), color: nil, insert_before: nil, insert_after: nil, options: {}, **data) ⇒ Object Also known as: add_enum_option

Creates an enum option and adds it to this custom field’s list of enum options. A custom field can have at most 50 enum options (including disabled options). By default new enum options are inserted at the end of a custom field’s list.

Locked custom fields can only have enum options added by the user who locked the field.

Parameters:

  • Returns

    the full record of the newly created enum option.

  • custom_field (Gid) (defaults to: required("custom_field"))

    Globally unique identifier for the custom field.

  • name (String) (defaults to: required("name"))

    The name of the enum option.

  • color (String) (defaults to: nil)

    The color of the enum option. Defaults to ‘none’.

  • insert_before (Gid) (defaults to: nil)

    An existing enum option within this custom field before which the new enum option should be inserted. Cannot be provided together with after_enum_option.

  • insert_after (Gid) (defaults to: nil)

    An existing enum option within this custom field after which the new enum option should be inserted. Cannot be provided together with before_enum_option.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



94
95
96
97
# File 'lib/asana/resources/custom_fields.rb', line 94

def create_enum_option(client, custom_field: required("custom_field"), name: required("name"), color: nil, insert_before: nil, insert_after: nil, options: {}, **data)
  with_params = data.merge(name: name, color: color, insert_before: insert_before, insert_after: insert_after).reject { |_,v| v.nil? || Array(v).empty? }
  Resource.new(parse(client.post("/custom_fields/#{custom_field}/enum_options", body: with_params, options: options)).first, client: client)
end

.find_by_id(client, id, options: {}) ⇒ Object

Returns the complete definition of a custom field’s metadata.

Parameters:

  • id (Gid)

    Globally unique identifier for the custom field.

  • options (Hash) (defaults to: {})

    the request I/O options.



65
66
67
68
# File 'lib/asana/resources/custom_fields.rb', line 65

def find_by_id(client, id, options: {})

  self.new(parse(client.get("/custom_fields/#{id}", options: options)).first, client: client)
end

.find_by_workspace(client, workspace: required("workspace"), per_page: 20, options: {}) ⇒ Object

Returns a list of the compact representation of all of the custom fields in a workspace.

Parameters:

  • workspace (Gid) (defaults to: required("workspace"))

    The workspace or organization to find custom field definitions in.

  • per_page (Integer) (defaults to: 20)

    the number of records to fetch per page.

  • options (Hash) (defaults to: {})

    the request I/O options.



75
76
77
78
# File 'lib/asana/resources/custom_fields.rb', line 75

def find_by_workspace(client, workspace: required("workspace"), per_page: 20, options: {})
  params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
  Collection.new(parse(client.get("/workspaces/#{workspace}/custom_fields", params: params, options: options)), type: Resource, client: client)
end

.insert_enum_option(client, custom_field: required("custom_field"), enum_option: required("enum_option"), name: required("name"), color: nil, before_enum_option: nil, after_enum_option: nil, options: {}, **data) ⇒ Object Also known as: reorder_enum_option

Moves a particular enum option to be either before or after another specified enum option in the custom field.

Locked custom fields can only be reordered by the user who locked the field.

Parameters:

  • custom_field (Gid) (defaults to: required("custom_field"))

    Globally unique identifier for the custom field.

  • enum_option (Gid) (defaults to: required("enum_option"))

    The ID of the enum option to relocate.

  • name (String) (defaults to: required("name"))

    The name of the enum option.

  • color (String) (defaults to: nil)

    The color of the enum option. Defaults to ‘none’.

  • before_enum_option (Gid) (defaults to: nil)

    An existing enum option within this custom field before which the new enum option should be inserted. Cannot be provided together with after_enum_option.

  • after_enum_option (Gid) (defaults to: nil)

    An existing enum option within this custom field after which the new enum option should be inserted. Cannot be provided together with before_enum_option.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



113
114
115
116
# File 'lib/asana/resources/custom_fields.rb', line 113

def insert_enum_option(client, custom_field: required("custom_field"), enum_option: required("enum_option"), name: required("name"), color: nil, before_enum_option: nil, after_enum_option: nil, options: {}, **data)
  with_params = data.merge(enum_option: enum_option, name: name, color: color, before_enum_option: before_enum_option, after_enum_option: after_enum_option).reject { |_,v| v.nil? || Array(v).empty? }
  Resource.new(parse(client.post("/custom_fields/#{custom_field}/enum_options/insert", body: with_params, options: options)).first, client: client)
end

.plural_nameObject

Returns the plural name of the resource.



36
37
38
# File 'lib/asana/resources/custom_fields.rb', line 36

def plural_name
  'custom_fields'
end

Instance Method Details

#deleteObject

A specific, existing custom field can be deleted by making a DELETE request on the URL for that custom field.

Locked custom fields can only be deleted by the user who locked the field.

Returns:

  • an empty data record.



142
143
144
145
# File 'lib/asana/resources/custom_fields.rb', line 142

def delete()

  client.delete("/custom_fields/#{gid}") && true
end

#update(options: {}, **data) ⇒ Object

A specific, existing custom field can be updated by making a PUT request on the URL for that custom field. 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 custom field.

An enum custom field’s ‘enum_options` cannot be updated with this endpoint. Instead see “Work With Enum Options” for information on how to update `enum_options`.

Locked custom fields can only be updated by the user who locked the field.

Parameters:

  • Returns

    the complete updated custom field record.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



132
133
134
135
# File 'lib/asana/resources/custom_fields.rb', line 132

def update(options: {}, **data)

  refresh_with(parse(client.put("/custom_fields/#{gid}", body: data, options: options)).first)
end

#update_enum_option(enum_option: required("enum_option"), name: required("name"), color: nil, enabled: nil, options: {}, **data) ⇒ Object

Updates an existing enum option. Enum custom fields require at least one enabled enum option.

Locked custom fields can only be updated by the user who locked the field.

Parameters:

  • Returns

    the full record of the updated enum option.

  • enum_option (Gid) (defaults to: required("enum_option"))

    Globally unique identifier for the enum option.

  • name (String) (defaults to: required("name"))

    The name of the enum option.

  • color (String) (defaults to: nil)

    The color of the enum option. Defaults to ‘none’.

  • enabled (Boolean) (defaults to: nil)

    Whether or not the enum option is a selectable value for the custom field.

  • options (Hash) (defaults to: {})

    the request I/O options.

  • data (Hash)

    the attributes to post.



160
161
162
163
# File 'lib/asana/resources/custom_fields.rb', line 160

def update_enum_option(enum_option: required("enum_option"), name: required("name"), color: nil, enabled: nil, options: {}, **data)
  with_params = data.merge(name: name, color: color, enabled: enabled).reject { |_,v| v.nil? || Array(v).empty? }
  refresh_with(parse(client.put("/enum_options/#{enum_option}", body: with_params, options: options)).first)
end