asana 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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