gitlab_support_readiness 1.0.0

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