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,515 @@
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 Organizations within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ # @todo Merge org
13
+ # @todo Show merge
14
+ # @todo List merges
15
+ class Organizations < Readiness::Client
16
+ attr_accessor :details, :domain_names, :external_id, :group_id, :id, :name, :notes, :organization_fields, :shared_comments, :shared_tickets, :tags
17
+
18
+ ##
19
+ # Creates a new {Readiness::Zendesk::Organizations} instance
20
+ #
21
+ # @author Jason Colyer
22
+ # @since 1.0.0
23
+ # @param object [Object] An instance of {Readiness::Zendesk::Organizations}
24
+ # @example
25
+ # require 'support_readiness'
26
+ # Readiness::Zendesk::Organizations.new
27
+ def initialize(object = {})
28
+ @details = object['details']
29
+ @domain_names = object['domain_names']
30
+ @external_id = object['external_id']
31
+ @group_id = object['group_id']
32
+ @id = object['id']
33
+ @name = object['name']
34
+ @notes = object['notes']
35
+ @organization_fields = object['organization_fields']
36
+ @shared_comments = object['shared_comments']
37
+ @shared_tickets = object['shared_tickets']
38
+ @tags = object['tags']
39
+ end
40
+
41
+ ##
42
+ # Lists the first 100 organizations
43
+ #
44
+ # @author Jason Colyer
45
+ # @since 1.0.0
46
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
47
+ # @return [Array]
48
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#list-organizations Zendesk API > Organizations > List Organizations
49
+ # @example
50
+ # require 'support_readiness'
51
+ # config = Readiness::Zendesk::Configuration.new
52
+ # config.username = 'alice@example.com'
53
+ # config.token = 'test123abc'
54
+ # config.url = 'https://example.zendesk.com/api/v2'
55
+ # client = Readiness::Zendesk::Client.new(config)
56
+ # orgs = Readiness::Zendesk::Organizations.list(client)
57
+ # pp orgs.first.id
58
+ # # => 4112492
59
+ def self.list(client)
60
+ response = client.connection.get("organizations?page[size]=100")
61
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
62
+ Oj.load(response.body)['organizations'].map { |o| Organizations.new(o) }
63
+ end
64
+
65
+ ##
66
+ # Lists many organizations. Does not stop until it ends or the page limit is hit.
67
+ # This method can take a long time to run depending on the parameters used.
68
+ #
69
+ # @author Jason Colyer
70
+ # @since 1.0.0
71
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
72
+ # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
73
+ # @return [Array]
74
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#list-organizations Zendesk API > Organizations > List Organizations
75
+ # @example
76
+ # require 'support_readiness'
77
+ # config = Readiness::Zendesk::Configuration.new
78
+ # config.username = 'alice@example.com'
79
+ # config.token = 'test123abc'
80
+ # config.url = 'https://example.zendesk.com/api/v2'
81
+ # client = Readiness::Zendesk::Client.new(config)
82
+ # orgs = Readiness::Zendesk::Organizations.list_many(client, 4)
83
+ # pp orgs.count
84
+ # # => 400
85
+ def self.list_many(client, limit = 0, sort = 'id')
86
+ array = []
87
+ opts = "page[size]=100"
88
+ loop do
89
+ response = client.connection.get("organizations?#{opts}")
90
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
91
+ body = Oj.load(response.body)
92
+ array += body['organizations'].map { |o| Organizations.new(o) }
93
+ break if limit != 0 && array.count >= (limit * 100)
94
+ break unless body['meta']['has_more']
95
+
96
+ opts = body['links'] ['next'].split('?').last
97
+ end
98
+ array
99
+ end
100
+
101
+ ##
102
+ # Show information on the approximate count of organizations.
103
+ #
104
+ # @author Jason Colyer
105
+ # @since 1.0.0
106
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
107
+ # @return [Hash]
108
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#count-organizations Zendesk API > Organizations > Count Organizations
109
+ # @example
110
+ # require 'support_readiness'
111
+ # config = Readiness::Zendesk::Configuration.new
112
+ # config.username = 'alice@example.com'
113
+ # config.token = 'test123abc'
114
+ # config.url = 'https://example.zendesk.com/api/v2'
115
+ # client = Readiness::Zendesk::Client.new(config)
116
+ # count = Readiness::Zendesk::Organizations.count(client)
117
+ # pp count.value
118
+ # # => 54590
119
+ def self.count(client)
120
+ response = client.connection.get('organizations/count')
121
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
122
+ Oj.load(response.body)['count']
123
+ end
124
+
125
+ ##
126
+ # Locates an organization within Zendesk. This will not exit on error (except Authentication errors)
127
+ #
128
+ # @author Jason Colyer
129
+ # @since 1.0.0
130
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
131
+ # @param oid [Integer] The organization ID to find
132
+ # @return [Hash]
133
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-organization Zendesk API > ORganizations > Show Organization
134
+ # @example
135
+ # require 'support_readiness'
136
+ # config = Readiness::Zendesk::Configuration.new
137
+ # config.username = 'alice@example.com'
138
+ # config.token = 'test123abc'
139
+ # config.url = 'https://example.zendesk.com/api/v2'
140
+ # client = Readiness::Zendesk::Client.new(config)
141
+ # org = Readiness::Zendesk::Organizations.find(client, 4112492)
142
+ # pp org.name
143
+ # # => "Groablet Enterprises"
144
+ def self.find(client, oid)
145
+ response = client.connection.get("organizations/#{oid}")
146
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: oid }) unless response.status == 200
147
+ return Organizations.new(Oj.load(response.body)['organization']) if response.status == 200
148
+
149
+ Oj.load(response.body)
150
+ end
151
+
152
+ ##
153
+ # Locates an organization within Zendesk. This will exit on error
154
+ #
155
+ # @author Jason Colyer
156
+ # @since 1.0.0
157
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
158
+ # @param oid [Integer] The organization ID to find
159
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
160
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-organization Zendesk API > Organizations > Show Organization
161
+ # @example
162
+ # require 'support_readiness'
163
+ # config = Readiness::Zendesk::Configuration.new
164
+ # config.username = 'alice@example.com'
165
+ # config.token = 'test123abc'
166
+ # config.url = 'https://example.zendesk.com/api/v2'
167
+ # client = Readiness::Zendesk::Client.new(config)
168
+ # org = Readiness::Zendesk::Organizations.find!(client, 4112492)
169
+ # pp org.name
170
+ # # => "Groablet Enterprises"
171
+ def self.find!(client, oid)
172
+ response = client.connection.get("organizations/#{oid}")
173
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find organization', id: oid }) unless response.status == 200
174
+ Organizations.new(Oj.load(response.body)['organization'])
175
+ end
176
+
177
+ ##
178
+ # Locates up to 100 organizations within Zendesk.
179
+ #
180
+ # @author Jason Colyer
181
+ # @since 1.0.0
182
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
183
+ # @param oids [Array] The organization IDs to find
184
+ # @return [Array]
185
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#show-many-organizations Zendesk API > Organizations > Show Many Organizations
186
+ # @example
187
+ # require 'support_readiness'
188
+ # config = Readiness::Zendesk::Configuration.new
189
+ # config.username = 'alice@example.com'
190
+ # config.token = 'test123abc'
191
+ # config.url = 'https://example.zendesk.com/api/v2'
192
+ # client = Readiness::Zendesk::Client.new(config)
193
+ # orgs = Readiness::Zendesk::Organizations.find_many(client, [35436, 20057623])
194
+ # pp orgs.map { |o| o.name }
195
+ # # => ["Important Customers", "Imperial College"]
196
+ def self.find_many(client, oids)
197
+ response = client.connection.get("organizations/show_many?ids=#{oids.join(',')}")
198
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: oids }) unless response.status == 200
199
+ Oj.load(response.body)['organizations'].map { |o| Organizations.new(o) }
200
+ end
201
+
202
+ ##
203
+ # Creates an organization. Will exit if unsuccessful
204
+ #
205
+ # @author Jason Colyer
206
+ # @since 1.0.0
207
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
208
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
209
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
210
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#create-organization Zendesk API > Organizations > Create Organization
211
+ # @example
212
+ # require 'support_readiness'
213
+ # config = Readiness::Zendesk::Configuration.new
214
+ # config.username = 'alice@example.com'
215
+ # config.token = 'test123abc'
216
+ # config.url = 'https://example.zendesk.com/api/v2'
217
+ # client = Readiness::Zendesk::Client.new(config)
218
+ # org = Readiness::Zendesk::Organizations.new
219
+ # org.name = 'My Organization'
220
+ # create = Readiness::Zendesk::Organizations.create!(client, org)
221
+ # pp create.id
222
+ # # => 23409462
223
+ def self.create!(client, organization)
224
+ response = client.connection.post 'organizations', to_clean_json_with_key(organization, 'organization')
225
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create organization', message: Oj.load(response.body)}) unless response.status == 201
226
+ Organizations.new(Oj.load(response.body)['organization'])
227
+ end
228
+
229
+ ##
230
+ # Creates or updates an organization. Will exit if unsuccessful
231
+ #
232
+ # @author Jason Colyer
233
+ # @since 1.0.0
234
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
235
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
236
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
237
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#create-or-update-organization Zendesk API > Organizations > Create Or Update Organization
238
+ # @example
239
+ # require 'support_readiness'
240
+ # config = Readiness::Zendesk::Configuration.new
241
+ # config.username = 'alice@example.com'
242
+ # config.token = 'test123abc'
243
+ # config.url = 'https://example.zendesk.com/api/v2'
244
+ # client = Readiness::Zendesk::Client.new(config)
245
+ # org = Readiness::Zendesk::Organizations.find!(client, 123)
246
+ # org.name = 'My Organization'
247
+ # create = Readiness::Zendesk::Organizations.create_or_update!(client, org)
248
+ # pp create.name
249
+ # # => 'My Organization'
250
+ # @example
251
+ # require 'support_readiness'
252
+ # config = Readiness::Zendesk::Configuration.new
253
+ # config.username = 'alice@example.com'
254
+ # config.token = 'test123abc'
255
+ # config.url = 'https://example.zendesk.com/api/v2'
256
+ # client = Readiness::Zendesk::Client.new(config)
257
+ # org = Readiness::Zendesk::Organizations.new
258
+ # org.name = 'My Organization'
259
+ # create = Readiness::Zendesk::Organizations.create_or_update!(client, org)
260
+ # pp create.id
261
+ # # => 23409462
262
+ def self.create_or_update!(client, organization)
263
+ response = client.connection.post 'organizations/create_or_update', to_clean_json_with_key(organization, 'organization')
264
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update organization', id: organization.name, message: Oj.load(response.body)}) unless [200, 201].include?(response.status)
265
+ Organizations.new(Oj.load(response.body)['organization'])
266
+ end
267
+
268
+ ##
269
+ # Updates an organization. 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 organization [Object] An instance of {Readiness::Zendesk::Organizations}
275
+ # @return [Object] An instance of {Readiness::Zendesk::Organizations}
276
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#update-organization Zendesk API > Organizations > Update Organization
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
+ # org = Readiness::Zendesk::Organizations.find!(client, 4112492)
285
+ # org.notes = 'Something interesting'
286
+ # update = Readiness::Zendesk::Organizations.update!(client, org)
287
+ # pp update.notes
288
+ # # => "Something interesting"
289
+ def self.update!(client, organization)
290
+ response = client.connection.put "organizations/#{organization.id}", to_clean_json_with_key(organization, 'organization')
291
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update organization', id: organization.id, message: Oj.load(response.body)}) unless response.status == 200
292
+ Organizations.new(Oj.load(response.body)['organization'])
293
+ end
294
+
295
+ ##
296
+ # Deletes an organization. Will exit if unsuccessful
297
+ #
298
+ # @author Jason Colyer
299
+ # @since 1.0.0
300
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
301
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
302
+ # @return [Boolean]
303
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#delete-organization Zendesk API > Organizations > Delete Organization
304
+ # @example
305
+ # require 'support_readiness'
306
+ # config = Readiness::Zendesk::Configuration.new
307
+ # config.username = 'alice@example.com'
308
+ # config.token = 'test123abc'
309
+ # config.url = 'https://example.zendesk.com/api/v2'
310
+ # client = Readiness::Zendesk::Client.new(config)
311
+ # org = Readiness::Zendesk::Organizations.find!(client, 16)
312
+ # delete = Readiness::Zendesk::Organizations.delete!(client, org)
313
+ # pp delete
314
+ # # => true
315
+ def self.delete!(client, organization)
316
+ response = client.connection.delete "organizations/#{organization.id}"
317
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an organization', id: organization.id, message: Oj.load(response.body)}) unless response.status == 204
318
+ true
319
+ end
320
+
321
+ ##
322
+ # Lists tickets for an organization.
323
+ #
324
+ # @author Jason Colyer
325
+ # @since 1.0.0
326
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
327
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
328
+ # @return [Array]
329
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/tickets/#list-tickets Zendesk API > Tickets > List Tickets
330
+ # @example
331
+ # require 'support_readiness'
332
+ # config = Readiness::Zendesk::Configuration.new
333
+ # config.username = 'alice@example.com'
334
+ # config.token = 'test123abc'
335
+ # config.url = 'https://example.zendesk.com/api/v2'
336
+ # client = Readiness::Zendesk::Client.new(config)
337
+ # org = Readiness::Zendesk::Organizations.find!(client, 16)
338
+ # tickets = Readiness::Zendesk::Organizations.tickets(client, org)
339
+ # pp tickets.first.status
340
+ # # => "pending"
341
+ def self.tickets(client, organization)
342
+ array = []
343
+ opts = "page[size]=100"
344
+ loop do
345
+ response = client.connection.get("organizations/#{organization.id}/tickets?#{opts}")
346
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
347
+ body = Oj.load(response.body)
348
+ array += body['tickets'].map { |t| Tickets.new(t) }
349
+ break unless body['meta']['has_more']
350
+
351
+ opts = body['links'] ['next'].split('?').last
352
+ end
353
+ array
354
+ end
355
+
356
+ ##
357
+ # Lists users for an organization.
358
+ #
359
+ # @author Jason Colyer
360
+ # @since 1.0.0
361
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
362
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
363
+ # @return [Array]
364
+ # @see https://developer.zendesk.com/api-reference/ticketing/users/users/#list-users Zendesk API > USers > List Users
365
+ # @example
366
+ # require 'support_readiness'
367
+ # config = Readiness::Zendesk::Configuration.new
368
+ # config.username = 'alice@example.com'
369
+ # config.token = 'test123abc'
370
+ # config.url = 'https://example.zendesk.com/api/v2'
371
+ # client = Readiness::Zendesk::Client.new(config)
372
+ # org = Readiness::Zendesk::Organizations.find!(client, 16)
373
+ # users = Readiness::Zendesk::Organizations.users(client, org)
374
+ # pp users.count
375
+ # # => 28
376
+ def self.users(client, organization)
377
+ array = []
378
+ opts = "page[size]=100"
379
+ loop do
380
+ response = client.connection.get("organizations/#{organization.id}/users?#{opts}")
381
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
382
+ body = Oj.load(response.body)
383
+ array += body['users'].map { |u| Users.new(u) }
384
+ break unless body['meta']['has_more']
385
+
386
+ opts = body['links'] ['next'].split('?').last
387
+ end
388
+ array
389
+ end
390
+
391
+ ##
392
+ # Creates multiple organizations via a batch job
393
+ #
394
+ # @author Jason Colyer
395
+ # @since 1.0.0
396
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
397
+ # @param organizations [Array] An array of {Readiness::Zendesk::Organizations} instances
398
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
399
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#create-many-organizations Zendesk API > ORganizations > Create Many Organizations
400
+ # @example
401
+ # require 'support_readiness'
402
+ # config = Readiness::Zendesk::Configuration.new
403
+ # config.username = 'alice@example.com'
404
+ # config.token = 'test123abc'
405
+ # config.url = 'https://example.zendesk.com/api/v2'
406
+ # client = Readiness::Zendesk::Client.new(config)
407
+ # org1 = Readiness::Zendesk::Organizations.new
408
+ # org1.name = 'Org 1'
409
+ # org2 = Readiness::Zendesk::Organizations.new
410
+ # org2.name = 'Org 2'
411
+ # orgs = [org1, org2]
412
+ # creates = Readiness::Zendesk::Organizations.create_many!(client, orgs)
413
+ # pp creates.id
414
+ # # => "8b726e606741012ffc2d782bcb7848fe"
415
+ def self.create_many!(client, organizations)
416
+ data = { organizations: organizations.map { |o| to_hash(o).compact } }.to_json
417
+ response = client.connection.post('organizations/create_many', data)
418
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create many organizations', message: Oj.load(response.body)}) unless response.status == 200
419
+ JobStatuses.new(Oj.load(response.body)['job_status'])
420
+ end
421
+
422
+ ##
423
+ # Updates multiple organizations via a batch job
424
+ #
425
+ # @author Jason Colyer
426
+ # @since 1.0.0
427
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
428
+ # @param organizations [Array] An array of {Readiness::Zendesk::Organizations} instances
429
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
430
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#update-many-organizations Zendesk API > ORganizations > Update Many Organizations
431
+ # @example
432
+ # require 'support_readiness'
433
+ # config = Readiness::Zendesk::Configuration.new
434
+ # config.username = 'alice@example.com'
435
+ # config.token = 'test123abc'
436
+ # config.url = 'https://example.zendesk.com/api/v2'
437
+ # client = Readiness::Zendesk::Client.new(config)
438
+ # org1 = Readiness::Zendesk::Organizations.find!(client, 123)
439
+ # org1.notes = 'Escalated customer, please use due diligence'
440
+ # org2 = Readiness::Zendesk::Organizations.find!(client, 456)
441
+ # org2.notes = 'Escalated customer, please use due diligence'
442
+ # orgs = [org1, org2]
443
+ # updates = Readiness::Zendesk::Organizations.update_many!(client, orgs)
444
+ # pp updates.id
445
+ # # => "8b726e606741012ffc2d782bcb7848fe"
446
+ def self.update_many!(client, organizations)
447
+ data = { organizations: organizations.map { |o| to_hash(o).compact } }.to_json
448
+ response = client.connection.put('organizations/update_many', data)
449
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update many organizations', message: Oj.load(response.body)}) unless response.status == 200
450
+ JobStatuses.new(Oj.load(response.body)['job_status'])
451
+ end
452
+
453
+ ##
454
+ # Deletes multiple organizations via a batch job
455
+ #
456
+ # @author Jason Colyer
457
+ # @since 1.0.0
458
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
459
+ # @param oids [Array] An array of organization IDs to delete
460
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
461
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organizations/#bulk-delete-organizations Zendesk API > ORganizations > Bulk Delete Organizations
462
+ # @example
463
+ # require 'support_readiness'
464
+ # config = Readiness::Zendesk::Configuration.new
465
+ # config.username = 'alice@example.com'
466
+ # config.token = 'test123abc'
467
+ # config.url = 'https://example.zendesk.com/api/v2'
468
+ # client = Readiness::Zendesk::Client.new(config)
469
+ # deletes = Readiness::Zendesk::Organizations.delete_many!(client, [123, 456])
470
+ # pp deletes.id
471
+ # # => "8b726e606741012ffc2d782bcb7848fe"
472
+ def self.delete_many!(client, oids)
473
+ response = client.connection.delete "organizations/destroy_many?ids=#{oids.join(',')}"
474
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many organizations', message: Oj.load(response.body)}) unless response.status == 200
475
+ JobStatuses.new(Oj.load(response.body)['job_status'])
476
+ end
477
+
478
+ ##
479
+ # Lists members of an organization
480
+ #
481
+ # @author Jason Colyer
482
+ # @since 1.0.0
483
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
484
+ # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
485
+ # @return [Array]
486
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#list-memberships Zendesk API > Organization Memberships > List Memberships
487
+ # @example
488
+ # require 'support_readiness'
489
+ # config = Readiness::Zendesk::Configuration.new
490
+ # config.username = 'alice@example.com'
491
+ # config.token = 'test123abc'
492
+ # config.url = 'https://example.zendesk.com/api/v2'
493
+ # client = Readiness::Zendesk::Client.new(config)
494
+ # org = Readiness::Zendesk::Organizations.find!(client, 123)
495
+ # members = Readiness::Zendesk::Organizations.memberships(client, org)
496
+ # pp members.first.user_id
497
+ # # => 29
498
+ def self.memberships(client, organization)
499
+ array = []
500
+ opts = "page[size]=100"
501
+ loop do
502
+ response = client.connection.get("organizations/#{organization.id}/organization_memberships?#{opts}")
503
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
504
+ body = Oj.load(response.body)
505
+ array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
506
+ break if limit != 0 && array.count >= (limit * 100)
507
+ break unless body['meta']['has_more']
508
+
509
+ opts = body['links'] ['next'].split('?').last
510
+ end
511
+ array
512
+ end
513
+ end
514
+ end
515
+ end