gitlab-customer-support-operations_zendesk 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 (58) hide show
  1. checksums.yaml +7 -0
  2. data/lib/support_ops_zendesk/packages.rb +89 -0
  3. data/lib/support_ops_zendesk/zendesk/app_installations.rb +62 -0
  4. data/lib/support_ops_zendesk/zendesk/app_job_statuses.rb +157 -0
  5. data/lib/support_ops_zendesk/zendesk/apps.rb +476 -0
  6. data/lib/support_ops_zendesk/zendesk/articles.rb +362 -0
  7. data/lib/support_ops_zendesk/zendesk/audit_logs.rb +166 -0
  8. data/lib/support_ops_zendesk/zendesk/automations.rb +390 -0
  9. data/lib/support_ops_zendesk/zendesk/base.rb +472 -0
  10. data/lib/support_ops_zendesk/zendesk/brands.rb +172 -0
  11. data/lib/support_ops_zendesk/zendesk/client.rb +91 -0
  12. data/lib/support_ops_zendesk/zendesk/comments.rb +37 -0
  13. data/lib/support_ops_zendesk/zendesk/configuration.rb +138 -0
  14. data/lib/support_ops_zendesk/zendesk/custom_roles.rb +224 -0
  15. data/lib/support_ops_zendesk/zendesk/dynamic_content.rb +297 -0
  16. data/lib/support_ops_zendesk/zendesk/dynamic_content_variants.rb +309 -0
  17. data/lib/support_ops_zendesk/zendesk/group_memberships.rb +337 -0
  18. data/lib/support_ops_zendesk/zendesk/groups.rb +385 -0
  19. data/lib/support_ops_zendesk/zendesk/help_center_categories.rb +332 -0
  20. data/lib/support_ops_zendesk/zendesk/help_center_content_tags.rb +237 -0
  21. data/lib/support_ops_zendesk/zendesk/help_center_management_permission_groups.rb +271 -0
  22. data/lib/support_ops_zendesk/zendesk/help_center_sections.rb +378 -0
  23. data/lib/support_ops_zendesk/zendesk/help_center_topics.rb +274 -0
  24. data/lib/support_ops_zendesk/zendesk/help_center_user_segments.rb +279 -0
  25. data/lib/support_ops_zendesk/zendesk/job_statuses.rb +231 -0
  26. data/lib/support_ops_zendesk/zendesk/locales.rb +326 -0
  27. data/lib/support_ops_zendesk/zendesk/macros.rb +407 -0
  28. data/lib/support_ops_zendesk/zendesk/oauth_clients.rb +186 -0
  29. data/lib/support_ops_zendesk/zendesk/oauth_tokens.rb +114 -0
  30. data/lib/support_ops_zendesk/zendesk/organization_fields.rb +282 -0
  31. data/lib/support_ops_zendesk/zendesk/organization_memberships.rb +336 -0
  32. data/lib/support_ops_zendesk/zendesk/organizations.rb +568 -0
  33. data/lib/support_ops_zendesk/zendesk/requester_roles.rb +58 -0
  34. data/lib/support_ops_zendesk/zendesk/satisfaction_reasons.rb +161 -0
  35. data/lib/support_ops_zendesk/zendesk/schedule_holidays.rb +27 -0
  36. data/lib/support_ops_zendesk/zendesk/schedules.rb +192 -0
  37. data/lib/support_ops_zendesk/zendesk/search.rb +185 -0
  38. data/lib/support_ops_zendesk/zendesk/sla_policies.rb +302 -0
  39. data/lib/support_ops_zendesk/zendesk/targets.rb +96 -0
  40. data/lib/support_ops_zendesk/zendesk/theme_job_statuses.rb +154 -0
  41. data/lib/support_ops_zendesk/zendesk/themes.rb +328 -0
  42. data/lib/support_ops_zendesk/zendesk/ticket_field_options.rb +154 -0
  43. data/lib/support_ops_zendesk/zendesk/ticket_fields.rb +357 -0
  44. data/lib/support_ops_zendesk/zendesk/ticket_forms.rb +370 -0
  45. data/lib/support_ops_zendesk/zendesk/ticket_user_types.rb +67 -0
  46. data/lib/support_ops_zendesk/zendesk/tickets.rb +837 -0
  47. data/lib/support_ops_zendesk/zendesk/translations.rb +310 -0
  48. data/lib/support_ops_zendesk/zendesk/trigger_categories.rb +275 -0
  49. data/lib/support_ops_zendesk/zendesk/triggers.rb +427 -0
  50. data/lib/support_ops_zendesk/zendesk/user_field_options.rb +153 -0
  51. data/lib/support_ops_zendesk/zendesk/user_fields.rb +312 -0
  52. data/lib/support_ops_zendesk/zendesk/users.rb +889 -0
  53. data/lib/support_ops_zendesk/zendesk/via_types.rb +137 -0
  54. data/lib/support_ops_zendesk/zendesk/views.rb +636 -0
  55. data/lib/support_ops_zendesk/zendesk/webhooks.rb +206 -0
  56. data/lib/support_ops_zendesk/zendesk.rb +66 -0
  57. data/lib/support_ops_zendesk.rb +29 -0
  58. metadata +274 -0
