Class: Asana::Resources::Workspace

Inherits:
WorkspacesBase show all
Defined in:
lib/asana/resources/workspace.rb

Overview

A workspace is the highest-level organizational unit in Asana. All projects and tasks have an associated workspace.

An organization is a special kind of workspace that represents a company. In an organization, you can group your projects into teams. You can read more about how organizations work on the Asana Guide. To tell if your workspace is an organization or not, check its `is_organization` property.

Over time, we intend to migrate most workspaces into organizations and to release more organization-specific functionality. We may eventually deprecate using workspace-based APIs for organizations. Currently, and until after some reasonable grace period following any further announcements, you can still reference organizations in any `workspace` parameter.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from WorkspacesBase

add_user_for_workspace, get_workspace, get_workspaces, inherited, remove_user_for_workspace, update_workspace

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

#gidObject (readonly)


21
22
23
# File 'lib/asana/resources/workspace.rb', line 21

def gid
  @gid
end

#is_organizationObject (readonly)


27
28
29
# File 'lib/asana/resources/workspace.rb', line 27

def is_organization
  @is_organization
end

#nameObject (readonly)


25
26
27
# File 'lib/asana/resources/workspace.rb', line 25

def name
  @name
end

#resource_typeObject (readonly)


23
24
25
# File 'lib/asana/resources/workspace.rb', line 23

def resource_type
  @resource_type
end

Class Method Details

.find_all(client, per_page: 20, options: {}) ⇒ Object

Returns the compact records for all workspaces visible to the authorized user.

Parameters:

  • per_page (Integer) (defaults to: 20)

    the number of records to fetch per page.

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

    the request I/O options.


49
50
51
52
# File 'lib/asana/resources/workspace.rb', line 49

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

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

Returns the full workspace record for a single workspace.

Parameters:

  • id (Id)

    Globally unique identifier for the workspace or organization.

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

    the request I/O options.


40
41
42
43
# File 'lib/asana/resources/workspace.rb', line 40

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

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

.plural_nameObject

Returns the plural name of the resource.


31
32
33
# File 'lib/asana/resources/workspace.rb', line 31

def plural_name
  'workspaces'
end

Instance Method Details

#add_user(user: required("user"), options: {}, **data) ⇒ Object

The user can be referenced by their globally unique user ID or their email address.

Parameters:

  • Returns

    the full user record for the invited user.

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

    An identifier for the user. Can be one of an email address,

  • the

    globally unique identifier for the user, or the keyword `me`

  • to

    indicate the current user making the request.

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

    the request I/O options.

  • data (Hash)

    the attributes to post.


107
108
109
110
# File 'lib/asana/resources/workspace.rb', line 107

def add_user(user: required("user"), options: {}, **data)
  with_params = data.merge(user: user).reject { |_,v| v.nil? || Array(v).empty? }
  User.new(parse(client.post("/workspaces/#{gid}/addUser", body: with_params, options: options)).first, client: client)
end

#remove_user(user: required("user"), options: {}, **data) ⇒ Object

The user making this call must be an admin in the workspace.

Parameters:

  • Returns

    an empty data record.

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

    An identifier for the user. Can be one of an email address,

  • the

    globally unique identifier for the user, or the keyword `me`

  • to

    indicate the current user making the request.

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

    the request I/O options.

  • data (Hash)

    the attributes to post.


121
122
123
124
# File 'lib/asana/resources/workspace.rb', line 121

def remove_user(user: required("user"), options: {}, **data)
  with_params = data.merge(user: user).reject { |_,v| v.nil? || Array(v).empty? }
  client.post("/workspaces/#{gid}/removeUser", body: with_params, options: options) && true
end

#typeahead(resource_type: nil, type: nil, query: nil, count: nil, per_page: 20, options: {}) ⇒ Object

Retrieves objects in the workspace based on an auto-completion/typeahead search algorithm. This feature is meant to provide results quickly, so do not rely on this API to provide extremely accurate search results. The result set is limited to a single page of results with a maximum size, so you won't be able to fetch large numbers of results.

Parameters:

  • resource_type (Enum) (defaults to: nil)

    The type of values the typeahead should return. You can choose from

  • one

    of the following: custom_field, project, tag, task, and user.

  • Note

    that unlike in the names of endpoints, the types listed here are

  • in

    singular form (e.g. `task`). Using multiple types is not yet supported.

  • type (Enum) (defaults to: nil)

    **Deprecated: new integrations should prefer the resource_type field.**

  • query (String) (defaults to: nil)

    The string that will be used to search for relevant objects. If an

  • empty

    string is passed in, the API will currently return an empty

  • result

    set.

  • count (Number) (defaults to: nil)

    The number of results to return. The default is `20` if this

  • parameter

    is omitted, with a minimum of `1` and a maximum of `100`.

  • If

    there are fewer results found than requested, all will be returned.

  • per_page (Integer) (defaults to: 20)

    the number of records to fetch per page.

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

    the request I/O options.


93
94
95
96
# File 'lib/asana/resources/workspace.rb', line 93

def typeahead(resource_type: nil, type: nil, query: nil, count: nil, per_page: 20, options: {})
  params = { resource_type: resource_type || type, query: query, count: count, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
  Collection.new(parse(client.get("/workspaces/#{gid}/typeahead", params: params, options: options)), type: Resource, client: client)
end

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

A specific, existing workspace can be updated by making a PUT request on the URL for that workspace. Only the fields provided in the data block will be updated; any unspecified fields will remain unchanged.

Currently the only field that can be modified for a workspace is its `name`.

Parameters:

  • Returns

    the complete, updated workspace record.

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

    the request I/O options.

  • data (Hash)

    the attributes to post.


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

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

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