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,385 @@
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 Groups within the module {SupportOps::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ # @attr [String] created_at The time the group was created
13
+ # @attr [Boolean] default If the group is the default one for the account
14
+ # @attr [Boolean] deleted Deleted groups get marked as such
15
+ # @attr [String] description The description of the group
16
+ # @attr [Integer] id Automatically assigned when creating groups
17
+ # @attr [Boolean] is_public If true, the group is public. If false, the group is private. You can't change a private group to a public group
18
+ # @attr [String] name The name of the group
19
+ # @attr [String] updated_at The time of the last update of the group
20
+ class Groups < SupportOps::Zendesk::Base
21
+ # @!parse
22
+ # # Creates/updates a group
23
+ # #
24
+ # # @author Jason Colyer
25
+ # # @since 1.0.0
26
+ # # @return [Object] Instance of {SupportOps::Zendesk::Groups}
27
+ # # @note This is inherited from {SupportOps::Zendesk::Base#save!}
28
+ # # @see
29
+ # # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#create-group
30
+ # # Zendesk API > Groups > Create Group
31
+ # # @see
32
+ # # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#update-group
33
+ # # Zendesk API > Groups > Update Group
34
+ # # @example
35
+ # # require 'support_ops_zendesk'
36
+ # #
37
+ # # SupportOps::Zendesk::Configuration.configure do |config|
38
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
39
+ # # config.username = 'jason@example.com'
40
+ # # config.token = 'abc123'
41
+ # # end
42
+ # #
43
+ # # new_group = SupportOps::Zendesk::Groups.new
44
+ # # new_group.name = 'My Group'
45
+ # #
46
+ # # new_group.save!
47
+ # #
48
+ # # pp new_group.id
49
+ # # # => 122
50
+ # # @example
51
+ # # require 'support_ops_zendesk'
52
+ # #
53
+ # # SupportOps::Zendesk::Configuration.configure do |config|
54
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
55
+ # # config.username = 'jason@example.com'
56
+ # # config.token = 'abc123'
57
+ # # end
58
+ # #
59
+ # # existing_group = SupportOps::Zendesk::Groups.get!(122)
60
+ # # existing_group.name = 'My Group 2'
61
+ # #
62
+ # # existing_group.save!
63
+ # #
64
+ # # pp new_group.name
65
+ # # # => "My Group 2"
66
+ # def save!; end
67
+ # @!parse
68
+ # # Deletes a group
69
+ # #
70
+ # # @author Jason Colyer
71
+ # # @since 1.0.0
72
+ # # @return [Boolean]
73
+ # # @note This is inherited from {SupportOps::Zendesk::Base#delete!}
74
+ # # @see
75
+ # # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#delete-group
76
+ # # Zendesk API > Groups > Delete Group
77
+ # # @example
78
+ # # require 'support_ops_zendesk'
79
+ # #
80
+ # # SupportOps::Zendesk::Configuration.configure do |config|
81
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
82
+ # # config.username = 'jason@example.com'
83
+ # # config.token = 'abc123'
84
+ # # end
85
+ # #
86
+ # # existing_group = SupportOps::Zendesk::Groups.get!(122)
87
+ # # existing_group.delete!
88
+ # def delete!; end
89
+ # @!parse
90
+ # # Lists group memberships
91
+ # #
92
+ # # @author Jason Colyer
93
+ # # @since 1.0.0
94
+ # # @return [Object]
95
+ # # @note This is inherited from {SupportOps::Zendesk::Base#memberships}
96
+ # # @see
97
+ # # https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships
98
+ # # Zendesk API > Group Memberships > List Memberships
99
+ # # @example
100
+ # # require 'support_ops_zendesk'
101
+ # #
102
+ # # SupportOps::Zendesk::Configuration.configure do |config|
103
+ # # config.url = 'https://gitlab.zendesk.com/api/v2'
104
+ # # config.username = 'jason@example.com'
105
+ # # config.token = 'abc123'
106
+ # # end
107
+ # #
108
+ # # existing_group = SupportOps::Zendesk::Groups.get!(122)
109
+ # # memberships = existing_group.memberships
110
+ # #
111
+ # # pp memberships.count
112
+ # # # => 38
113
+ # def memberships; end
114
+ # @!parse
115
+ # # Lists group users
116
+ # #
117
+ # # @author Jason Colyer
118
+ # # @since 1.0.0
119
+ # # @return [Object]
120
+ # # @note This is inherited from {SupportOps::Zendesk::Base#users}
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_group = SupportOps::Zendesk::Groups.get!(122)
131
+ # # users = existing_group.users
132
+ # #
133
+ # # pp users.count
134
+ # # # => 38
135
+ # def users; end
136
+ define_attributes :created_at, :default, :deleted, :description, :id,
137
+ :is_public, :name, :updated_at
138
+ readonly_attributes :created_at, :id, :updated_at
139
+
140
+ ##
141
+ # Lists all groups in the Zendesk system
142
+ #
143
+ # @author Jason Colyer
144
+ # @since 1.0.0
145
+ # @return [Array]
146
+ # @see
147
+ # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#list-groups
148
+ # Zendesk API > Groups > List Groups
149
+ # @see SupportOps::Zendesk::Configuration Setting up a client
150
+ # @example
151
+ # require 'support_ops_zendesk'
152
+ #
153
+ # SupportOps::Zendesk::Configuration.configure do |config|
154
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
155
+ # config.username = 'jason@example.com'
156
+ # config.token = 'abc123'
157
+ # end
158
+ #
159
+ # groups = SupportOps::Zendesk::Groups.list
160
+ # pp groups.count
161
+ # # => 25
162
+ # pp groups.last.name
163
+ # # => "I'm the 25th group"
164
+ def self.list
165
+ response = client.connection.get('groups?page[size]=100')
166
+ Oj.load(response.body)['groups'].map { |g| Groups.new(g) }
167
+ end
168
+
169
+ ##
170
+ # Lists all assignable groups in the Zendesk system
171
+ #
172
+ # @author Jason Colyer
173
+ # @since 1.0.0
174
+ # @return [Array]
175
+ # @see
176
+ # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#list-assignable-groups
177
+ # Zendesk API > Assignable Groups > List Groups
178
+ # @see SupportOps::Zendesk::Configuration Setting up a client
179
+ # @example
180
+ # require 'support_ops_zendesk'
181
+ #
182
+ # SupportOps::Zendesk::Configuration.configure do |config|
183
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
184
+ # config.username = 'jason@example.com'
185
+ # config.token = 'abc123'
186
+ # end
187
+ #
188
+ # groups = SupportOps::Zendesk::Groups.list_assignable
189
+ # pp groups.count
190
+ # # => 20
191
+ # pp groups.last.name
192
+ # # => "I'm the 20th group and I'm not deleted"
193
+ def self.list_assignable
194
+ response = client.connection.get('groups/assignable?page[size]=100')
195
+ Oj.load(response.body)['groups'].map { |g| Groups.new(g) }
196
+ end
197
+
198
+ ##
199
+ # Locates a group within Zendesk by name. Can utilize a cache for quicker results
200
+ #
201
+ # @author Jason Colyer
202
+ # @since 1.0.0
203
+ # @overload find_by_name(key: value)
204
+ # @param name [String required] The name to search for
205
+ # @param cache [Array] An Array of SupportOps::Zendesk::Groups to use as a cache
206
+ # @return [Object] An instance of {SupportOps::Zendesk::Groups}
207
+ # @example
208
+ # require 'support_ops_zendesk'
209
+ #
210
+ # SupportOps::Zendesk::Configuration.configure do |config|
211
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
212
+ # config.username = 'jason@example.com'
213
+ # config.token = 'abc123'
214
+ # end
215
+ #
216
+ # groups = SupportOps::Zendesk::Groups.list
217
+ # group = SupportOps::Zendesk::Groups.find_by_name(name: 'Test Group', cache: groups)
218
+ # pp group.name
219
+ # # => "Test Group"
220
+ # pp group.id
221
+ # # => 123456
222
+ def self.find_by_name(**args)
223
+ raise 'You have to provide a name' unless args[:name]
224
+ if args[:cache]
225
+ raise 'Provided cache is not an Array' unless args[:cache].is_a? Array
226
+ groups = args[:cache]
227
+ else
228
+ groups = list
229
+ end
230
+ groups.detect { |c| c.name.downcase == args[:name].to_s.downcase }
231
+ end
232
+
233
+ ##
234
+ # Returns an approximate count of groups in the account. If the count exceeds 100,000, it is updated every 24 hours.
235
+ #
236
+ # @author Jason Colyer
237
+ # @since 1.0.0
238
+ # @return [Hash]
239
+ # @see
240
+ # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#count-groups
241
+ # Zendesk API > Groups > Count Groups
242
+ # @see SupportOps::Zendesk::Configuration Setting up a client
243
+ # @example
244
+ # require 'support_ops_zendesk'
245
+ #
246
+ # SupportOps::Zendesk::Configuration.configure do |config|
247
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
248
+ # config.username = 'jason@example.com'
249
+ # config.token = 'abc123'
250
+ # end
251
+ #
252
+ # orgs = SupportOps::Zendesk::Groups.count
253
+ # pp orgs['value']
254
+ # # => 25
255
+ def self.count
256
+ response = client.connection.get('groups/count')
257
+ Oj.load(response.body)['count']
258
+ end
259
+
260
+ ##
261
+ # Locates a specific group in the Zendesk system
262
+ #
263
+ # @author Jason Colyer
264
+ # @since 1.0.0
265
+ # @see
266
+ # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#show-group
267
+ # Zendesk API > Groups > Show Group
268
+ # @see SupportOps::Zendesk::Configuration Setting up a client
269
+ # @example
270
+ # require 'support_ops_zendesk'
271
+ #
272
+ # SupportOps::Zendesk::Configuration.configure do |config|
273
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
274
+ # config.username = 'jason@example.com'
275
+ # config.token = 'abc123'
276
+ # end
277
+ #
278
+ # groups = SupportOps::Zendesk::Groups.get(123456)
279
+ # pp groups.name
280
+ # # => "Test Group"
281
+ def self.get(object)
282
+ if object.is_a? Groups
283
+ Groups.new(id: id).find
284
+ else
285
+ Groups.new(id: object).find
286
+ end
287
+ end
288
+
289
+ ##
290
+ # Locates a specific group in the Zendesk system
291
+ #
292
+ # @author Jason Colyer
293
+ # @since 1.0.0
294
+ # @see
295
+ # https://developer.zendesk.com/api-reference/ticketing/groups/groups/#show-group
296
+ # Zendesk API > Groups > Show Group
297
+ # @see SupportOps::Zendesk::Configuration Setting up a client
298
+ # @example
299
+ # require 'support_ops_zendesk'
300
+ #
301
+ # SupportOps::Zendesk::Configuration.configure do |config|
302
+ # config.url = 'https://gitlab.zendesk.com/api/v2'
303
+ # config.username = 'jason@example.com'
304
+ # config.token = 'abc123'
305
+ # end
306
+ #
307
+ # groups = SupportOps::Zendesk::Groups.get!(123456)
308
+ # pp groups.name
309
+ # # => "Test Group"
310
+ def self.get!(object)
311
+ if object.is_a? Groups
312
+ Groups.new(id: id).find!
313
+ else
314
+ Groups.new(id: object).find!
315
+ end
316
+ end
317
+
318
+ private
319
+
320
+ ##
321
+ # @private
322
+ def get_record
323
+ response = self.client.connection.get("groups/#{self.id}")
324
+ return nil if response.status != 200
325
+
326
+ Oj.load(response.body)['group']
327
+ end
328
+
329
+ ##
330
+ # @private
331
+ def create_record
332
+ response = self.client.connection.post("groups", { group: attributes_for_save }.to_json)
333
+ body = Oj.load(response.body)
334
+ raise "Failed to create group => #{body['details']}" if response.status != 201
335
+ body['group']
336
+ end
337
+
338
+ ##
339
+ # @private
340
+ def update_record
341
+ raise "Failed to update group => You didn't change anything in the object" if attributes_for_save.keys == [:id]
342
+ response = self.client.connection.put("groups/#{self.id}", { group: attributes_for_save }.to_json)
343
+ body = Oj.load(response.body)
344
+ raise "Failed to update group #{self.id} => #{body['details']}" if response.status != 200
345
+ body['group']
346
+ end
347
+
348
+ ##
349
+ # @private
350
+ def delete_record
351
+ response = self.client.connection.delete("groups/#{self.id}")
352
+ raise "Failed to delete group => #{body['details']}" if response.status != 204
353
+ true
354
+ end
355
+
356
+ ##
357
+ # @private
358
+ def memberships_record
359
+ memberships_list = []
360
+ opts = 'page[size]=100'
361
+ loop do
362
+ response = client.connection.get("groups/#{self.id}/memberships?#{opts}")
363
+ body = Oj.load(response.body)
364
+ memberships_list += body['group_memberships'].map { |o| GroupMemberships.new(o) }
365
+ break unless body['meta']['has_more']
366
+
367
+ opts = body['links']['next'].split('?').last
368
+ end
369
+ memberships_list
370
+ end
371
+
372
+ ##
373
+ # @private
374
+ def users_record
375
+ user_list = []
376
+ group_memberships = self.memberships
377
+ user_list
378
+ memberships.each do |m|
379
+ user_list.push(Users.get!(m.user_id))
380
+ end
381
+ user_list
382
+ end
383
+ end
384
+ end
385
+ end