@@ -0,0 +1,636 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module SupportOps.
4
+ module SupportOps
5
+ # Defines the module Zendesk
6
+ module Zendesk
7
+ ##
8
+ # Defines the class Views within the module {SupportOps::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ # @attr [Boolean] active Whether the view is active
13
+ # @attr [Hash] conditions Describes how the view is constructed
14
+ # @attr [String] created_at The time the view was created
15
+ # @attr [Boolean] default If true, the view is a default view
16
+ # @attr [String] description The description of the view
17
+ # @attr [Hash] execution Describes how the view should be executed
18
+ # @attr [Integer] id Automatically assigned when created
19
+ # @attr [Integer] position The position of the view
20
+ # @attr [Hash] restriction Who may access this account. Is null when everyone in the account can access it
21
+ # @attr [String] title The title of the view
22
+ # @attr [String] updated_at The time the view was last updated
23
+ # @todo List Views - Compact => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views---compact
24
+ # @todo Search Views => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#search-views
25
+ # @todo Preview Ticket Count => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#preview-ticket-count
26
+ # @todo Execute View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#execute-view
27
+ # @todo Count Tickets in View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-tickets-in-view
28
+ # @todo Count Tickets in Views => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-tickets-in-views
29
+ # @todo Export View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#export-view
30
+ class Views < SupportOps::Zendesk::Base
31
+ # @!parse
32
+ # # Creates/updates a view
33
+ # #
34
+ # # @author Jason Colyer
35
+ # # @since 1.0.0
36
+ # # @return [Object] Instance of {SupportOps::Zendesk::Views}
37
+ # # @note This is inherited from {SupportOps::Zendesk::Base#save!}
38
+ # # @see
39
+ # # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#create-view
40
+ # # Zendesk API > Views > Create View
41
+ # # @see
42
+ # # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#update-view
43
+ # # Zendesk API > Views > Update View
44
+ # # @example
45
+ # # require 'support_ops_zendesk'
46
+ # #
47
+ # # SupportOps::Zendesk::Configuration.configure do |config|
48
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
49
+ # # config.username = 'jason@example.com'
50
+ # # config.token = 'abc123'
51
+ # # end
52
+ # #
53
+ # # new_view = SupportOps::Zendesk::Views.new
54
+ # # new_view.title = "Kelly's tickets"
55
+ # # new_view.description = 'Tickets that are assigned to Kelly'
56
+ # # new_view.active = true
57
+ # # new_view.position = 3
58
+ # # new_view.conditions = {
59
+ # # "all" => [
60
+ # # { "field" => 'status', "operator" => 'less_than', "value" => 'solved' }
61
+ # # ],
62
+ # # "any" => []
63
+ # # }
64
+ # # new_view.execution = {
65
+ # # "columns" => [
66
+ # # { "id" => 'status', "title" => 'Status', "filterable" => true, "sortable" => true},
67
+ # # { "id" => 'requester', "title" => 'Requester', "filterable" => true, "sortable" => true},
68
+ # # { "id" => 'assignee', "title" => 'Assignee', "filterable" => true, "sortable" => true},
69
+ # # ],
70
+ # # "group_by" => 'assignee',
71
+ # # "group_order" => 'desc',
72
+ # # "sort_by" => 'status',
73
+ # # "sort_order" => 'desc',
74
+ # # "group" => {
75
+ # # "id" => 'assignee',
76
+ # # "title" => 'Assignee',
77
+ # # "filterable" => true,
78
+ # # "sortable" => true,
79
+ # # "order" => 'desc'
80
+ # # },
81
+ # # "sort" => {
82
+ # # "id" => 'status',
83
+ # # "title" => 'Status',
84
+ # # "filterable" => true,
85
+ # # "sortable" => true,
86
+ # # "order" => 'desc'
87
+ # # }
88
+ # # }
89
+ # #
90
+ # # new_view.save!
91
+ # #
92
+ # # pp new_view.id
93
+ # # # => 123
94
+ # # @example
95
+ # # require 'support_ops_zendesk'
96
+ # #
97
+ # # SupportOps::Zendesk::Configuration.configure do |config|
98
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
99
+ # # config.username = 'jason@example.com'
100
+ # # config.token = 'abc123'
101
+ # # end
102
+ # #
103
+ # # existing_view = SupportOps::Zendesk::Views.get!(9873843)
104
+ # # existing_view.title = 'Canada tickets'
105
+ # #
106
+ # # existing_view.save!
107
+ # #
108
+ # # pp existing_view.title
109
+ # # # => "Canada tickets"
110
+ # def save!; end
111
+ # @!parse
112
+ # # Deletes a view
113
+ # #
114
+ # # @author Jason Colyer
115
+ # # @since 1.0.0
116
+ # # @return [Boolean]
117
+ # # @note This is inherited from {SupportOps::Zendesk::Base#delete!}
118
+ # # @see
119
+ # # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#delete-view
120
+ # # Zendesk API > Views > Delete View
121
+ # # @example
122
+ # # require 'support_ops_zendesk'
123
+ # #
124
+ # # SupportOps::Zendesk::Configuration.configure do |config|
125
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
126
+ # # config.username = 'jason@example.com'
127
+ # # config.token = 'abc123'
128
+ # # end
129
+ # #
130
+ # # existing_view = SupportOps::Zendesk::Views.get!(9873843)
131
+ # # existing_view.delete!
132
+ # def delete!; end
133
+ # @!parse
134
+ # # Lists tickets from a view
135
+ # #
136
+ # # @author Jason Colyer
137
+ # # @since 1.0.0
138
+ # # @return [Object]
139
+ # # @note This is inherited from {SupportOps::Zendesk::Base#tickets}
140
+ # # @see
141
+ # # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-tickets-from-a-view
142
+ # # Zendesk API > Views > List Tickets From a View
143
+ # # @example
144
+ # # require 'support_ops_zendesk'
145
+ # #
146
+ # # SupportOps::Zendesk::Configuration.configure do |config|
147
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
148
+ # # config.username = 'jason@example.com'
149
+ # # config.token = 'abc123'
150
+ # # end
151
+ # #
152
+ # # view = SupportOps::Zendesk::Views.get!(17258763336988)
153
+ # # tickets = view.tickets
154
+ # #
155
+ # # pp tickets.first.status
156
+ # # # => "pending"
157
+ # def tickets; end
158
+ # @!parse
159
+ # # Previews what a view would look like
160
+ # #
161
+ # # @author Jason Colyer
162
+ # # @since 1.0.0
163
+ # # @return [Object]
164
+ # # @note This is inherited from {SupportOps::Zendesk::Base#preview!}
165
+ # # @see
166
+ # # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#preview-views
167
+ # # Zendesk API > Views > Preview View
168
+ # # @example
169
+ # # require 'support_ops_zendesk'
170
+ # #
171
+ # # SupportOps::Zendesk::Configuration.configure do |config|
172
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
173
+ # # config.username = 'jason@example.com'
174
+ # # config.token = 'abc123'
175
+ # # end
176
+ # #
177
+ # # existing_view = SupportOps::Zendesk::Views.get!(9873858)
178
+ # # preview = existing_view.preview!
179
+ # # pp preview['rows']['tickets'].first['id']
180
+ # # # => 12851
181
+ # # @example
182
+ # # require 'support_ops_zendesk'
183
+ # #
184
+ # # SupportOps::Zendesk::Configuration.configure do |config|
185
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
186
+ # # config.username = 'jason@example.com'
187
+ # # config.token = 'abc123'
188
+ # # end
189
+ # #
190
+ # # new_view = SupportOps::Zendesk::Views.new
191
+ # # new_view.conditions = {
192
+ # # "all" => [
193
+ # # { "field" => 'status', "operator" => 'less_than', "value" => 'solved' }
194
+ # # ],
195
+ # # "any" => []
196
+ # # }
197
+ # # new_view.execution = {
198
+ # # "columns" => [
199
+ # # { "id" => 'status', "title" => 'Status', "filterable" => true, "sortable" => true},
200
+ # # { "id" => 'requester', "title" => 'Requester', "filterable" => true, "sortable" => true},
201
+ # # { "id" => 'assignee', "title" => 'Assignee', "filterable" => true, "sortable" => true},
202
+ # # ],
203
+ # # "group_by" => 'assignee',
204
+ # # "group_order" => 'desc',
205
+ # # "sort_by" => 'status',
206
+ # # "sort_order" => 'desc',
207
+ # # "group" => {
208
+ # # "id" => 'assignee',
209
+ # # "title" => 'Assignee',
210
+ # # "filterable" => true,
211
+ # # "sortable" => true,
212
+ # # "order" => 'desc'
213
+ # # },
214
+ # # "sort" => {
215
+ # # "id" => 'status',
216
+ # # "title" => 'Status',
217
+ # # "filterable" => true,
218
+ # # "sortable" => true,
219
+ # # "order" => 'desc'
220
+ # # }
221
+ # # }
222
+ # # preview = new_view.preview!
223
+ # # pp preview['rows']['tickets'].first['id']
224
+ # # # => 21516
225
+ # def preview!; end
226
+ define_attributes :active, :conditions, :created_at, :default,
227
+ :description, :execution, :id, :position, :restriction,
228
+ :title, :updated_at
229
+ readonly_attributes :created_at, :default, :id, :updated_at
230
+
231
+ ##
232
+ # Lists views in the Zendesk system
233
+ #
234
+ # @author Jason Colyer
235
+ # @since 1.0.0
236
+ # @overload list(key: value)
237
+ # @param access [String optional] Only views with given access. May be
238
+ # "personal", "shared", or "account"
239
+ # @param active [Boolean optional]Only active views if true, inactive
240
+ # views if false
241
+ # @param group_id [Integer optional] Only views belonging to given group
242
+ # @param sort_by [String optional] Possible values are "alphabetical",
243
+ # "created_at", or "updated_at". Defaults to "position"
244
+ # @param sort_order [String optional] One of "asc" or "desc". Defaults to "asc" for alphabetical and position
245
+ # sort, "desc" for all others
246
+ # @param limit [Integer optional] The limit to the number of webhooks
247
+ # @return [Array]
248
+ # @see
249
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views
250
+ # Zendesk API > Views > List Views
251
+ # @see SupportOps::Zendesk::Configuration Setting up a client
252
+ # @example
253
+ # require 'support_ops_zendesk'
254
+ #
255
+ # SupportOps::Zendesk::Configuration.configure do |config|
256
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
257
+ # config.username = 'jason@example.com'
258
+ # config.token = 'abc123'
259
+ # end
260
+ #
261
+ # views = SupportOps::Zendesk::Views.list(active: true, group_id: 12510506606620, limit: 25)
262
+ # pp views.count
263
+ # # => 8
264
+ def self.list(**args)
265
+ args[:access] = nil unless args[:access]
266
+ args[:active] = nil unless args[:active]
267
+ args[:group_id] = nil unless args[:group_id]
268
+ args[:sort_by] = nil unless args[:sort_by]
269
+ args[:sort_order] = nil unless args[:sort_order]
270
+ args[:limit] = 0 unless args[:limit]
271
+ params = ''
272
+ params += "access=#{args[:access]}&" unless args[:access].nil?
273
+ params += "active=#{args[:active]}&" unless args[:active].nil?
274
+ params += "group_id=#{args[:group_id]}&" unless args[:group_id].nil?
275
+ params += "sort_by=#{args[:sort_by]}&" unless args[:sort_by].nil?
276
+ params += "sort_order=#{args[:sort_order]}&" unless args[:sort_order].nil?
277
+ views = []
278
+ opts = "#{params}page[size]=100"
279
+ loop do
280
+ response = client.connection.get("views?#{opts}")
281
+ body = Oj.load(response.body)
282
+ views += body['views'].map { |v| Views.new(v) }
283
+ break if args[:limit].to_i.positive? && views.count >= args[:limit].to_i
284
+ break unless body['meta']['has_more']
285
+
286
+ opts = body['links']['next'].split('?').last
287
+ end
288
+ return views if args[:limit].to_i.zero?
289
+
290
+ views.first(args[:limit].to_i)
291
+ end
292
+
293
+ ##
294
+ # Returns an approximate count of views in the account. If the count exceeds 100,000, it is updated every 24 hours.
295
+ #
296
+ # @author Jason Colyer
297
+ # @since 1.0.0
298
+ # @return [Hash]
299
+ # @see
300
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-views
301
+ # Zendesk API > Views > Count Views
302
+ # @see SupportOps::Zendesk::Configuration Setting up a client
303
+ # @example
304
+ # require 'support_ops_zendesk'
305
+ #
306
+ # SupportOps::Zendesk::Configuration.configure do |config|
307
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
308
+ # config.username = 'jason@example.com'
309
+ # config.token = 'abc123'
310
+ # end
311
+ #
312
+ # orgs = SupportOps::Zendesk::Views.count
313
+ # pp orgs['value']
314
+ # # => 102
315
+ def self.count
316
+ response = client.connection.get('views/count')
317
+ Oj.load(response.body)['count']
318
+ end
319
+
320
+ ##
321
+ # Lists active views in the Zendesk system
322
+ #
323
+ # @author Jason Colyer
324
+ # @since 1.0.0
325
+ # @overload list_active(key: value)
326
+ # @param access [String optional] Only views with given access. May be
327
+ # "personal", "shared", or "account"
328
+ # @param group_id [Integer optional] Only views belonging to given group
329
+ # @param sort_by [String optional] Possible values are "alphabetical",
330
+ # "created_at", or "updated_at". Defaults to "position"
331
+ # @param sort_order [String optional] One of "asc" or "desc". Defaults to "asc" for alphabetical and position
332
+ # sort, "desc" for all others
333
+ # @param limit [Integer optional] The limit to the number of webhooks
334
+ # @return [Array]
335
+ # @see
336
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-active-views
337
+ # Zendesk API > Views > List Active Views
338
+ # @see SupportOps::Zendesk::Configuration Setting up a client
339
+ # @example
340
+ # require 'support_ops_zendesk'
341
+ #
342
+ # SupportOps::Zendesk::Configuration.configure do |config|
343
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
344
+ # config.username = 'jason@example.com'
345
+ # config.token = 'abc123'
346
+ # end
347
+ #
348
+ # views = SupportOps::Zendesk::Views.list_active(group_id: 12510506606620, limit: 25)
349
+ # pp views.count
350
+ # # => 8
351
+ def self.list_active(**args)
352
+ args[:access] = nil unless args[:access]
353
+ args[:group_id] = nil unless args[:group_id]
354
+ args[:sort_by] = nil unless args[:sort_by]
355
+ args[:sort_order] = nil unless args[:sort_order]
356
+ args[:limit] = 0 unless args[:limit]
357
+ params = ''
358
+ params += "access=#{args[:access]}&" unless args[:access].nil?
359
+ params += "group_id=#{args[:group_id]}&" unless args[:group_id].nil?
360
+ params += "sort_by=#{args[:sort_by]}&" unless args[:sort_by].nil?
361
+ params += "sort_order=#{args[:sort_order]}&" unless args[:sort_order].nil?
362
+ page = 1
363
+ views = []
364
+ loop do
365
+ response = client.connection.get("views/active?#{params}page=#{page}")
366
+ body = Oj.load(response.body)
367
+ views += body['views'].map { |v| Views.new(v) }
368
+ break if args[:limit].to_i.positive? && views.count >= args[:limit].to_i
369
+ break if body['views'].count < 100
370
+
371
+ page += 1
372
+ end
373
+ return views if args[:limit].to_i.zero?
374
+
375
+ views.first(args[:limit].to_i)
376
+ end
377
+
378
+ ##
379
+ # Locates a specific view in the Zendesk system
380
+ #
381
+ # @author Jason Colyer
382
+ # @since 1.0.0
383
+ # @see
384
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#show-view
385
+ # Zendesk API > Views > Show View
386
+ # @see SupportOps::Zendesk::Configuration Setting up a client
387
+ # @example
388
+ # require 'support_ops_zendesk'
389
+ #
390
+ # SupportOps::Zendesk::Configuration.configure do |config|
391
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
392
+ # config.username = 'jason@example.com'
393
+ # config.token = 'abc123'
394
+ # end
395
+ #
396
+ # views = SupportOps::Zendesk::Views.get(25)
397
+ # pp view.title
398
+ # # => "I'm the 25th view"
399
+ def self.get(object)
400
+ if object.is_a? Views
401
+ Views.new(id: id).find
402
+ else
403
+ Views.new(id: object).find
404
+ end
405
+ end
406
+
407
+ ##
408
+ # Locates a specific view in the Zendesk system
409
+ #
410
+ # @author Jason Colyer
411
+ # @since 1.0.0
412
+ # @see
413
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#show-view
414
+ # Zendesk API > Views > Show View
415
+ # @see SupportOps::Zendesk::Configuration Setting up a client
416
+ # @example
417
+ # require 'support_ops_zendesk'
418
+ #
419
+ # SupportOps::Zendesk::Configuration.configure do |config|
420
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
421
+ # config.username = 'jason@example.com'
422
+ # config.token = 'abc123'
423
+ # end
424
+ #
425
+ # views = SupportOps::Zendesk::Views.get!(25)
426
+ # pp view.title
427
+ # # => "I'm the 25th view"
428
+ def self.get!(object)
429
+ if object.is_a? Views
430
+ Views.new(id: id).find!
431
+ else
432
+ Views.new(id: object).find!
433
+ end
434
+ end
435
+
436
+ ##
437
+ # Locates up to 100 views within Zendesk.
438
+ #
439
+ # @author Jason Colyer
440
+ # @since 1.0.0
441
+ # @param view_ids [Array] The view IDs to find
442
+ # @return [Array]
443
+ # @see
444
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views-by-id
445
+ # Zendesk API > Views > Show Views By ID
446
+ # @example
447
+ # require 'support_ops_zendesk'
448
+ #
449
+ # SupportOps::Zendesk::Configuration.configure do |config|
450
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
451
+ # config.username = 'jason@example.com'
452
+ # config.token = 'abc123'
453
+ # end
454
+ #
455
+ # views = SupportOps::Zendesk::Views.get_many([255, 256])
456
+ # pp views.map { |t| t.title }
457
+ # # => ["View 255", "256th View"]
458
+ def self.get_many(view_ids)
459
+ raise 'The parameter must be an Array' unless view_ids.is_a? Array
460
+ raise 'You can only get a maximum of 100 views at a time' if view_ids.count > 100
461
+
462
+ response = client.connection.get("views/show_many?ids=#{view_ids.join(',')}")
463
+ Oj.load(response.body)['views'].map { |v| Views.new(v) }
464
+ end
465
+
466
+ ##
467
+ # Returns a Hash used in creating/updating views, as the formatting does not match the Zendesk list functions
468
+ #
469
+ # @author Jason Colyer
470
+ # @since 1.0.0
471
+ # @param view [Object] An instance of {SupportOps::Zendesk::Views}
472
+ # @return [Hash]
473
+ # @example
474
+ # require 'support_ops_zendesk'
475
+ #
476
+ # SupportOps::Zendesk::Configuration.configure do |config|
477
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
478
+ # config.username = 'jason@example.com'
479
+ # config.token = 'abc123'
480
+ # end
481
+ #
482
+ # view = SupportOps::Zendesk::Views.get!(9873858)
483
+ # object = SupportOps::Zendesk::Views.create_or_update_object(view)
484
+ # pp object[:id]
485
+ # # => 9873858
486
+ def self.create_or_update_object(view)
487
+ {
488
+ id: view.id,
489
+ title: view.title,
490
+ description: view.description,
491
+ active: view.active,
492
+ position: view.position,
493
+ restriction: view.restriction,
494
+ all: view.conditions['all'],
495
+ any: view.conditions['any'],
496
+ output: {
497
+ columns: view.execution['columns'].map { |c| c['id'] },
498
+ group_by: view.execution['group_by'],
499
+ group_order: view.execution['group_order'],
500
+ sort_by: view.execution['sort_by'],
501
+ sort_order: view.execution['sort_order']
502
+ }
503
+ }.compact
504
+ end
505
+
506
+ ##
507
+ # Deletes multiple views via a batch job
508
+ #
509
+ # @author Jason Colyer
510
+ # @since 1.0.0
511
+ # @param view_ids [Array] An array of view IDs
512
+ # @return [object] A {SupportOps::Zendesk::JobStatuses} instance
513
+ # @see
514
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#bulk-delete-views
515
+ # Zendesk API > views > Bulk Delete Views
516
+ # @example
517
+ # require 'support_ops_zendesk'
518
+ #
519
+ # SupportOps::Zendesk::Configuration.configure do |config|
520
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
521
+ # config.username = 'jason@example.com'
522
+ # config.token = 'abc123'
523
+ # end
524
+ #
525
+ # delete = SupportOps::Zendesk::Views.delete_many!([123, 456])
526
+ # pp delete.id
527
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
528
+ def self.delete_many!(view_ids)
529
+ raise 'The parameter must be an Array' unless view_ids.is_a? Array
530
+ raise 'You can only delete a maximum of 100 views at a time' if view_ids.count > 100
531
+
532
+ response = client.connection.delete("views/destroy_many?ids=#{view_ids.join(',')}")
533
+ raise "Failed to delete views => #{body['details']}" if response.status != 200
534
+ JobStatuses.new(Oj.load(response.body)['job_status'])
535
+ end
536
+
537
+ ##
538
+ # Updates multiple views via a batch job
539
+ #
540
+ # @author Jason Colyer
541
+ # @since 1.0.0
542
+ # @param views [Array] An array of {SupportOps::Zendesk::Views} instances
543
+ # @return [object] A {SupportOps::Zendesk::JobStatuses} instance
544
+ # @see
545
+ # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#update-many-views
546
+ # Zendesk API > Views > Update Many Views
547
+ # @example
548
+ # require 'support_ops_zendesk'
549
+ #
550
+ # SupportOps::Zendesk::Configuration.configure do |config|
551
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
552
+ # config.username = 'jason@example.com'
553
+ # config.token = 'abc123'
554
+ # end
555
+ #
556
+ # view1 = SupportOps::Zendesk::Views.get!(123)
557
+ # view1.title = 'Org for Alice Company'
558
+ # view2 = SupportOps::Zendesk::Views.get!(456)
559
+ # view2.title = 'Org for Bob Company'
560
+ #
561
+ # updates = SupportOps::Zendesk::Views.update_many!([view1, view2])
562
+ # pp updates.id
563
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
564
+ def self.update_many!(views)
565
+ raise 'The parameter must be an Array' unless views.is_a? Array
566
+ raise 'You can only update a maximum of 100 views at a time' if views.count > 100
567
+ raise 'You can only use SupportOps::Zendesk::Views instances in the Array' unless views.reject { |o| o.is_a? SupportOps::Zendesk::Views }.count.zero?
568
+
569
+ data = { views: views.map { |v| Views.create_or_update_object(v) } }.to_json
570
+ response = client.connection.put('views/update_many', data)
571
+ raise "Failed to update views => #{body['details']}" if response.status != 200
572
+ JobStatuses.new(Oj.load(response.body)['job_status'])
573
+ end
574
+
575
+ private
576
+
577
+ ##
578
+ # @private
579
+ def get_record
580
+ response = self.client.connection.get("views/#{self.id}")
581
+ return nil if response.status != 200
582
+
583
+ Oj.load(response.body)['view']
584
+ end
585
+
586
+ ##
587
+ # @private
588
+ def create_record
589
+ response = self.client.connection.post("views", { view: Views.create_or_update_object(self) }.to_json)
590
+ body = Oj.load(response.body)
591
+ raise "Failed to create view => #{body['details']}" if response.status != 201
592
+ body['view']
593
+ end
594
+
595
+ ##
596
+ # @private
597
+ def update_record
598
+ raise "Failed to update view => You didn't change anything in the object" if attributes_for_save.keys == [:id]
599
+ response = self.client.connection.put("views/#{self.id}", { view: Views.create_or_update_object(self) }.to_json)
600
+ body = Oj.load(response.body)
601
+ raise "Failed to update view #{self.id} => #{body['details']}" if response.status != 200
602
+ body['view']
603
+ end
604
+
605
+ ##
606
+ # @private
607
+ def delete_record
608
+ response = self.client.connection.delete("views/#{self.id}")
609
+ raise "Failed to delete view => #{body['details']}" if response.status != 204
610
+ true
611
+ end
612
+
613
+ ##
614
+ # @private
615
+ def tickets_record
616
+ response = self.client.connection.get("views/#{self.id}/tickets")
617
+ Oj.load(response.body)['tickets'].map { |t| Tickets.new(t) }
618
+ end
619
+
620
+ ##
621
+ # @private
622
+ def preview_record
623
+ converted = Views.create_or_update_object(self)
624
+ data = {
625
+ all: converted[:all],
626
+ any: converted[:any],
627
+ output: converted[:output]
628
+ }.compact
629
+ response = self.client.connection.post('views/preview', { view: data }.to_json)
630
+ body = Oj.load(response.body)
631
+ raise "Unable to generate a preview => #{body}" if response.status != 200
632
+ body
633
+ end
634
+ end
635
+ end
636
+ end