gitlab_support_readiness 1.0.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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/lib/support_readiness/client.rb +108 -0
  3. data/lib/support_readiness/gitlab/client.rb +64 -0
  4. data/lib/support_readiness/gitlab/configuration.rb +46 -0
  5. data/lib/support_readiness/gitlab/groups.rb +180 -0
  6. data/lib/support_readiness/gitlab/issues.rb +410 -0
  7. data/lib/support_readiness/gitlab/namespaces.rb +190 -0
  8. data/lib/support_readiness/gitlab/projects.rb +510 -0
  9. data/lib/support_readiness/gitlab/repositories.rb +267 -0
  10. data/lib/support_readiness/gitlab/users.rb +488 -0
  11. data/lib/support_readiness/gitlab.rb +19 -0
  12. data/lib/support_readiness/pagerduty/client.rb +66 -0
  13. data/lib/support_readiness/pagerduty/configuration.rb +43 -0
  14. data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
  15. data/lib/support_readiness/pagerduty/schedules.rb +223 -0
  16. data/lib/support_readiness/pagerduty/services.rb +132 -0
  17. data/lib/support_readiness/pagerduty.rb +16 -0
  18. data/lib/support_readiness/redis.rb +90 -0
  19. data/lib/support_readiness/zendesk/articles.rb +210 -0
  20. data/lib/support_readiness/zendesk/automations.rb +304 -0
  21. data/lib/support_readiness/zendesk/client.rb +84 -0
  22. data/lib/support_readiness/zendesk/configuration.rb +49 -0
  23. data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
  24. data/lib/support_readiness/zendesk/groups.rb +249 -0
  25. data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
  26. data/lib/support_readiness/zendesk/macros.rb +267 -0
  27. data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
  28. data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
  29. data/lib/support_readiness/zendesk/organizations.rb +515 -0
  30. data/lib/support_readiness/zendesk/roles.rb +194 -0
  31. data/lib/support_readiness/zendesk/search.rb +159 -0
  32. data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
  33. data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
  34. data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
  35. data/lib/support_readiness/zendesk/tickets.rb +854 -0
  36. data/lib/support_readiness/zendesk/triggers.rb +269 -0
  37. data/lib/support_readiness/zendesk/users.rb +946 -0
  38. data/lib/support_readiness/zendesk/views.rb +469 -0
  39. data/lib/support_readiness/zendesk.rb +31 -0
  40. data/lib/support_readiness.rb +29 -0
  41. metadata +215 -0
