asana 0.8.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,43 @@
1
+ ### WARNING: This file is auto-generated by the asana-api-meta repo. Do not
2
+ ### edit it manually.
3
+
4
+ module Asana
5
+ module Resources
6
+ # A _job_ represents a process that handles asynchronous work.
7
+ #
8
+ # Jobs are created when an endpoint requests an action that will be handled asynchronously.
9
+ # Such as project or task duplication.
10
+ class Job < Resource
11
+
12
+
13
+ attr_reader :gid
14
+
15
+ attr_reader :resource_type
16
+
17
+ attr_reader :resource_subtype
18
+
19
+ attr_reader :status
20
+
21
+ attr_reader :new_project
22
+
23
+ attr_reader :new_task
24
+
25
+ class << self
26
+ # Returns the plural name of the resource.
27
+ def plural_name
28
+ 'jobs'
29
+ end
30
+
31
+ # Returns the complete job record for a single job.
32
+ #
33
+ # id - [Gid] The job to get.
34
+ # options - [Hash] the request I/O options.
35
+ def find_by_id(client, id, options: {})
36
+
37
+ self.new(parse(client.get("/jobs/#{id}", options: options)).first, client: client)
38
+ end
39
+ end
40
+
41
+ end
42
+ end
43
+ end
@@ -21,6 +21,8 @@ module Asana
21
21
 
22
22
  attr_reader :id
23
23
 
24
+ attr_reader :gid
25
+
24
26
  attr_reader :created_at
25
27
 
26
28
  attr_reader :download_url
@@ -37,7 +39,7 @@ module Asana
37
39
 
38
40
  # Returns details of a previously-requested Organization export.
39
41
  #
40
- # id - [Id] Globally unique identifier for the Organization export.
42
+ # id - [Gid] Globally unique identifier for the Organization export.
41
43
  #
42
44
  # options - [Hash] the request I/O options.
43
45
  def find_by_id(client, id, options: {})
@@ -48,7 +50,7 @@ module Asana
48
50
  # This method creates a request to export an Organization. Asana will complete the export at some
49
51
  # point after you create the request.
50
52
  #
51
- # organization - [Id] Globally unique identifier for the workspace or organization.
53
+ # organization - [Gid] Globally unique identifier for the workspace or organization.
52
54
  #
53
55
  # options - [Hash] the request I/O options.
54
56
  # data - [Hash] the attributes to post.
