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.
- checksums.yaml +7 -0
- data/lib/support_ops_zendesk/packages.rb +89 -0
- data/lib/support_ops_zendesk/zendesk/app_installations.rb +62 -0
- data/lib/support_ops_zendesk/zendesk/app_job_statuses.rb +157 -0
- data/lib/support_ops_zendesk/zendesk/apps.rb +476 -0
- data/lib/support_ops_zendesk/zendesk/articles.rb +362 -0
- data/lib/support_ops_zendesk/zendesk/audit_logs.rb +166 -0
- data/lib/support_ops_zendesk/zendesk/automations.rb +390 -0
- data/lib/support_ops_zendesk/zendesk/base.rb +472 -0
- data/lib/support_ops_zendesk/zendesk/brands.rb +172 -0
- data/lib/support_ops_zendesk/zendesk/client.rb +91 -0
- data/lib/support_ops_zendesk/zendesk/comments.rb +37 -0
- data/lib/support_ops_zendesk/zendesk/configuration.rb +138 -0
- data/lib/support_ops_zendesk/zendesk/custom_roles.rb +224 -0
- data/lib/support_ops_zendesk/zendesk/dynamic_content.rb +297 -0
- data/lib/support_ops_zendesk/zendesk/dynamic_content_variants.rb +309 -0
- data/lib/support_ops_zendesk/zendesk/group_memberships.rb +337 -0
- data/lib/support_ops_zendesk/zendesk/groups.rb +385 -0
- data/lib/support_ops_zendesk/zendesk/help_center_categories.rb +332 -0
- data/lib/support_ops_zendesk/zendesk/help_center_content_tags.rb +237 -0
- data/lib/support_ops_zendesk/zendesk/help_center_management_permission_groups.rb +271 -0
- data/lib/support_ops_zendesk/zendesk/help_center_sections.rb +378 -0
- data/lib/support_ops_zendesk/zendesk/help_center_topics.rb +274 -0
- data/lib/support_ops_zendesk/zendesk/help_center_user_segments.rb +279 -0
- data/lib/support_ops_zendesk/zendesk/job_statuses.rb +231 -0
- data/lib/support_ops_zendesk/zendesk/locales.rb +326 -0
- data/lib/support_ops_zendesk/zendesk/macros.rb +407 -0
- data/lib/support_ops_zendesk/zendesk/oauth_clients.rb +186 -0
- data/lib/support_ops_zendesk/zendesk/oauth_tokens.rb +114 -0
- data/lib/support_ops_zendesk/zendesk/organization_fields.rb +282 -0
- data/lib/support_ops_zendesk/zendesk/organization_memberships.rb +336 -0
- data/lib/support_ops_zendesk/zendesk/organizations.rb +568 -0
- data/lib/support_ops_zendesk/zendesk/requester_roles.rb +58 -0
- data/lib/support_ops_zendesk/zendesk/satisfaction_reasons.rb +161 -0
- data/lib/support_ops_zendesk/zendesk/schedule_holidays.rb +27 -0
- data/lib/support_ops_zendesk/zendesk/schedules.rb +192 -0
- data/lib/support_ops_zendesk/zendesk/search.rb +185 -0
- data/lib/support_ops_zendesk/zendesk/sla_policies.rb +302 -0
- data/lib/support_ops_zendesk/zendesk/targets.rb +96 -0
- data/lib/support_ops_zendesk/zendesk/theme_job_statuses.rb +154 -0
- data/lib/support_ops_zendesk/zendesk/themes.rb +328 -0
- data/lib/support_ops_zendesk/zendesk/ticket_field_options.rb +154 -0
- data/lib/support_ops_zendesk/zendesk/ticket_fields.rb +357 -0
- data/lib/support_ops_zendesk/zendesk/ticket_forms.rb +370 -0
- data/lib/support_ops_zendesk/zendesk/ticket_user_types.rb +67 -0
- data/lib/support_ops_zendesk/zendesk/tickets.rb +837 -0
- data/lib/support_ops_zendesk/zendesk/translations.rb +310 -0
- data/lib/support_ops_zendesk/zendesk/trigger_categories.rb +275 -0
- data/lib/support_ops_zendesk/zendesk/triggers.rb +427 -0
- data/lib/support_ops_zendesk/zendesk/user_field_options.rb +153 -0
- data/lib/support_ops_zendesk/zendesk/user_fields.rb +312 -0
- data/lib/support_ops_zendesk/zendesk/users.rb +889 -0
- data/lib/support_ops_zendesk/zendesk/via_types.rb +137 -0
- data/lib/support_ops_zendesk/zendesk/views.rb +636 -0
- data/lib/support_ops_zendesk/zendesk/webhooks.rb +206 -0
- data/lib/support_ops_zendesk/zendesk.rb +66 -0
- data/lib/support_ops_zendesk.rb +29 -0
- metadata +274 -0
@@ -0,0 +1,427 @@
|
|
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 Triggers within the module {SupportOps::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
# @attr [Array] actions An array of actions describing what the ticket trigger will do
|
13
|
+
# @attr [Boolean] active Whether the ticket trigger is active
|
14
|
+
# @attr [String] category_id The ID of the category the ticket trigger belongs to
|
15
|
+
# @attr [Hash] conditions An object that describes the circumstances under which the trigger performs its actions
|
16
|
+
# @attr [String] created_at The time the ticket trigger was created
|
17
|
+
# @attr [Boolean] default If true, the ticket trigger is a standard trigger
|
18
|
+
# @attr [String] description The description of the ticket trigger
|
19
|
+
# @attr [Integer] id Automatically assigned when created
|
20
|
+
# @attr [Integer] position Position of the ticket trigger, determines the order they will execute in
|
21
|
+
# @attr [String] raw_title The raw format of the title of the ticket trigger
|
22
|
+
# @attr [String] title The title of the ticket trigger
|
23
|
+
# @attr [String] updated_at The time of the last update of the ticket trigger
|
24
|
+
# @todo Search Ticket Triggers => https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#search-ticket-triggers
|
25
|
+
# @todo List Ticket Trigger Action and Condition Definitions => https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#list-ticket-trigger-action-and-condition-definitions
|
26
|
+
# @todo List Ticket Trigger Revisions => https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#list-ticket-trigger-revisions
|
27
|
+
# @todo Show Ticket Trigger Revision => https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#show-ticket-trigger-revision
|
28
|
+
# @todo Reorder Ticket Triggers => https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#reorder-ticket-triggers
|
29
|
+
class Triggers < SupportOps::Zendesk::Base
|
30
|
+
# @!parse
|
31
|
+
# # Creates/updates a trigger
|
32
|
+
# #
|
33
|
+
# # @author Jason Colyer
|
34
|
+
# # @since 1.0.0
|
35
|
+
# # @return [Object] Instance of {SupportOps::Zendesk::Triggers}
|
36
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#save!}
|
37
|
+
# # @see
|
38
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#create-trigger
|
39
|
+
# # Zendesk API > Triggers > Create Ticket Trigger
|
40
|
+
# # @see
|
41
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#update-ticket-trigger
|
42
|
+
# # Zendesk API > Triggers > Update Ticket Trigger
|
43
|
+
# # @example
|
44
|
+
# # require 'support_ops_zendesk'
|
45
|
+
# #
|
46
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
47
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
48
|
+
# # config.username = 'jason@example.com'
|
49
|
+
# # config.token = 'abc123'
|
50
|
+
# # end
|
51
|
+
# #
|
52
|
+
# # new_trigger = SupportOps::Zendesk::Triggers.new
|
53
|
+
# # new_trigger.title = 'Change priority to low for solved tickets'
|
54
|
+
# # new_trigger.conditions = {
|
55
|
+
# # all: [
|
56
|
+
# # {
|
57
|
+
# # field: 'status',
|
58
|
+
# # operator: 'is',
|
59
|
+
# # value: 'solved'
|
60
|
+
# # },
|
61
|
+
# # {
|
62
|
+
# # field: 'priority',
|
63
|
+
# # operator: 'is_not',
|
64
|
+
# # value: 'low'
|
65
|
+
# # }
|
66
|
+
# # ],
|
67
|
+
# # any: []
|
68
|
+
# # }
|
69
|
+
# # new_trigger.actions = [
|
70
|
+
# # {
|
71
|
+
# # field: 'priority',
|
72
|
+
# # value: 'low'
|
73
|
+
# # }
|
74
|
+
# # ]
|
75
|
+
# # new_trigger.catergory_id = '1234'
|
76
|
+
# #
|
77
|
+
# # new_trigger.save!
|
78
|
+
# #
|
79
|
+
# # pp new_trigger.id
|
80
|
+
# # # => 23409462
|
81
|
+
# # @example
|
82
|
+
# # require 'support_ops_zendesk'
|
83
|
+
# #
|
84
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
85
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
86
|
+
# # config.username = 'jason@example.com'
|
87
|
+
# # config.token = 'abc123'
|
88
|
+
# # end
|
89
|
+
# #
|
90
|
+
# # existing_trigger = SupportOps::Zendesk::Triggers.get!(23409462)
|
91
|
+
# # existing_trigger.title = 'Change ticket priority to low for solved tickets'
|
92
|
+
# #
|
93
|
+
# # existing_trigger.save!
|
94
|
+
# #
|
95
|
+
# # pp existing_trigger.title
|
96
|
+
# # # => "Change ticket priority to low for solved tickets"
|
97
|
+
# def save!; end
|
98
|
+
# @!parse
|
99
|
+
# # Deletes a trigger
|
100
|
+
# #
|
101
|
+
# # @author Jason Colyer
|
102
|
+
# # @since 1.0.0
|
103
|
+
# # @return [Boolean]
|
104
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#delete!}
|
105
|
+
# # @see
|
106
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#delete-ticket-trigger
|
107
|
+
# # Zendesk API > Triggers > Delete Ticket Trigger
|
108
|
+
# # @example
|
109
|
+
# # require 'support_ops_zendesk'
|
110
|
+
# #
|
111
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
112
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
113
|
+
# # config.username = 'jason@example.com'
|
114
|
+
# # config.token = 'abc123'
|
115
|
+
# # end
|
116
|
+
# #
|
117
|
+
# # existing_trigger = SupportOps::Zendesk::Triggers.get!(23409462)
|
118
|
+
# # existing_trigger.delete!
|
119
|
+
# def delete!; end
|
120
|
+
# @!parse
|
121
|
+
# # Gets a trigger's category
|
122
|
+
# #
|
123
|
+
# # @author Jason Colyer
|
124
|
+
# # @since 1.0.0
|
125
|
+
# # @return [Boolean]
|
126
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#category}
|
127
|
+
# # @example
|
128
|
+
# # require 'support_ops_zendesk'
|
129
|
+
# #
|
130
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
131
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
132
|
+
# # config.username = 'jason@example.com'
|
133
|
+
# # config.token = 'abc123'
|
134
|
+
# # end
|
135
|
+
# #
|
136
|
+
# # existing_trigger = SupportOps::Zendesk::Triggers.get!(23409462)
|
137
|
+
# # category = existing_trigger.category
|
138
|
+
# # pp category.name
|
139
|
+
# # # => "Ticket creation Stage"
|
140
|
+
# def delete!; end
|
141
|
+
define_attributes :actions, :active, :category_id, :conditions,
|
142
|
+
:created_at, :default, :description, :id, :position,
|
143
|
+
:raw_title, :title, :updated_at
|
144
|
+
readonly_attributes :created_at, :default, :id, :updated_at
|
145
|
+
|
146
|
+
##
|
147
|
+
# Lists triggers in the Zendesk system
|
148
|
+
#
|
149
|
+
# @author Jason Colyer
|
150
|
+
# @since 1.0.0
|
151
|
+
# @overload list(key: value)
|
152
|
+
# @param active [Boolean optional] Only active triggers if true,
|
153
|
+
# inactive triggers if false, or all if not provided
|
154
|
+
# @param category_id [Integer optional] Filter triggers by category ID
|
155
|
+
# @param sort [String optional] Possible values are "alphabetical",
|
156
|
+
# "created_at", "updated_at", or "position".
|
157
|
+
# @param sort_order [String optiona] One of "asc" or "desc"; defaults to
|
158
|
+
# "asc" for alphabetical and position sort, "desc" for all others
|
159
|
+
# @param limit [Integer optional] The limit to the number of triggers
|
160
|
+
# returned. Default to 0 (i.e. no limit)
|
161
|
+
# @return [Array]
|
162
|
+
# @see
|
163
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#list-ticket-triggers
|
164
|
+
# Zendesk API > Triggers > List Ticket Triggers
|
165
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
166
|
+
# @example
|
167
|
+
# require 'support_ops_zendesk'
|
168
|
+
#
|
169
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
170
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
171
|
+
# config.username = 'jason@example.com'
|
172
|
+
# config.token = 'abc123'
|
173
|
+
# end
|
174
|
+
#
|
175
|
+
# triggers = SupportOps::Zendesk::Triggers.list(limit: 10)
|
176
|
+
# pp triggers.count
|
177
|
+
# # => 10
|
178
|
+
# pp triggers.last.title
|
179
|
+
# # => "I'm the 10th trigger"
|
180
|
+
def self.list(**args)
|
181
|
+
args[:limit] = 0 unless args[:limit]
|
182
|
+
sort_order = (args[:sort_order] == 'desc' ? '-' : '')
|
183
|
+
array = []
|
184
|
+
opts = 'page[size]=100'
|
185
|
+
opts += "&sort=#{sort_order}#{args[:sort]}" if args[:sort]
|
186
|
+
opts += "&active=#{args[:active]}" if args[:active]
|
187
|
+
opts += "&category_id=#{args[:category_id]}" if args[:category_id]
|
188
|
+
loop do
|
189
|
+
response = client.connection.get("triggers?#{opts}")
|
190
|
+
body = Oj.load(response.body)
|
191
|
+
array += body['triggers'].map { |a| Triggers.new(a) }
|
192
|
+
break if args[:limit].to_i.positive? && array.count >= args[:limit].to_i
|
193
|
+
break unless body['meta']['has_more']
|
194
|
+
|
195
|
+
opts = body['links']['next'].split('?').last
|
196
|
+
end
|
197
|
+
return array if args[:limit].to_i.zero?
|
198
|
+
|
199
|
+
array.first(args[:limit].to_i)
|
200
|
+
end
|
201
|
+
|
202
|
+
##
|
203
|
+
# Lists active triggers in the Zendesk system
|
204
|
+
#
|
205
|
+
# @author Jason Colyer
|
206
|
+
# @since 1.0.0
|
207
|
+
# @overload list_active(key: value)
|
208
|
+
# @param category_id [Integer optional] Filter triggers by category ID
|
209
|
+
# @param sort [String optional] Possible values are "alphabetical",
|
210
|
+
# "created_at", "updated_at", or "position".
|
211
|
+
# @param sort_order [String optiona] One of "asc" or "desc"; defaults to
|
212
|
+
# "asc" for alphabetical and position sort, "desc" for all others
|
213
|
+
# @param limit [Integer optional] The limit to the number of triggers
|
214
|
+
# returned. Default to 0 (i.e. no limit)
|
215
|
+
# @return [Array]
|
216
|
+
# @see
|
217
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#list-active-ticket-triggers
|
218
|
+
# Zendesk API > Triggers > List Active Ticket Triggers
|
219
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
220
|
+
# @example
|
221
|
+
# require 'support_ops_zendesk'
|
222
|
+
#
|
223
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
224
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
225
|
+
# config.username = 'jason@example.com'
|
226
|
+
# config.token = 'abc123'
|
227
|
+
# end
|
228
|
+
#
|
229
|
+
# triggers = SupportOps::Zendesk::Triggers.list_active(limit: 10)
|
230
|
+
# pp triggers.count
|
231
|
+
# # => 10
|
232
|
+
# pp triggers.last.title
|
233
|
+
# # => "I'm the 10th trigger"
|
234
|
+
def self.list_active(**args)
|
235
|
+
args[:limit] = 0 unless args[:limit]
|
236
|
+
sort_order = (args[:sort_order] == 'desc' ? '-' : '')
|
237
|
+
array = []
|
238
|
+
opts = 'page[size]=100'
|
239
|
+
opts += "&sort=#{sort_order}#{args[:sort]}" if args[:sort]
|
240
|
+
opts += "&category_id=#{args[:category_id]}" if args[:category_id]
|
241
|
+
loop do
|
242
|
+
response = client.connection.get("triggers?#{opts}")
|
243
|
+
body = Oj.load(response.body)
|
244
|
+
array += body['triggers'].map { |a| Triggers.new(a) }
|
245
|
+
break if args[:limit].to_i.positive? && array.count >= args[:limit].to_i
|
246
|
+
break unless body['meta']['has_more']
|
247
|
+
|
248
|
+
opts = body['links']['next'].split('?').last
|
249
|
+
end
|
250
|
+
return array if args[:limit].to_i.zero?
|
251
|
+
|
252
|
+
array.first(args[:limit].to_i)
|
253
|
+
end
|
254
|
+
|
255
|
+
##
|
256
|
+
# Locates a specific trigger in the Zendesk system
|
257
|
+
#
|
258
|
+
# @author Jason Colyer
|
259
|
+
# @since 1.0.0
|
260
|
+
# @see
|
261
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#show-ticket-trigger
|
262
|
+
# Zendesk API > Triggers > Show Ticket Trigger
|
263
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
264
|
+
# @example
|
265
|
+
# require 'support_ops_zendesk'
|
266
|
+
#
|
267
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
268
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
269
|
+
# config.username = 'jason@example.com'
|
270
|
+
# config.token = 'abc123'
|
271
|
+
# end
|
272
|
+
#
|
273
|
+
# trigger = SupportOps::Zendesk::Triggers.get(25)
|
274
|
+
# pp trigger.title
|
275
|
+
# # => "I'm the 25th trigger"
|
276
|
+
def self.get(object)
|
277
|
+
if object.is_a? Triggers
|
278
|
+
Triggers.new(id: id).find
|
279
|
+
else
|
280
|
+
Triggers.new(id: object).find
|
281
|
+
end
|
282
|
+
end
|
283
|
+
|
284
|
+
##
|
285
|
+
# Locates a specific trigger in the Zendesk system
|
286
|
+
#
|
287
|
+
# @author Jason Colyer
|
288
|
+
# @since 1.0.0
|
289
|
+
# @see
|
290
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#show-ticket-trigger
|
291
|
+
# Zendesk API > Triggers > Show Ticket Trigger
|
292
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
293
|
+
# @example
|
294
|
+
# require 'support_ops_zendesk'
|
295
|
+
#
|
296
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
297
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
298
|
+
# config.username = 'jason@example.com'
|
299
|
+
# config.token = 'abc123'
|
300
|
+
# end
|
301
|
+
#
|
302
|
+
# trigger = SupportOps::Zendesk::Triggers.get!(25)
|
303
|
+
# pp trigger.title
|
304
|
+
# # => "I'm the 25th trigger"
|
305
|
+
def self.get!(object)
|
306
|
+
if object.is_a? Triggers
|
307
|
+
Triggers.new(id: id).find!
|
308
|
+
else
|
309
|
+
Triggers.new(id: object).find!
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
##
|
314
|
+
# Updates multiple triggers via a batch job
|
315
|
+
#
|
316
|
+
# @author Jason Colyer
|
317
|
+
# @since 1.0.0
|
318
|
+
# @param triggers [Array] An array of {SupportOps::Zendesk::Triggers} instances
|
319
|
+
# @return [object] A {SupportOps::Zendesk::JobStatuses} instance
|
320
|
+
# @see
|
321
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#update-many-ticket-triggers
|
322
|
+
# Zendesk API > Triggers > Update Many Ticket Triggers
|
323
|
+
# @example
|
324
|
+
# require 'support_ops_zendesk'
|
325
|
+
#
|
326
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
327
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
328
|
+
# config.username = 'jason@example.com'
|
329
|
+
# config.token = 'abc123'
|
330
|
+
# end
|
331
|
+
#
|
332
|
+
# trigger1 = SupportOps::Zendesk::Triggers.get!(123)
|
333
|
+
# trigger1.title = 'Set severity for low priority tickets non-solved tickets'
|
334
|
+
# trigger2 = SupportOps::Zendesk::Triggers.get!(456)
|
335
|
+
# trigger2.title = 'Set severity for medium priority tickets non-solved tickets'
|
336
|
+
#
|
337
|
+
# updates = SupportOps::Zendesk::Triggers.update_many!([trigger1, trigger2])
|
338
|
+
# pp updates.id
|
339
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
340
|
+
def self.update_many!(triggers)
|
341
|
+
raise 'The parameter must be an Array' unless triggers.is_a? Array
|
342
|
+
raise 'You can only update a maximum of 100 triggers at a time' if triggers.count > 100
|
343
|
+
raise 'You can only use SupportOps::Zendesk::Triggers instances in the Array' unless triggers.reject { |o| o.is_a? SupportOps::Zendesk::Triggers }.count.zero?
|
344
|
+
|
345
|
+
data = { triggers: triggers.map { |a| to_hash(a).compact } }.to_json
|
346
|
+
response = client.connection.put('triggers/update_many', data)
|
347
|
+
raise "Failed to update triggers => #{body['details']}" if response.status != 200
|
348
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
349
|
+
end
|
350
|
+
|
351
|
+
##
|
352
|
+
# Deletes multiple triggers via a batch job
|
353
|
+
#
|
354
|
+
# @author Jason Colyer
|
355
|
+
# @since 1.0.0
|
356
|
+
# @param trigger_ids [Array] An array of trigger IDs
|
357
|
+
# @return [object] A {SupportOps::Zendesk::JobStatuses} instance
|
358
|
+
# @see
|
359
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/triggers/#bulk-delete-ticket-triggers
|
360
|
+
# Zendesk API > Triggers > Bulk Delete Ticket Triggers
|
361
|
+
# @example
|
362
|
+
# require 'support_ops_zendesk'
|
363
|
+
#
|
364
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
365
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
366
|
+
# config.username = 'jason@example.com'
|
367
|
+
# config.token = 'abc123'
|
368
|
+
# end
|
369
|
+
#
|
370
|
+
# delete = SupportOps::Zendesk::Triggers.delete_many!([123, 456])
|
371
|
+
# pp delete.id
|
372
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
373
|
+
def self.delete_many!(trigger_ids)
|
374
|
+
raise 'The parameter must be an Array' unless trigger_ids.is_a? Array
|
375
|
+
raise 'You can only delete a maximum of 100 triggers at a time' if trigger_ids.count > 100
|
376
|
+
|
377
|
+
response = client.connection.delete("triggers/destroy_many?ids=#{trigger_ids.join(',')}")
|
378
|
+
raise "Failed to delete triggers => #{body['details']}" if response.status != 200
|
379
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
380
|
+
end
|
381
|
+
|
382
|
+
private
|
383
|
+
|
384
|
+
##
|
385
|
+
# @private
|
386
|
+
def get_record
|
387
|
+
response = self.client.connection.get("triggers/#{self.id}")
|
388
|
+
return nil if response.status != 200
|
389
|
+
|
390
|
+
Oj.load(response.body)['trigger']
|
391
|
+
end
|
392
|
+
|
393
|
+
##
|
394
|
+
# @private
|
395
|
+
def create_record
|
396
|
+
response = self.client.connection.post("triggers", { trigger: attributes_for_save }.to_json)
|
397
|
+
body = Oj.load(response.body)
|
398
|
+
raise "Failed to create trigger => #{body}" if response.status != 201
|
399
|
+
body['trigger']
|
400
|
+
end
|
401
|
+
|
402
|
+
##
|
403
|
+
# @private
|
404
|
+
def update_record
|
405
|
+
raise "Failed to update trigger => You didn't change anything in the object" if attributes_for_save.keys == [:id]
|
406
|
+
response = self.client.connection.put("triggers/#{self.id}", { trigger: attributes_for_save }.to_json)
|
407
|
+
body = Oj.load(response.body)
|
408
|
+
raise "Failed to update trigger #{self.id} => #{body}" if response.status != 200
|
409
|
+
body['trigger']
|
410
|
+
end
|
411
|
+
|
412
|
+
##
|
413
|
+
# @private
|
414
|
+
def delete_record
|
415
|
+
response = self.client.connection.delete("triggers/#{self.id}")
|
416
|
+
raise "Failed to delete trigger => #{body}" if response.status != 204
|
417
|
+
true
|
418
|
+
end
|
419
|
+
|
420
|
+
##
|
421
|
+
# @private
|
422
|
+
def category_record
|
423
|
+
TriggerCategories.get(self.category_id)
|
424
|
+
end
|
425
|
+
end
|
426
|
+
end
|
427
|
+
end
|
@@ -0,0 +1,153 @@
|
|
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 UserFieldOptions within the module {SupportOps::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
# @attr [Integer] id Automatically assigned upon creation
|
13
|
+
# @attr [String] name The name of the custom field option
|
14
|
+
# @attr [Integer] position Ordering of the field relative to other field options
|
15
|
+
# @attr [String] raw_name The dynamic content placeholder, if present, or the name value, if not
|
16
|
+
# @attr [String] value The corresponding tag and backend value for the field option
|
17
|
+
# @todo Show a User Field Option => https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#show-a-user-field-option
|
18
|
+
class UserFieldOptions < SupportOps::Zendesk::Base
|
19
|
+
# @!parse
|
20
|
+
# # Creates or updates a user field option
|
21
|
+
# #
|
22
|
+
# # @author Jason Colyer
|
23
|
+
# # @since 1.0.0
|
24
|
+
# # @return [Object]
|
25
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#create_or_update!}
|
26
|
+
# # @see
|
27
|
+
# # https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#create-or-update-a-user-field-option
|
28
|
+
# # Zendesk API > User Fields > Create Or Update User Field Option
|
29
|
+
# # @example
|
30
|
+
# # require 'support_ops_zendesk'
|
31
|
+
# #
|
32
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
33
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
34
|
+
# # config.username = 'jason@example.com'
|
35
|
+
# # config.token = 'abc123'
|
36
|
+
# # end
|
37
|
+
# #
|
38
|
+
# # new_option = SupportOps::Zendesk::UserFieldOptions.new
|
39
|
+
# # new_option.name = 'Linux'
|
40
|
+
# # new_option.value = 'system_linux'
|
41
|
+
# # new_option.user_field_id = 123456
|
42
|
+
# #
|
43
|
+
# # new_option.create_or_update!
|
44
|
+
# #
|
45
|
+
# # pp new_option.name
|
46
|
+
# # # => "Linux"
|
47
|
+
# def create_or_update!; end
|
48
|
+
# @!parse
|
49
|
+
# # Deletes a user field option
|
50
|
+
# #
|
51
|
+
# # @author Jason Colyer
|
52
|
+
# # @since 1.0.0
|
53
|
+
# # @return [Boolean]
|
54
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#delete!}
|
55
|
+
# # @see
|
56
|
+
# # https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#delete-user-field-option
|
57
|
+
# # Zendesk API > User Fields > Delete User Field Option
|
58
|
+
# # @example
|
59
|
+
# # require 'support_ops_zendesk'
|
60
|
+
# #
|
61
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
62
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
63
|
+
# # config.username = 'jason@example.com'
|
64
|
+
# # config.token = 'abc123'
|
65
|
+
# # end
|
66
|
+
# #
|
67
|
+
# # existing_field = SupportOps::Zendesk::UserFields.get!(23409462)
|
68
|
+
# # existing_option = existing_field.field_options.last
|
69
|
+
# # existing_option.delete!
|
70
|
+
# def delete!; end
|
71
|
+
define_attributes :id, :name, :position, :raw_name, :value, :user_field_id
|
72
|
+
readonly_attributes :id, :user_field_id
|
73
|
+
|
74
|
+
##
|
75
|
+
# Lists user field options in the Zendesk system
|
76
|
+
#
|
77
|
+
# @author Jason Colyer
|
78
|
+
# @since 1.0.0
|
79
|
+
# @overload list(key: value)
|
80
|
+
# @param user_field_id [Integer required] The user field to find the options for
|
81
|
+
# @param limit [Integer optional] The limit to the number of user fields
|
82
|
+
# returned. Default to 0 (i.e. no limit)
|
83
|
+
# @return [Array]
|
84
|
+
# @see
|
85
|
+
# https://developer.zendesk.com/api-reference/ticketing/users/user_fields/#list-user-field-options
|
86
|
+
# Zendesk API > User Fields > List User Field Options
|
87
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
88
|
+
# @example
|
89
|
+
# require 'support_ops_zendesk'
|
90
|
+
#
|
91
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
92
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
93
|
+
# config.username = 'jason@example.com'
|
94
|
+
# config.token = 'abc123'
|
95
|
+
# end
|
96
|
+
#
|
97
|
+
# field = SupportOps::Zendesk::UserFields.get!(50)
|
98
|
+
# options = SupportOps::Zendesk::UserFieldOptions.list(user_field_id: field.id)
|
99
|
+
# pp options.count
|
100
|
+
# # => 5
|
101
|
+
# pp options.last.value
|
102
|
+
# # => "other_or_misc"
|
103
|
+
def self.list(**args)
|
104
|
+
raise 'You must provide a user_field_id value' unless args[:user_field_id]
|
105
|
+
args[:limit] = 0 unless args[:limit]
|
106
|
+
array = []
|
107
|
+
opts = 'page[size]=100'
|
108
|
+
loop do
|
109
|
+
response = client.connection.get("user_fields/#{args[:user_field_id]}/options?#{opts}")
|
110
|
+
body = Oj.load(response.body)
|
111
|
+
body['custom_field_options'].each do |c|
|
112
|
+
c['user_field_id'] = args[:user_field_id]
|
113
|
+
end
|
114
|
+
array += body['custom_field_options'].map { |c| UserFieldOptions.new(c) }
|
115
|
+
break if args[:limit].to_i.positive? && array.count >= args[:limit].to_i
|
116
|
+
break unless body['meta']['has_more']
|
117
|
+
|
118
|
+
opts = body['links']['next'].split('?').last
|
119
|
+
end
|
120
|
+
return array if args[:limit].to_i.zero?
|
121
|
+
|
122
|
+
array.first(args[:limit].to_i)
|
123
|
+
end
|
124
|
+
|
125
|
+
private
|
126
|
+
|
127
|
+
##
|
128
|
+
# @private
|
129
|
+
def create_or_update_record
|
130
|
+
data = {
|
131
|
+
'id' => self.id,
|
132
|
+
'name' => self.name,
|
133
|
+
'value' => self.value,
|
134
|
+
'position' => self.position,
|
135
|
+
'raw_name' => self.raw_name
|
136
|
+
}.compact
|
137
|
+
response = self.client.connection.post("user_fields/#{self.user_field_id}/options", { custom_field_option: data }.to_json)
|
138
|
+
body = Oj.load(response.body)
|
139
|
+
raise "Failed to create or update user field option => #{body}" unless [200, 201].include?(response.status)
|
140
|
+
body['custom_field_option']['user_field_id'] = self.user_field_id
|
141
|
+
body['custom_field_option']
|
142
|
+
end
|
143
|
+
|
144
|
+
##
|
145
|
+
# @private
|
146
|
+
def delete_record
|
147
|
+
response = client.connection.delete("user_fields/#{self.user_field_id}/options/#{self.id}")
|
148
|
+
raise "Failed to delete user field option #{self.id} => #{body}" if response.status != 204
|
149
|
+
true
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|