@@ -0,0 +1,946 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Zendesk
6
+ module Zendesk
7
+ ##
8
+ # Defines the class Users within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ # @todo Merge users
13
+ class Users < Readiness::Client
14
+ attr_accessor :active, :alias, :custom_role_id, :default_group_id, :details, :email, :external_id, :iana_time_zone, :id, :last_login_at, :locale, :locale_id, :moderator, :name, :notes, :only_private_comments, :organization_id, :phone, :report_csv, :restricted_agent, :role, :role_type, :shared, :shared_agent, :shared_phone_number, :signature, :suspended, :tags, :ticket_restriction, :time_zone, :two_factor_auth_enabled, :user_fields, :verified
15
+
16
+ ##
17
+ # Creates a new {Readiness::Zendesk::Users} instance
18
+ #
19
+ # @author Jason Colyer
20
+ # @since 1.0.0
21
+ # @param object [Object] An instance of {Readiness::Zendesk::Users}
22
+ # @example
23
+ # require 'support_readiness'
24
+ # Readiness::Zendesk::Users.new
25
+ def initialize(object = {})
26
+ @active = object['active']
27
+ @alias = object['alias']
28
+ @custom_role_id = object['custom_role_id']
29
+ @default_group_id = object['default_group_id']
30
+ @details = object['details']
31
+ @email = object['email']
32
+ @external_id = object['external_id']
33
+ @iana_time_zone = object['iana_time_zone']
34
+ @id = object['id']
35
+ @last_login_at = object['last_login_at']
36
+ @locale = object['locale']
37
+ @locale_id = object['locale_id']
38
+ @moderator = object['moderator']
39
+ @name = object['name']
40
+ @notes = object['notes']
41
+ @only_private_comments = object['only_private_comments']
42
+ @organization_id = object['organization_id']
43
+ @phone = object['phone']
44
+ @report_csv = object['report_csv']
45
+ @restricted_agent = object['restricted_agent']
46
+ @role = object['role']
47
+ @role_type = object['role_type']
48
+ @shared = object['shared']
49
+ @shared_agent = object['shared_agent']
50
+ @shared_phone_number = object['shared_phone_number']
51
+ @signature = object['signature']
52
+ @suspended = object['suspended']
53
+ @tags = object['tags']
54
+ @ticket_restriction = object['ticket_restriction']
55
+ @time_zone = object['time_zone']
56
+ @two_factor_auth_enabled = object['two_factor_auth_enabled']
57
+ @user_fields = object['user_fields']
58
+ @verified = object['verified']
59
+ end
60
+
61
+ ##
62
+ # Lists the first 100 users
63
+ #
64
+ # @author Jason Colyer
65
+ # @since 1.0.0
66
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
67
+ # @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
68
+ # @param roles [Array] The roles to use in the listing. Leave blank to show all.
69
+ # @return [Array]
70
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-users Zendesk API > Users > List Users
71
+ # @example
72
+ # require 'support_readiness'
73
+ # config = Readiness::Zendesk::Configuration.new
74
+ # config.username = 'alice@example.com'
75
+ # config.token = 'test123abc'
76
+ # config.url = 'https://example.zendesk.com/api/v2'
77
+ # client = Readiness::Zendesk::Client.new(config)
78
+ # users = Readiness::Zendesk::Users.list(client)
79
+ # pp users.first.name
80
+ # # => "Johnny Agent"
81
+ def self.list(client, permission_set = false, roles = [])
82
+ opts = ''
83
+ opts += "&permission_set=#{permission_set}" if permission_set
84
+ opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
85
+ response = client.connection.get("users?page[size]=100&#{opts}")
86
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
87
+ Oj.load(response.body)['users'].map { |u| Users.new(u) }
88
+ end
89
+
90
+ ##
91
+ # Lists many users. Does not stop until it ends or the page limit is hit.
92
+ # This method can take a long time to run depending on the parameters used.
93
+ #
94
+ # @author Jason Colyer
95
+ # @since 1.0.0
96
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
97
+ # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
98
+ # @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
99
+ # @param roles [Array] The roles to use in the listing. Leave blank to show all.
100
+ # @return [Array]
101
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-users Zendesk API > Users > List Users
102
+ # @example
103
+ # require 'support_readiness'
104
+ # config = Readiness::Zendesk::Configuration.new
105
+ # config.username = 'alice@example.com'
106
+ # config.token = 'test123abc'
107
+ # config.url = 'https://example.zendesk.com/api/v2'
108
+ # client = Readiness::Zendesk::Client.new(config)
109
+ # users = Readiness::Zendesk::Users.list_many(client, 15)
110
+ # pp users.count
111
+ # # => 1500
112
+ def self.list_many(client, limit = 0, permission_set = false, roles = [])
113
+ array = []
114
+ opts = "page[size]=100"
115
+ opts += "&permission_set=#{permission_set}" if permission_set
116
+ opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
117
+ loop do
118
+ response = client.connection.get("users?#{opts}")
119
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
120
+ body = Oj.load(response.body)
121
+ array += body['users'].map { |u| Users.new(u) }
122
+ break if limit != 0 && array.count >= (limit * 100)
123
+ break unless body['meta']['has_more']
124
+
125
+ opts = body['links'] ['next'].split('?').last
126
+ end
127
+ array
128
+ end
129
+
130
+ ##
131
+ # Show information on the approximate count of users.
132
+ #
133
+ # @author Jason Colyer
134
+ # @since 1.0.0
135
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
136
+ # @param permission_set [Integer] The custom_role_id to use in the listing. Set to false to show all.
137
+ # @param roles [Array] The roles to use in the listing. Leave blank to show all.
138
+ # @return [Hash]
139
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#count-users Zendesk API > Users > Count Users
140
+ # @example
141
+ # require 'support_readiness'
142
+ # config = Readiness::Zendesk::Configuration.new
143
+ # config.username = 'alice@example.com'
144
+ # config.token = 'test123abc'
145
+ # config.url = 'https://example.zendesk.com/api/v2'
146
+ # client = Readiness::Zendesk::Client.new(config)
147
+ # count = Readiness::Zendesk::Users.count(client)
148
+ # pp count['value']
149
+ # # => 102
150
+ def self.count(client, permission_set = false, roles = [])
151
+ opts = ''
152
+ opts += "&permission_set=#{permission_set}" if permission_set
153
+ opts += roles.map { |r| "&role[]=#{r}" }.join('') unless roles.count.zero?
154
+ response = client.connection.get("users/count?#{opts}")
155
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
156
+ Oj.load(response.body)['count']
157
+ end
158
+
159
+ ##
160
+ # Locates an user within Zendesk. This will not exit on error (except Authentication errors)
161
+ #
162
+ # @author Jason Colyer
163
+ # @since 1.0.0
164
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
165
+ # @param uid [Integer] The user ID to find
166
+ # @return [Object] An instance of {Readiness::Zendesk::Users}
167
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-user Zendesk API > Users > Show User
168
+ # @example
169
+ # require 'support_readiness'
170
+ # config = Readiness::Zendesk::Configuration.new
171
+ # config.username = 'alice@example.com'
172
+ # config.token = 'test123abc'
173
+ # config.url = 'https://example.zendesk.com/api/v2'
174
+ # client = Readiness::Zendesk::Client.new(config)
175
+ # user = Readiness::Zendesk::Users.find(client, 35436)
176
+ # pp email.email
177
+ # # => "johny_agent@example.com"
178
+ def self.find(client, uid)
179
+ response = client.connection.get("users/#{uid}")
180
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: uid }) unless response.status == 200
181
+ return Users.new(Oj.load(response.body)['user']) if response.status == 200
182
+
183
+ Oj.load(response.body)
184
+ end
185
+
186
+ ##
187
+ # Locates an user within Zendesk. This will exit on error
188
+ #
189
+ # @author Jason Colyer
190
+ # @since 1.0.0
191
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
192
+ # @param uid [Integer] The user ID to find
193
+ # @return [Object] An instance of {Readiness::Zendesk::Users}
194
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-user Zendesk API > Users > Show User
195
+ # @example
196
+ # require 'support_readiness'
197
+ # config = Readiness::Zendesk::Configuration.new
198
+ # config.username = 'alice@example.com'
199
+ # config.token = 'test123abc'
200
+ # config.url = 'https://example.zendesk.com/api/v2'
201
+ # client = Readiness::Zendesk::Client.new(config)
202
+ # user = Readiness::Zendesk::Users.find!(client, 35436)
203
+ # pp email.email
204
+ # # => "johny_agent@example.com"
205
+ def self.find!(client, uid)
206
+ response = client.connection.get("users/#{uid}")
207
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find user', id: uid }) unless response.status == 200
208
+ Users.new(Oj.load(response.body)['user'])
209
+ end
210
+
211
+ ##
212
+ # Locates up to 100 users within Zendesk.
213
+ #
214
+ # @author Jason Colyer
215
+ # @since 1.0.0
216
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
217
+ # @param uids [Array] The user IDs to find
218
+ # @return [Array]
219
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-many-organizations Zendesk API > Organizations > Show Many Organizations
220
+ # @example
221
+ # require 'support_readiness'
222
+ # config = Readiness::Zendesk::Configuration.new
223
+ # config.username = 'alice@example.com'
224
+ # config.token = 'test123abc'
225
+ # config.url = 'https://example.zendesk.com/api/v2'
226
+ # client = Readiness::Zendesk::Client.new(config)
227
+ # users = Readiness::Zendesk::Users.find!(client, [35436, 35436])
228
+ # pp users.count
229
+ # # => 2
230
+ def self.find_many(client, uids)
231
+ response = client.connection.get("users/show_many?ids=#{uids.join(',')}")
232
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: uids }) unless response.status == 200
233
+ Oj.load(response.body)['users'].map { |o| Users.new(o) }
234
+ end
235
+
236
+ ##
237
+ # Creates an user. Will exit if unsuccessful
238
+ #
239
+ # @author Jason Colyer
240
+ # @since 1.0.0
241
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
242
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
243
+ # @return [Object] An instance of {Readiness::Zendesk::Users}
244
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-user Zendesk API > Users > Create User
245
+ # @example
246
+ # require 'support_readiness'
247
+ # config = Readiness::Zendesk::Configuration.new
248
+ # config.username = 'alice@example.com'
249
+ # config.token = 'test123abc'
250
+ # config.url = 'https://example.zendesk.com/api/v2'
251
+ # client = Readiness::Zendesk::Client.new(config)
252
+ # user = Readiness::Zendesk::Users.new
253
+ # user.custom_role_id = 123456
254
+ # user.email = 'roge@example.org'
255
+ # user.name = 'Roger Wilco'
256
+ # user.organization_id = 57542
257
+ # user.role = 'agent'
258
+ # user.role_type = 0
259
+ # create = Readiness::Zendesk::Users.create!(client, user)
260
+ # pp create.id
261
+ # # => 9873843
262
+ def self.create!(client, user)
263
+ response = client.connection.post 'users', to_clean_json_with_key(user, 'user')
264
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create user', message: Oj.load(response.body)}) unless response.status == 201
265
+ Users.new(Oj.load(response.body)['user'])
266
+ end
267
+
268
+ ##
269
+ # Creates or updates an user. Will exit if unsuccessful
270
+ #
271
+ # @author Jason Colyer
272
+ # @since 1.0.0
273
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
274
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
275
+ # @return [Object] An instance of {Readiness::Zendesk::Users}
276
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-or-update-user Zendesk API > Users > Create Or Update User
277
+ # @example
278
+ # require 'support_readiness'
279
+ # config = Readiness::Zendesk::Configuration.new
280
+ # config.username = 'alice@example.com'
281
+ # config.token = 'test123abc'
282
+ # config.url = 'https://example.zendesk.com/api/v2'
283
+ # client = Readiness::Zendesk::Client.new(config)
284
+ # user = Readiness::Zendesk::Users.new
285
+ # user.custom_role_id = 123456
286
+ # user.email = 'roge@example.org'
287
+ # user.name = 'Roger Wilco'
288
+ # user.organization_id = 57542
289
+ # user.role = 'agent'
290
+ # user.role_type = 0
291
+ # create = Readiness::Zendesk::Users.create_or_update!(client, user)
292
+ # pp create.id
293
+ # # => 9873843
294
+ # @example
295
+ # require 'support_readiness'
296
+ # config = Readiness::Zendesk::Configuration.new
297
+ # config.username = 'alice@example.com'
298
+ # config.token = 'test123abc'
299
+ # config.url = 'https://example.zendesk.com/api/v2'
300
+ # client = Readiness::Zendesk::Client.new(config)
301
+ # user = Readiness::Zendesk::Users.find!(client, 9873843)
302
+ # user.name = 'Roger Wilco II'
303
+ # create = Readiness::Zendesk::Users.create_or_update!(client, user)
304
+ # pp create.name
305
+ # # => "Roger Wilco II"
306
+ def self.create_or_update!(client, user)
307
+ response = client.connection.post 'users/create_or_update', to_clean_json_with_key(user, 'user')
308
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update user', id: user.email, message: Oj.load(response.body)}) unless [200, 201].include?(response.status)
309
+ Users.new(Oj.load(response.body)['user'])
310
+ end
311
+
312
+ ##
313
+ # Updates an user. Will exit if unsuccessful
314
+ #
315
+ # @author Jason Colyer
316
+ # @since 1.0.0
317
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
318
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
319
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
320
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#update-user Zendesk API > Users > Update User
321
+ # @example
322
+ # require 'support_readiness'
323
+ # config = Readiness::Zendesk::Configuration.new
324
+ # config.username = 'alice@example.com'
325
+ # config.token = 'test123abc'
326
+ # config.url = 'https://example.zendesk.com/api/v2'
327
+ # client = Readiness::Zendesk::Client.new(config)
328
+ # user = Readiness::Zendesk::Users.find!(client, 9873843)
329
+ # user.name = 'Roger Wilco II'
330
+ # update = Readiness::Zendesk::Users.update!(client, user)
331
+ # pp update.name
332
+ # # => "Roger Wilco II"
333
+ def self.update!(client, user)
334
+ response = client.connection.put "users/#{user.id}", to_clean_json_with_key(user, 'user')
335
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update user', id: user.id, message: Oj.load(response.body)}) unless response.status == 200
336
+ Users.new(Oj.load(response.body)['user'])
337
+ end
338
+
339
+ ##
340
+ # Deletes an user. Will exit if unsuccessful
341
+ #
342
+ # @author Jason Colyer
343
+ # @since 1.0.0
344
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
345
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
346
+ # @return [Boolean]
347
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#delete-user Zendesk API > Users > Delete User
348
+ # @example
349
+ # require 'support_readiness'
350
+ # config = Readiness::Zendesk::Configuration.new
351
+ # config.username = 'alice@example.com'
352
+ # config.token = 'test123abc'
353
+ # config.url = 'https://example.zendesk.com/api/v2'
354
+ # client = Readiness::Zendesk::Client.new(config)
355
+ # user = Readiness::Zendesk::Users.find!(client, 9873843)
356
+ # delete = Readiness::Zendesk::Users.delete!(client, user)
357
+ # pp delete
358
+ # # => true
359
+ def self.delete!(client, user)
360
+ response = client.connection.delete "users/#{user.id}"
361
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an user', id: user.id, message: Oj.load(response.body)}) unless response.status == 204
362
+ true
363
+ end
364
+
365
+ ##
366
+ # Deletes a deleted user. This will exit if unsuccessful
367
+ #
368
+ # @author Jason Colyer
369
+ # @since 1.0.0
370
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
371
+ # @param uid [Integer] The deleted user's ID
372
+ # @return [Hash]
373
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#permanently-delete-user Zendesk API > Users > Permanently Delete User
374
+ # @example
375
+ # require 'support_readiness'
376
+ # config = Readiness::Zendesk::Configuration.new
377
+ # config.username = 'alice@example.com'
378
+ # config.token = 'test123abc'
379
+ # config.url = 'https://example.zendesk.com/api/v2'
380
+ # client = Readiness::Zendesk::Client.new(config)
381
+ # delete = Readiness::Zendesk::Users.delete_permanently!(client, 9873843)
382
+ # pp delete.id
383
+ # # => 189304711533
384
+ def self.delete_permanently!(client, uid)
385
+ response = client.connection.delete "deleted_users/#{uid}"
386
+ handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
387
+ Oj.load(response.body['deleted_user'])
388
+ end
389
+
390
+ ##
391
+ # Lists the first 100 deleted users
392
+ #
393
+ # @author Jason Colyer
394
+ # @since 1.0.0
395
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
396
+ # @return [Array]
397
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-deleted-users Zendesk API > Users > List Deleted Users
398
+ # @example
399
+ # require 'support_readiness'
400
+ # config = Readiness::Zendesk::Configuration.new
401
+ # config.username = 'alice@example.com'
402
+ # config.token = 'test123abc'
403
+ # config.url = 'https://example.zendesk.com/api/v2'
404
+ # client = Readiness::Zendesk::Client.new(config)
405
+ # deletes = Readiness::Zendesk::Users.list_deleted(client)
406
+ # pp deletes.first.id
407
+ # # => 189304711533
408
+ def self.list_deleted(client)
409
+ response = client.connection.get("deleted_users?page[size]=100")
410
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
411
+ Oj.load(response.body)['deleted_users']
412
+ end
413
+
414
+ ##
415
+ # Lists many deleted users. Does not stop until it ends or the page limit is hit.
416
+ # This method can take a long time to run depending on the parameters used.
417
+ #
418
+ # @author Jason Colyer
419
+ # @since 1.0.0
420
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
421
+ # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
422
+ # @return [Array]
423
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-deleted-users Zendesk API > Users > List Deleted Users
424
+ # @example
425
+ # require 'support_readiness'
426
+ # config = Readiness::Zendesk::Configuration.new
427
+ # config.username = 'alice@example.com'
428
+ # config.token = 'test123abc'
429
+ # config.url = 'https://example.zendesk.com/api/v2'
430
+ # client = Readiness::Zendesk::Client.new(config)
431
+ # deletes = Readiness::Zendesk::Users.list_many_deleted(client, 7)
432
+ # pp deletes.count
433
+ # # => 700
434
+ def self.list_many_deleted(client, limit = 0, permission_set = false)
435
+ array = []
436
+ opts = "page[size]=100"
437
+ loop do
438
+ response = client.connection.get("deleted_users?#{opts}")
439
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
440
+ body = Oj.load(response.body)
441
+ array += body['deleted_users']
442
+ break if limit != 0 && array.count >= (limit * 100)
443
+ break unless body['meta']['has_more']
444
+
445
+ opts = body['links'] ['next'].split('?').last
446
+ end
447
+ array
448
+ end
449
+
450
+ ##
451
+ # Show information on the approximate count of deleted users.
452
+ #
453
+ # @author Jason Colyer
454
+ # @since 1.0.0
455
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
456
+ # @return [Hash]
457
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#count-deleted-users Zendesk API > Users > Count Deleted Users
458
+ # @example
459
+ # require 'support_readiness'
460
+ # config = Readiness::Zendesk::Configuration.new
461
+ # config.username = 'alice@example.com'
462
+ # config.token = 'test123abc'
463
+ # config.url = 'https://example.zendesk.com/api/v2'
464
+ # client = Readiness::Zendesk::Client.new(config)
465
+ # deletes = Readiness::Zendesk::Users.deleted_count(client)
466
+ # pp deletes['value']
467
+ # # => 13
468
+ def self.deleted_count(client)
469
+ response = client.connection.get("deleted_users/count?#{opts}")
470
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
471
+ Oj.load(response.body)['count']
472
+ end
473
+
474
+ ##
475
+ # Show information on a deleted user
476
+ #
477
+ # @author Jason Colyer
478
+ # @since 1.0.0
479
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
480
+ # @param did [Integer] The deleted user's ID
481
+ # @return [Hash]
482
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#show-deleted-user Zendesk API > Users > Show Deleted User
483
+ # @example
484
+ # require 'support_readiness'
485
+ # config = Readiness::Zendesk::Configuration.new
486
+ # config.username = 'alice@example.com'
487
+ # config.token = 'test123abc'
488
+ # config.url = 'https://example.zendesk.com/api/v2'
489
+ # client = Readiness::Zendesk::Client.new(config)
490
+ # deleted = Readiness::Zendesk::Users.find_deleted!(client, 189304711533)
491
+ # pp deleted['name']
492
+ # # => "David"
493
+ def self.find_deleted!(client, did)
494
+ response = client.connection.get("deleted_users/#{did}")
495
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
496
+ Oj.load(response.body)['deleted_user']
497
+ end
498
+
499
+ ##
500
+ # Force logs out users
501
+ #
502
+ # @author Jason Colyer
503
+ # @since 1.0.0
504
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
505
+ # @param uids [Array] An array of user IDs
506
+ # @return [Hash]
507
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#logout-many-users Zendesk API > Users > Logout many users
508
+ # @example
509
+ # require 'support_readiness'
510
+ # config = Readiness::Zendesk::Configuration.new
511
+ # config.username = 'alice@example.com'
512
+ # config.token = 'test123abc'
513
+ # config.url = 'https://example.zendesk.com/api/v2'
514
+ # client = Readiness::Zendesk::Client.new(config)
515
+ # log_out = Readiness::Zendesk::Users.logout_many(client, [1, 2])
516
+ # pp log_out
517
+ # # => true
518
+ def self.logout_many(client, uids)
519
+ response = client.connection.get("users/logout_many?ids=#{uids.join(',')}")
520
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 202
521
+ true
522
+ end
523
+
524
+ ##
525
+ # Lists all tickets involving an user (requested, cc'd, assigned).
526
+ #
527
+ # @author Jason Colyer
528
+ # @since 1.0.0
529
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
530
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
531
+ # @return [Array]
532
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
533
+ # @example
534
+ # require 'support_readiness'
535
+ # config = Readiness::Zendesk::Configuration.new
536
+ # config.username = 'alice@example.com'
537
+ # config.token = 'test123abc'
538
+ # config.url = 'https://example.zendesk.com/api/v2'
539
+ # client = Readiness::Zendesk::Client.new(config)
540
+ # user = Readiness::Zendesk::Users.find!(client, 123456)
541
+ # tickets = Readiness::Zendesk::Users.all_tickets(client, user)
542
+ # pp tickets.count
543
+ # # => 18
544
+ def self.all_tickets(client, user)
545
+ (tickets(client, user) + ccd_tickets(client, user) + assigned_tickets(client, user)).uniq { |t| t.id }.sort_by { |t| t.id }
546
+ end
547
+
548
+ ##
549
+ # Lists requests for an user.
550
+ #
551
+ # @author Jason Colyer
552
+ # @since 1.0.0
553
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
554
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
555
+ # @return [Array]
556
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
557
+ # @example
558
+ # require 'support_readiness'
559
+ # config = Readiness::Zendesk::Configuration.new
560
+ # config.username = 'alice@example.com'
561
+ # config.token = 'test123abc'
562
+ # config.url = 'https://example.zendesk.com/api/v2'
563
+ # client = Readiness::Zendesk::Client.new(config)
564
+ # user = Readiness::Zendesk::Users.find!(client, 123456)
565
+ # tickets = Readiness::Zendesk::Users.tickets(client, user)
566
+ # pp tickets.count
567
+ # # => 10
568
+ def self.tickets(client, user)
569
+ array = []
570
+ opts = "page[size]=100"
571
+ loop do
572
+ response = client.connection.get("users/#{user.id}/tickets/requested?#{opts}")
573
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
574
+ body = Oj.load(response.body)
575
+ array += body['tickets'].map { |t| Tickets.new(t) }
576
+ break unless body['meta']['has_more']
577
+
578
+ opts = body['links'] ['next'].split('?').last
579
+ end
580
+ array
581
+ end
582
+
583
+ ##
584
+ # Lists tickets that a user is CC'd on.
585
+ #
586
+ # @author Jason Colyer
587
+ # @since 1.0.0
588
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
589
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
590
+ # @return [Array]
591
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
592
+ # @example
593
+ # require 'support_readiness'
594
+ # config = Readiness::Zendesk::Configuration.new
595
+ # config.username = 'alice@example.com'
596
+ # config.token = 'test123abc'
597
+ # config.url = 'https://example.zendesk.com/api/v2'
598
+ # client = Readiness::Zendesk::Client.new(config)
599
+ # user = Readiness::Zendesk::Users.find!(client, 123456)
600
+ # tickets = Readiness::Zendesk::Users.ccd_tickets(client, user)
601
+ # pp tickets.count
602
+ # # => 6
603
+ def self.ccd_tickets(client, user)
604
+ array = []
605
+ opts = "page[size]=100"
606
+ loop do
607
+ response = client.connection.get("users/#{user.id}/tickets/ccd?#{opts}")
608
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
609
+ body = Oj.load(response.body)
610
+ array += body['tickets'].map { |t| Tickets.new(t) }
611
+ break unless body['meta']['has_more']
612
+
613
+ opts = body['links'] ['next'].split('?').last
614
+ end
615
+ array
616
+ end
617
+
618
+ ##
619
+ # Lists tickets that a user is assigned.
620
+ #
621
+ # @author Jason Colyer
622
+ # @since 1.0.0
623
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
624
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
625
+ # @return [Array]
626
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
627
+ # @example
628
+ # require 'support_readiness'
629
+ # config = Readiness::Zendesk::Configuration.new
630
+ # config.username = 'alice@example.com'
631
+ # config.token = 'test123abc'
632
+ # config.url = 'https://example.zendesk.com/api/v2'
633
+ # client = Readiness::Zendesk::Client.new(config)
634
+ # user = Readiness::Zendesk::Users.find!(client, 123456)
635
+ # tickets = Readiness::Zendesk::Users.assigned_tickets(client, user)
636
+ # pp tickets.count
637
+ # # => 2
638
+ def self.assigned_tickets(client, user)
639
+ array = []
640
+ opts = "page[size]=100"
641
+ loop do
642
+ response = client.connection.get("users/#{user.id}/tickets/assigned?#{opts}")
643
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
644
+ body = Oj.load(response.body)
645
+ array += body['tickets'].map { |t| Tickets.new(t) }
646
+ break unless body['meta']['has_more']
647
+
648
+ opts = body['links'] ['next'].split('?').last
649
+ end
650
+ array
651
+ end
652
+
653
+ ##
654
+ # Lists organization a user is part of.
655
+ #
656
+ # @author Jason Colyer
657
+ # @since 1.0.0
658
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
659
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
660
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
661
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-organization Zendesk API > Organizations > Show Organization
662
+ # @example
663
+ # require 'support_readiness'
664
+ # config = Readiness::Zendesk::Configuration.new
665
+ # config.username = 'alice@example.com'
666
+ # config.token = 'test123abc'
667
+ # config.url = 'https://example.zendesk.com/api/v2'
668
+ # client = Readiness::Zendesk::Client.new(config)
669
+ # user = Readiness::Zendesk::Users.find!(client, 123456)
670
+ # organization = Readiness::Zendesk::Users.organization(client, user)
671
+ # pp organization.name
672
+ # # => "Groablet Enterprises"
673
+ def self.organization(client, user)
674
+ return nil if user.organization_id.nil?
675
+
676
+ Organizations.find(client, user.organization_id)
677
+ end
678
+
679
+ ##
680
+ # Creates multiple users via a batch job
681
+ #
682
+ # @author Jason Colyer
683
+ # @since 1.0.0
684
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
685
+ # @param users [Array] An array of {Readiness::Zendesk::Users} instances
686
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
687
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-many-users Zendesk API > Users > Create Many Users
688
+ # @example
689
+ # require 'support_readiness'
690
+ # config = Readiness::Zendesk::Configuration.new
691
+ # config.username = 'alice@example.com'
692
+ # config.token = 'test123abc'
693
+ # config.url = 'https://example.zendesk.com/api/v2'
694
+ # client = Readiness::Zendesk::Client.new(config)
695
+ # user1 = Readiness::Zendesk::Users.new
696
+ # user1.email = 'alice@example.com'
697
+ # user1.name = 'Alice Example'
698
+ # user2 = Readiness::Zendesk::Users.new
699
+ # user2.email = 'bob@example.com'
700
+ # user2.name = 'Bob Example'
701
+ # users = [user1, user2]
702
+ # creates = Readiness::Zendesk::Users.create_many!(client, users)
703
+ # pp creates.id
704
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
705
+ def self.create_many!(client, users)
706
+ data = { users: users.map { |u| to_hash(u).compact } }.to_json
707
+ response = client.connection.post('users/create_many', data)
708
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create many users', message: Oj.load(response.body)}) unless response.status == 200
709
+ JobStatuses.new(Oj.load(response.body)['job_status'])
710
+ end
711
+
712
+ ##
713
+ # Creates or updates multiple users via a batch job
714
+ #
715
+ # @author Jason Colyer
716
+ # @since 1.0.0
717
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
718
+ # @param users [Array] An array of {Readiness::Zendesk::Users} instances
719
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
720
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#create-or-update-many-users Zendesk API > Users > Create Or Update Many Users
721
+ # @example
722
+ # require 'support_readiness'
723
+ # config = Readiness::Zendesk::Configuration.new
724
+ # config.username = 'alice@example.com'
725
+ # config.token = 'test123abc'
726
+ # config.url = 'https://example.zendesk.com/api/v2'
727
+ # client = Readiness::Zendesk::Client.new(config)
728
+ # user1 = Readiness::Zendesk::Users.new
729
+ # user1.email = 'alice@example.com'
730
+ # user1.name = 'Alice Example'
731
+ # user2 = Readiness::Zendesk::Users.find!(client, 456)
732
+ # user2.name = 'Bob Example'
733
+ # users = [user1, user2]
734
+ # creates = Readiness::Zendesk::Users.create_or_update_many!(client, users)
735
+ # pp creates.id
736
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
737
+ def self.create_or_update_many!(client, users)
738
+ data = { users: users.map { |u| to_hash(u).compact } }.to_json
739
+ response = client.connection.post('users/create_or_update_many', data)
740
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update many users', message: Oj.load(response.body)}) unless response.status == 200
741
+ JobStatuses.new(Oj.load(response.body)['job_status'])
742
+ end
743
+
744
+ ##
745
+ # Updates multiple users via a batch job
746
+ #
747
+ # @author Jason Colyer
748
+ # @since 1.0.0
749
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
750
+ # @param users [Array] An array of {Readiness::Zendesk::Users} instances
751
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
752
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#update-many-users Zendesk API > Users > Update Many Users
753
+ # @example
754
+ # require 'support_readiness'
755
+ # config = Readiness::Zendesk::Configuration.new
756
+ # config.username = 'alice@example.com'
757
+ # config.token = 'test123abc'
758
+ # config.url = 'https://example.zendesk.com/api/v2'
759
+ # client = Readiness::Zendesk::Client.new(config)
760
+ # user1 = Readiness::Zendesk::Users.find!(client, 123)
761
+ # user1.name = 'Alice Example'
762
+ # user2 = Readiness::Zendesk::Users.find!(client, 456)
763
+ # user2.name = 'Bob Example'
764
+ # users = [user1, user2]
765
+ # updates = Readiness::Zendesk::Users.update_many!(client, users)
766
+ # pp updates.id
767
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
768
+ def self.update_many!(client, users)
769
+ data = { users: users.map { |u| to_hash(u).compact } }.to_json
770
+ response = client.connection.post('users/update_many', data)
771
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update many users', message: Oj.load(response.body)}) unless response.status == 200
772
+ JobStatuses.new(Oj.load(response.body)['job_status'])
773
+ end
774
+
775
+ ##
776
+ # Deletes multiple users via a batch job
777
+ #
778
+ # @author Jason Colyer
779
+ # @since 1.0.0
780
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
781
+ # @param uids [Array] An array of user IDs
782
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
783
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#bulk-delete-tickets Zendesk API > Tickets > Bulk Delete Tickets
784
+ # @example
785
+ # require 'support_readiness'
786
+ # config = Readiness::Zendesk::Configuration.new
787
+ # config.username = 'alice@example.com'
788
+ # config.token = 'test123abc'
789
+ # config.url = 'https://example.zendesk.com/api/v2'
790
+ # client = Readiness::Zendesk::Client.new(config)
791
+ # delete = Readiness::Zendesk::Users.delete_many!(client, [35436, 35437])
792
+ # pp delete.id
793
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
794
+ def self.delete_many!(client, uids)
795
+ response = client.connection.delete("users/destroy_many?ids=#{uids.join(',')}")
796
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many users', message: Oj.load(response.body)}) unless response.status == 200
797
+ JobStatuses.new(Oj.load(response.body)['job_status'])
798
+ end
799
+
800
+ ##
801
+ # Lists organization memberships for a user
802
+ #
803
+ # @author Jason Colyer
804
+ # @since 1.0.0
805
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
806
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
807
+ # @return [Array]
808
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#list-memberships Zendesk API > Organization Memberships > List Memberships
809
+ # @example
810
+ # require 'support_readiness'
811
+ # config = Readiness::Zendesk::Configuration.new
812
+ # config.username = 'alice@example.com'
813
+ # config.token = 'test123abc'
814
+ # config.url = 'https://example.zendesk.com/api/v2'
815
+ # client = Readiness::Zendesk::Client.new(config)
816
+ # user = Readiness::Zendesk::Users.find!(client, 123)
817
+ # members = Readiness::Zendesk::Users.organization_memberships(client, user)
818
+ # pp members.first.organization_id
819
+ # # => 456
820
+ def self.organization_memberships(client, user)
821
+ array = []
822
+ opts = "page[size]=100"
823
+ loop do
824
+ response = client.connection.get("user/#{user.id}/organization_memberships?#{opts}")
825
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
826
+ body = Oj.load(response.body)
827
+ array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
828
+ break if limit != 0 && array.count >= (limit * 100)
829
+ break unless body['meta']['has_more']
830
+
831
+ opts = body['links'] ['next'].split('?').last
832
+ end
833
+ array
834
+ end
835
+
836
+ ##
837
+ # Sets the default organization membership of a given user
838
+ #
839
+ # @author Jason Colyer
840
+ # @since 1.0.0
841
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
842
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
843
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
844
+ # @return [Array]
845
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#set-organization-as-default Zendesk API > Organization Memberships > Set Organization as Default
846
+ # @example
847
+ # require 'support_readiness'
848
+ # config = Readiness::Zendesk::Configuration.new
849
+ # config.username = 'alice@example.com'
850
+ # config.token = 'test123abc'
851
+ # config.url = 'https://example.zendesk.com/api/v2'
852
+ # client = Readiness::Zendesk::Client.new(config)
853
+ # user = Readiness::Zendesk::Users.find!(client, 123)
854
+ # org = Readiness::Zendesk::Organizations.find!(client, 456)
855
+ # member = Readiness::Zendesk::Users.set_default_organization!(client, user, org)
856
+ # pp member.id
857
+ # # => 4
858
+ def self.set_default_organization!(client, user, organization)
859
+ response = client.connection.put("users/#{user.id}/organizations/#{organization.id}/make_default")
860
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Set org as default', message: Oj.load(response.body)}) unless response.status == 200
861
+ OrganizationMemberships.new(Oj.load(response.body)['organization_membership'])
862
+ end
863
+
864
+ ##
865
+ # Lists group memberships for a user
866
+ #
867
+ # @author Jason Colyer
868
+ # @since 1.0.0
869
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
870
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
871
+ # @return [Array]
872
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships Zendesk API > Group Memberships > List Memberships
873
+ # @example
874
+ # require 'support_readiness'
875
+ # config = Readiness::Zendesk::Configuration.new
876
+ # config.username = 'alice@example.com'
877
+ # config.token = 'test123abc'
878
+ # config.url = 'https://example.zendesk.com/api/v2'
879
+ # client = Readiness::Zendesk::Client.new(config)
880
+ # user = Readiness::Zendesk::Users.find!(client, 123)
881
+ # members = Readiness::Zendesk::Users.group_memberships(client, user)
882
+ # pp members.first.group_id
883
+ # # => 456
884
+ def self.group_memberships(client, user)
885
+ response = client.connection.get("users/#{user.id}/group_memberships?page[size]=100")
886
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
887
+ Oj.load(response.body)['group_memberships'].map { |m| GroupMemberships.new(m) }
888
+ end
889
+
890
+ ##
891
+ # Sets the default group membership of a given user
892
+ #
893
+ # @author Jason Colyer
894
+ # @since 1.0.0
895
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
896
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
897
+ # @param group [Object] An instance of {Readiness::Zendesk::Group}
898
+ # @return [Array]
899
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#set-membership-as-default Zendesk API > Group Memberships > Set Membership as Default
900
+ # @example
901
+ # require 'support_readiness'
902
+ # config = Readiness::Zendesk::Configuration.new
903
+ # config.username = 'alice@example.com'
904
+ # config.token = 'test123abc'
905
+ # config.url = 'https://example.zendesk.com/api/v2'
906
+ # client = Readiness::Zendesk::Client.new(config)
907
+ # user = Readiness::Zendesk::Users.find!(client, 123)
908
+ # group = Readiness::Zendesk::Groups.find!(client, 456)
909
+ # member = Readiness::Zendesk::Users.set_default_group!(client, user, group)
910
+ # pp member.id
911
+ # # => 4
912
+ def self.set_default_group!(client, user, group)
913
+ response = client.connection.put("users/#{user.id}/group_memberships/#{group.id}/make_default")
914
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Set group as default', message: Oj.load(response.body)}) unless response.status == 200
915
+ GroupMemberships.new(Oj.load(response.body)['group_memberships'])
916
+ end
917
+
918
+ ##
919
+ # Sets the password for a user
920
+ #
921
+ # @author Jason Colyer
922
+ # @since 1.0.0
923
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
924
+ # @param user [Object] An instance of {Readiness::Zendesk::Users}
925
+ # @param password [String] The password to set
926
+ # @return [Array]
927
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/user_passwords/#set-a-users-password Zendesk API > User Password > Set a User's Password
928
+ # @example
929
+ # require 'support_readiness'
930
+ # config = Readiness::Zendesk::Configuration.new
931
+ # config.username = 'alice@example.com'
932
+ # config.token = 'test123abc'
933
+ # config.url = 'https://example.zendesk.com/api/v2'
934
+ # client = Readiness::Zendesk::Client.new(config)
935
+ # user = Readiness::Zendesk::Users.find!(client, 123)
936
+ # action = Readiness::Zendesk::Users.set_password!(client, user, 'test123!')
937
+ # pp action
938
+ # # => true
939
+ def self.set_password!(client, user, password)
940
+ response = client.connection.post "users/#{user.id}/password", { password: password }.to_json
941
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Set user password', id: user.id, message: Oj.load(response.body)}) unless response.status == 200
942
+ true
943
+ end
944
+ end
945
+ end
946
+ end