@@ -0,0 +1,206 @@
1
+ ### WARNING: This file is auto-generated by the asana-api-meta repo. Do not
2
+ ### edit it manually.
3
+
4
+ module Asana
5
+ module Resources
6
+ # A _portfolio_ gives a high-level overview of the status of multiple
7
+ # initiatives in Asana. Portfolios provide a dashboard overview of the state
8
+ # of multiple items, including a progress report and the most recent
9
+ # [project status](/developers/api-reference/project_statuses) update.
10
+ #
11
+ # Portfolios have some restrictions on size. Each portfolio has a maximum of 250
12
+ # items and, like projects, a maximum of 20 custom fields.
13
+ class Portfolio < Resource
14
+
15
+
16
+ attr_reader :id
17
+
18
+ attr_reader :gid
19
+
20
+ attr_reader :resource_type
21
+
22
+ attr_reader :name
23
+
24
+ attr_reader :owner
25
+
26
+ attr_reader :created_at
27
+
28
+ attr_reader :created_by
29
+
30
+ attr_reader :custom_field_settings
31
+
32
+ attr_reader :color
33
+
34
+ attr_reader :workspace
35
+
36
+ attr_reader :members
37
+
38
+ class << self
39
+ # Returns the plural name of the resource.
40
+ def plural_name
41
+ 'portfolios'
42
+ end
43
+
44
+ # Creates a new portfolio in the given workspace with the supplied name.
45
+ #
46
+ # Note that portfolios created in the Asana UI may have some state
47
+ # (like the "Priority" custom field) which is automatically added to the
48
+ # portfolio when it is created. Portfolios created via our API will **not**
49
+ # be created with the same initial state to allow integrations to create
50
+ # their own starting state on a portfolio.
51
+ #
52
+ # workspace - [Gid] The workspace or organization in which to create the portfolio.
53
+ # name - [String] The name of the newly-created portfolio
54
+ # color - [String] An optional color for the portfolio
55
+ # options - [Hash] the request I/O options.
56
+ # data - [Hash] the attributes to post.
57
+ def create(client, workspace: required("workspace"), name: required("name"), color: nil, options: {}, **data)
58
+ with_params = data.merge(workspace: workspace, name: name, color: color).reject { |_,v| v.nil? || Array(v).empty? }
59
+ self.new(parse(client.post("/portfolios", body: with_params, options: options)).first, client: client)
60
+ end
61
+
62
+ # Returns the complete record for a single portfolio.
63
+ #
64
+ # id - [Gid] The portfolio to get.
65
+ # options - [Hash] the request I/O options.
66
+ def find_by_id(client, id, options: {})
67
+
68
+ self.new(parse(client.get("/portfolios/#{id}", options: options)).first, client: client)
69
+ end
70
+
71
+ # Returns a list of the portfolios in compact representation that are owned
72
+ # by the current API user.
73
+ #
74
+ # workspace - [Gid] The workspace or organization to filter portfolios on.
75
+ # owner - [String] The user who owns the portfolio. Currently, API users can only get a
76
+ # list of portfolios that they themselves own.
77
+ #
78
+ # per_page - [Integer] the number of records to fetch per page.
79
+ # options - [Hash] the request I/O options.
80
+ def find_all(client, workspace: required("workspace"), owner: required("owner"), per_page: 20, options: {})
81
+ params = { workspace: workspace, owner: owner, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
82
+ Collection.new(parse(client.get("/portfolios", params: params, options: options)), type: self, client: client)
83
+ end
84
+ end
85
+
86
+ # An existing portfolio can be updated by making a PUT request on the
87
+ # URL for that portfolio. Only the fields provided in the `data` block will be
88
+ # updated; any unspecified fields will remain unchanged.
89
+ #
90
+ # Returns the complete updated portfolio record.
91
+ #
92
+ # options - [Hash] the request I/O options.
93
+ # data - [Hash] the attributes to post.
94
+ def update(options: {}, **data)
95
+
96
+ refresh_with(parse(client.put("/portfolios/#{gid}", body: data, options: options)).first)
97
+ end
98
+
99
+ # An existing portfolio can be deleted by making a DELETE request
100
+ # on the URL for that portfolio.
101
+ #
102
+ # Returns an empty data record.
103
+ def delete()
104
+
105
+ client.delete("/portfolios/#{gid}") && true
106
+ end
107
+
108
+ # Get a list of the items in compact form in a portfolio.
109
+ #
110
+ # options - [Hash] the request I/O options.
111
+ def get_items(options: {})
112
+
113
+ Collection.new(parse(client.get("/portfolios/#{gid}/items", options: options)), type: self, client: client)
114
+ end
115
+
116
+ # Add an item to a portfolio.
117
+ #
118
+ # Returns an empty data block.
119
+ #
120
+ # item - [Gid] The item to add to the portfolio.
121
+ # insert_before - [Gid] An id of an item in this portfolio. The new item will be added before the one specified here.
122
+ # `insert_before` and `insert_after` parameters cannot both be specified.
123
+ #
124
+ # insert_after - [Gid] An id of an item in this portfolio. The new item will be added after the one specified here.
125
+ # `insert_before` and `insert_after` parameters cannot both be specified.
126
+ #
127
+ # options - [Hash] the request I/O options.
128
+ # data - [Hash] the attributes to post.
129
+ def add_item(item: required("item"), insert_before: nil, insert_after: nil, options: {}, **data)
130
+ with_params = data.merge(item: item, insert_before: insert_before, insert_after: insert_after).reject { |_,v| v.nil? || Array(v).empty? }
131
+ client.post("/portfolios/#{gid}/addItem", body: with_params, options: options) && true
132
+ end
133
+
134
+ # Remove an item to a portfolio.
135
+ #
136
+ # Returns an empty data block.
137
+ #
138
+ # item - [Gid] The item to remove from the portfolio.
139
+ # options - [Hash] the request I/O options.
140
+ # data - [Hash] the attributes to post.
141
+ def remove_item(item: required("item"), options: {}, **data)
142
+ with_params = data.merge(item: item).reject { |_,v| v.nil? || Array(v).empty? }
143
+ client.post("/portfolios/#{gid}/removeItem", body: with_params, options: options) && true
144
+ end
145
+
146
+ # Adds the specified list of users as members of the portfolio. Returns the updated portfolio record.
147
+ #
148
+ # members - [Array] An array of user ids.
149
+ # options - [Hash] the request I/O options.
150
+ # data - [Hash] the attributes to post.
151
+ def add_members(members: required("members"), options: {}, **data)
152
+ with_params = data.merge(members: members).reject { |_,v| v.nil? || Array(v).empty? }
153
+ refresh_with(parse(client.post("/portfolios/#{gid}/addMembers", body: with_params, options: options)).first)
154
+ end
155
+
156
+ # Removes the specified list of members from the portfolio. Returns the updated portfolio record.
157
+ #
158
+ # members - [Array] An array of user ids.
159
+ # options - [Hash] the request I/O options.
160
+ # data - [Hash] the attributes to post.
161
+ def remove_members(members: required("members"), options: {}, **data)
162
+ with_params = data.merge(members: members).reject { |_,v| v.nil? || Array(v).empty? }
163
+ refresh_with(parse(client.post("/portfolios/#{gid}/removeMembers", body: with_params, options: options)).first)
164
+ end
165
+
166
+ # Get the custom field settings on a portfolio.
167
+ #
168
+ # options - [Hash] the request I/O options.
169
+ def custom_field_settings(options: {})
170
+
171
+ Collection.new(parse(client.get("/portfolios/#{gid}/custom_field_settings", options: options)), type: self, client: client)
172
+ end
173
+
174
+ # Create a new custom field setting on the portfolio. Returns the full
175
+ # record for the new custom field setting.
176
+ #
177
+ # custom_field - [Gid] The id of the custom field to add to the portfolio.
178
+ # is_important - [Boolean] Whether this field should be considered important to this portfolio (for instance, to display in the list view of items in the portfolio).
179
+ #
180
+ # insert_before - [Gid] An id of a custom field setting on this portfolio. The new custom field setting will be added before this one.
181
+ # `insert_before` and `insert_after` parameters cannot both be specified.
182
+ #
183
+ # insert_after - [Gid] An id of a custom field setting on this portfolio. The new custom field setting will be added after this one.
184
+ # `insert_before` and `insert_after` parameters cannot both be specified.
185
+ #
186
+ # options - [Hash] the request I/O options.
187
+ # data - [Hash] the attributes to post.
188
+ def add_custom_field_setting(custom_field: required("custom_field"), is_important: nil, insert_before: nil, insert_after: nil, options: {}, **data)
189
+ with_params = data.merge(custom_field: custom_field, is_important: is_important, insert_before: insert_before, insert_after: insert_after).reject { |_,v| v.nil? || Array(v).empty? }
190
+ Resource.new(parse(client.post("/portfolios/#{gid}/addCustomFieldSetting", body: with_params, options: options)).first, client: client)
191
+ end
192
+
193
+ # Remove a custom field setting on the portfolio. Returns an empty data
194
+ # block.
195
+ #
196
+ # custom_field - [Gid] The id of the custom field to remove from this portfolio.
197
+ # options - [Hash] the request I/O options.
198
+ # data - [Hash] the attributes to post.
199
+ def remove_custom_field_setting(custom_field: required("custom_field"), options: {}, **data)
200
+ with_params = data.merge(custom_field: custom_field).reject { |_,v| v.nil? || Array(v).empty? }
201
+ client.post("/portfolios/#{gid}/removeCustomFieldSetting", body: with_params, options: options) && true
202
+ end
203
+
204
+ end
205
+ end
206
+ end
@@ -0,0 +1,63 @@
1
+ ### WARNING: This file is auto-generated by the asana-api-meta repo. Do not
2
+ ### edit it manually.
3
+
4
+ module Asana
5
+ module Resources
6
+ # This object determines if a user is a member of a portfolio.
7
+ class PortfolioMembership < Resource
8
+
9
+
10
+ attr_reader :id
11
+
12
+ attr_reader :gid
13
+
14
+ attr_reader :resource_type
15
+
16
+ attr_reader :user
17
+
18
+ attr_reader :portfolio
19
+
20
+ class << self
21
+ # Returns the plural name of the resource.
22
+ def plural_name
23
+ 'portfolio_memberships'
24
+ end
25
+
26
+ # Returns the compact portfolio membership records for the portfolio. You must
27
+ # specify `portfolio`, `portfolio` and `user`, or `workspace` and `user`.
28
+ #
29
+ # portfolio - [Gid] The portfolio for which to fetch memberships.
30
+ # workspace - [Gid] The workspace for which to fetch memberships.
31
+ # user - [String] The user to filter the memberships to.
32
+ # per_page - [Integer] the number of records to fetch per page.
33
+ # options - [Hash] the request I/O options.
34
+ def find_all(client, portfolio: nil, workspace: nil, user: nil, per_page: 20, options: {})
35
+ params = { portfolio: portfolio, workspace: workspace, user: user, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
36
+ Collection.new(parse(client.get("/portfolio_memberships", params: params, options: options)), type: Resource, client: client)
37
+ end
38
+
39
+ # Returns the compact portfolio membership records for the portfolio.
40
+ #
41
+ # portfolio - [Gid] The portfolio for which to fetch memberships.
42
+ # user - [String] If present, the user to filter the memberships to.
43
+ # per_page - [Integer] the number of records to fetch per page.
44
+ # options - [Hash] the request I/O options.
45
+ def find_by_portfolio(client, portfolio: required("portfolio"), user: nil, per_page: 20, options: {})
46
+ params = { user: user, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
47
+ Collection.new(parse(client.get("/portfolios/#{portfolio}/portfolio_memberships", params: params, options: options)), type: Resource, client: client)
48
+ end
49
+
50
+ # Returns the portfolio membership record.
51
+ #
52
+ # id - [Gid] Globally unique identifier for the portfolio membership.
53
+ #
54
+ # options - [Hash] the request I/O options.
55
+ def find_by_id(client, id, options: {})
56
+
57
+ self.new(parse(client.get("/portfolio_memberships/#{id}", options: options)).first, client: client)
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -17,16 +17,22 @@ module Asana
17
17
  include EventSubscription
18
18
 
19
19
 
20
- attr_reader :name
21
-
22
20
  attr_reader :id
23
21
 
22
+ attr_reader :gid
23
+
24
+ attr_reader :resource_type
25
+
26
+ attr_reader :name
27
+
24
28
  attr_reader :owner
25
29
 
26
30
  attr_reader :current_status
27
31
 
28
32
  attr_reader :due_date
29
33
 
34
+ attr_reader :due_on
35
+
30
36
  attr_reader :start_on
31
37
 
32
38
  attr_reader :created_at
@@ -41,12 +47,16 @@ module Asana
41
47
 
42
48
  attr_reader :followers
43
49
 
50
+ attr_reader :custom_fields
51
+
44
52
  attr_reader :custom_field_settings
45
53
 
46
54
  attr_reader :color
47
55
 
48
56
  attr_reader :notes
49
57
 
58
+ attr_reader :html_notes
59
+
50
60
  attr_reader :workspace
51
61
 
52
62
  attr_reader :team
@@ -71,8 +81,8 @@ module Asana
71
81
  #
72
82
  # Returns the full record of the newly created project.
73
83
  #
74
- # workspace - [Id] The workspace or organization to create the project in.
75
- # team - [Id] If creating in an organization, the specific team to create the
84
+ # workspace - [Gid] The workspace or organization to create the project in.
85
+ # team - [Gid] If creating in an organization, the specific team to create the
76
86
  # project in.
77
87
  #
78
88
  # options - [Hash] the request I/O options.
@@ -87,7 +97,7 @@ module Asana
87
97
  #
88
98
  # Returns the full record of the newly created project.
89
99
  #
90
- # workspace - [Id] The workspace or organization to create the project in.
100
+ # workspace - [Gid] The workspace or organization to create the project in.
91
101
  # options - [Hash] the request I/O options.
92
102
  # data - [Hash] the attributes to post.
93
103
  def create_in_workspace(client, workspace: required("workspace"), options: {}, **data)
@@ -99,7 +109,7 @@ module Asana
99
109
  #
100
110
  # Returns the full record of the newly created project.
101
111
  #
102
- # team - [Id] The team to create the project in.
112
+ # team - [Gid] The team to create the project in.
103
113
  # options - [Hash] the request I/O options.
104
114
  # data - [Hash] the attributes to post.
105
115
  def create_in_team(client, team: required("team"), options: {}, **data)
@@ -109,7 +119,7 @@ module Asana
109
119
 
110
120
  # Returns the complete project record for a single project.
111
121
  #
112
- # id - [Id] The project to get.
122
+ # id - [Gid] The project to get.
113
123
  # options - [Hash] the request I/O options.
114
124
  def find_by_id(client, id, options: {})
115
125
 
@@ -119,41 +129,49 @@ module Asana
119
129
  # Returns the compact project records for some filtered set of projects.
120
130
  # Use one or more of the parameters provided to filter the projects returned.
121
131
  #
122
- # workspace - [Id] The workspace or organization to filter projects on.
123
- # team - [Id] The team to filter projects on.
132
+ # workspace - [Gid] The workspace or organization to filter projects on.
133
+ # team - [Gid] The team to filter projects on.
134
+ # is_template - [Boolean] **Note: This parameter can only be included if a team is also defined, or the workspace is not an organization**
135
+ # Filters results to include only template projects.
136
+ #
124
137
  # archived - [Boolean] Only return projects whose `archived` field takes on the value of
125
138
  # this parameter.
126
139
  #
127
140
  # per_page - [Integer] the number of records to fetch per page.
128
141
  # options - [Hash] the request I/O options.
129
- def find_all(client, workspace: nil, team: nil, archived: nil, per_page: 20, options: {})
130
- params = { workspace: workspace, team: team, archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
142
+ def find_all(client, workspace: nil, team: nil, is_template: nil, archived: nil, per_page: 20, options: {})
143
+ params = { workspace: workspace, team: team, is_template: is_template, archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
131
144
  Collection.new(parse(client.get("/projects", params: params, options: options)), type: self, client: client)
132
145
  end
133
146
 
134
147
  # Returns the compact project records for all projects in the workspace.
135
148
  #
136
- # workspace - [Id] The workspace or organization to find projects in.
149
+ # workspace - [Gid] The workspace or organization to find projects in.
150
+ # is_template - [Boolean] **Note: This parameter can only be included if a team is also defined, or the workspace is not an organization**
151
+ # Filters results to include only template projects.
152
+ #
137
153
  # archived - [Boolean] Only return projects whose `archived` field takes on the value of
138
154
  # this parameter.
139
155
  #
140
156
  # per_page - [Integer] the number of records to fetch per page.
141
157
  # options - [Hash] the request I/O options.
142
- def find_by_workspace(client, workspace: required("workspace"), archived: nil, per_page: 20, options: {})
143
- params = { archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
158
+ def find_by_workspace(client, workspace: required("workspace"), is_template: nil, archived: nil, per_page: 20, options: {})
159
+ params = { is_template: is_template, archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
144
160
  Collection.new(parse(client.get("/workspaces/#{workspace}/projects", params: params, options: options)), type: self, client: client)
145
161
  end
146
162
 
147
163
  # Returns the compact project records for all projects in the team.
148
164
  #
149
- # team - [Id] The team to find projects in.
165
+ # team - [Gid] The team to find projects in.
166
+ # is_template - [Boolean] Filters results to include only template projects.
167
+ #
150
168
  # archived - [Boolean] Only return projects whose `archived` field takes on the value of
151
169
  # this parameter.
152
170
  #
153
171
  # per_page - [Integer] the number of records to fetch per page.
154
172
  # options - [Hash] the request I/O options.
155
- def find_by_team(client, team: required("team"), archived: nil, per_page: 20, options: {})
156
- params = { archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
173
+ def find_by_team(client, team: required("team"), is_template: nil, archived: nil, per_page: 20, options: {})
174
+ params = { is_template: is_template, archived: archived, limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
157
175
  Collection.new(parse(client.get("/teams/#{team}/projects", params: params, options: options)), type: self, client: client)
158
176
  end
159
177
  end
@@ -172,7 +190,7 @@ module Asana
172
190
  # data - [Hash] the attributes to post.
173
191
  def update(options: {}, **data)
174
192
 
175
- refresh_with(parse(client.put("/projects/#{id}", body: data, options: options)).first)
193
+ refresh_with(parse(client.put("/projects/#{gid}", body: data, options: options)).first)
176
194
  end
177
195
 
178
196
  # A specific, existing project can be deleted by making a DELETE request
@@ -181,7 +199,31 @@ module Asana
181
199
  # Returns an empty data record.
182
200
  def delete()
183
201
 
184
- client.delete("/projects/#{id}") && true
202
+ client.delete("/projects/#{gid}") && true
203
+ end
204
+
205
+ # Creates and returns a job that will asynchronously handle the duplication.
206
+ #
207
+ # name - [String] The name of the new project.
208
+ # team - [Gid] Sets the team of the new project. If team is not defined, the new project
209
+ # will be in the same team as the the original project.
210
+ #
211
+ # include - [Array] The elements that will be duplicated to the new project.
212
+ # Tasks are always included.
213
+ #
214
+ # schedule_dates - [String] A dictionary of options to auto-shift dates.
215
+ # `task_dates` must be included to use this option.
216
+ # Requires either `start_on` or `due_on`, but not both.
217
+ # `start_on` will set the first start date of the new
218
+ # project to the given date, while `due_on` will set the last due date
219
+ # to the given date. Both will offset the remaining dates by the same amount
220
+ # of the original project.
221
+ #
222
+ # options - [Hash] the request I/O options.
223
+ # data - [Hash] the attributes to post.
224
+ def duplicate_project(name: required("name"), team: nil, include: nil, schedule_dates: nil, options: {}, **data)
225
+ with_params = data.merge(name: name, team: team, include: include, schedule_dates: schedule_dates).reject { |_,v| v.nil? || Array(v).empty? }
226
+ Resource.new(parse(client.post("/projects/#{gid}/duplicate", body: with_params, options: options)).first, client: client)
185
227
  end
186
228
 
187
229
  # Returns the compact task records for all tasks within the given project,
@@ -191,7 +233,7 @@ module Asana
191
233
  # options - [Hash] the request I/O options.
192
234
  def tasks(per_page: 20, options: {})
193
235
  params = { limit: per_page }.reject { |_,v| v.nil? || Array(v).empty? }
194
- Collection.new(parse(client.get("/projects/#{id}/tasks", params: params, options: options)), type: Task, client: client)
236
+ Collection.new(parse(client.get("/projects/#{gid}/tasks", params: params, options: options)), type: Task, client: client)
195
237
  end
196
238
 
197
239
  # Adds the specified list of users as followers to the project. Followers are a subset of members, therefore if
@@ -203,7 +245,7 @@ module Asana
203
245
  # data - [Hash] the attributes to post.
204
246
  def add_followers(followers: required("followers"), options: {}, **data)
205
247
  with_params = data.merge(followers: followers).reject { |_,v| v.nil? || Array(v).empty? }
206
- refresh_with(parse(client.post("/projects/#{id}/addFollowers", body: with_params, options: options)).first)
248
+ refresh_with(parse(client.post("/projects/#{gid}/addFollowers", body: with_params, options: options)).first)
207
249
  end
208
250
 
209
251
  # Removes the specified list of users from following the project, this will not affect project membership status.
@@ -214,55 +256,55 @@ module Asana
214
256
  # data - [Hash] the attributes to post.
215
257
  def remove_followers(followers: required("followers"), options: {}, **data)
216
258
  with_params = data.merge(followers: followers).reject { |_,v| v.nil? || Array(v).empty? }
217
- refresh_with(parse(client.post("/projects/#{id}/removeFollowers", body: with_params, options: options)).first)
259
+ refresh_with(parse(client.post("/projects/#{gid}/removeFollowers", body: with_params, options: options)).first)
218
260
  end
219
261
 
220
262
  # Adds the specified list of users as members of the project. Returns the updated project record.
221
263
  #
222
- # members - [Array] An array of members to add to the project.
264
+ # members - [Array] An array of user ids.
223
265
  # options - [Hash] the request I/O options.
224
266
  # data - [Hash] the attributes to post.
225
267
  def add_members(members: required("members"), options: {}, **data)
226
268
  with_params = data.merge(members: members).reject { |_,v| v.nil? || Array(v).empty? }
227
- refresh_with(parse(client.post("/projects/#{id}/addMembers", body: with_params, options: options)).first)
269
+ refresh_with(parse(client.post("/projects/#{gid}/addMembers", body: with_params, options: options)).first)
228
270
  end
229
271
 
230
272
  # Removes the specified list of members from the project. Returns the updated project record.
231
273
  #
232
- # members - [Array] An array of members to remove from the project.
274
+ # members - [Array] An array of user ids.
233
275
  # options - [Hash] the request I/O options.
234
276
  # data - [Hash] the attributes to post.
235
277
  def remove_members(members: required("members"), options: {}, **data)
236
278
  with_params = data.merge(members: members).reject { |_,v| v.nil? || Array(v).empty? }
237
- refresh_with(parse(client.post("/projects/#{id}/removeMembers", body: with_params, options: options)).first)
279
+ refresh_with(parse(client.post("/projects/#{gid}/removeMembers", body: with_params, options: options)).first)
238
280
  end
239
281
 
240
282
  # Create a new custom field setting on the project.
241
283
  #
242
- # custom_field - [Id] The id of the custom field to associate with this project.
284
+ # custom_field - [Gid] The id of the custom field to associate with this project.
243
285
  # is_important - [Boolean] Whether this field should be considered important to this project.
244
286
  #
245
- # insert_before - [Id] An id of a Custom Field Settings on this project, before which the new Custom Field Settings will be added.
287
+ # insert_before - [Gid] An id of a Custom Field Settings on this project, before which the new Custom Field Settings will be added.
246
288
  # `insert_before` and `insert_after` parameters cannot both be specified.
247
289
  #
248
- # insert_after - [Id] An id of a Custom Field Settings on this project, after which the new Custom Field Settings will be added.
290
+ # insert_after - [Gid] An id of a Custom Field Settings on this project, after which the new Custom Field Settings will be added.
249
291
  # `insert_before` and `insert_after` parameters cannot both be specified.
250
292
  #
251
293
  # options - [Hash] the request I/O options.
252
294
  # data - [Hash] the attributes to post.
253
295
  def add_custom_field_setting(custom_field: required("custom_field"), is_important: nil, insert_before: nil, insert_after: nil, options: {}, **data)
254
296
  with_params = data.merge(custom_field: custom_field, is_important: is_important, insert_before: insert_before, insert_after: insert_after).reject { |_,v| v.nil? || Array(v).empty? }
255
- Resource.new(parse(client.post("/projects/#{id}/addCustomFieldSetting", body: with_params, options: options)).first, client: client)
297
+ Resource.new(parse(client.post("/projects/#{gid}/addCustomFieldSetting", body: with_params, options: options)).first, client: client)
256
298
  end
257
299
 
258
300
  # Remove a custom field setting on the project.
259
301
  #
260
- # custom_field - [Id] The id of the custom field to remove from this project.
302
+ # custom_field - [Gid] The id of the custom field to remove from this project.
261
303
  # options - [Hash] the request I/O options.
262
304
  # data - [Hash] the attributes to post.
263
305
  def remove_custom_field_setting(custom_field: nil, options: {}, **data)
264
306
  with_params = data.merge(custom_field: custom_field).reject { |_,v| v.nil? || Array(v).empty? }
265
- Resource.new(parse(client.post("/projects/#{id}/removeCustomFieldSetting", body: with_params, options: options)).first, client: client)
307
+ Resource.new(parse(client.post("/projects/#{gid}/removeCustomFieldSetting", body: with_params, options: options)).first, client: client)
266
308
  end
267
309
 
268
310
  end