gitlab_support_readiness 1.0.111 → 1.0.112
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 +4 -4
- data/lib/support_readiness/client.rb +166 -0
- data/lib/support_readiness/repos/triggers.rb +2 -135
- data/lib/support_readiness/zendesk/groups.rb +28 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8edd59d6823d5030545aa74b9ce7dba68822470283bc7384a6e071ea04003f94
|
4
|
+
data.tar.gz: 8f0871238aa1a5d14879f036b1e0dbaeff16e3a507c17451b51461093ec4f843
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc6f3c2f6f6a4408f1639a2276c74305417af57536bf3f6a0d7b268c0c7b85283613b93ef9454c44bd6f7b7fcf465d58e85cc8ea9fda18dd2d83f85329576097
|
7
|
+
data.tar.gz: b7af37d1003e016d0269015402781d45c9cb25827d66024f3a3d5e7911866e7b37cc723fcdbdb087921ac2032554ced35f0dc411f06b4382da9adbfb7bcd3f26
|
@@ -231,5 +231,171 @@ module Readiness
|
|
231
231
|
def self.erb_renderer(file)
|
232
232
|
ERB.new(File.read(file))
|
233
233
|
end
|
234
|
+
|
235
|
+
##
|
236
|
+
# Convert user friendly Strings into Zendesk values for standard objects
|
237
|
+
#
|
238
|
+
# @author Jason Colyer
|
239
|
+
# @since 1.0.112
|
240
|
+
# @param object [Object] The object to parse
|
241
|
+
def self.convert_standard_names_to_ids(object)
|
242
|
+
new_object = convert_conditions(object)
|
243
|
+
convert_actions(new_object)
|
244
|
+
end
|
245
|
+
|
246
|
+
##
|
247
|
+
# Convert user friendly Strings within conditions into Zendesk values for standard objects
|
248
|
+
#
|
249
|
+
# @author Jason Colyer
|
250
|
+
# @since 1.0.112
|
251
|
+
# @param object [Object] The object to parse
|
252
|
+
def self.convert_conditions(object)
|
253
|
+
%w[any all].each do |type|
|
254
|
+
object['conditions'][type].each_with_index do |c, i|
|
255
|
+
if c['field'] == 'group_id'
|
256
|
+
group = Readiness::Zendesk::Groups.find_by_name(@zendesk_client, c['value'], @groups)
|
257
|
+
unless group.nil?
|
258
|
+
object['conditions'][type][i]['value'] = group.id.to_s
|
259
|
+
end
|
260
|
+
end
|
261
|
+
if c['field'] == 'organization_id'
|
262
|
+
code = c['value']
|
263
|
+
next if code.empty?
|
264
|
+
next if %r{^[0-9]+$}.match code
|
265
|
+
|
266
|
+
search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
|
267
|
+
if search.count == 1
|
268
|
+
object['conditions'][type][i]['value'] = search.first.id.to_s
|
269
|
+
end
|
270
|
+
end
|
271
|
+
if c['field'] == 'satisfaction_reason_code'
|
272
|
+
reason = Readiness::Zendesk::SatisfactionReasons.find_by_name(@zendesk_client, c['value'], @satisfaction_reasons)
|
273
|
+
unless reason.nil?
|
274
|
+
object['conditions'][type][i]['value'] = reason.reason_code.to_s
|
275
|
+
end
|
276
|
+
end
|
277
|
+
if c['field'] == 'via_id'
|
278
|
+
via_type = Readiness::Zendesk::ViaTypes.find_by_name(c['value'])
|
279
|
+
unless via_type.nil?
|
280
|
+
object['conditions'][type][i]['value'] = via_type.id.to_s
|
281
|
+
end
|
282
|
+
end
|
283
|
+
if c['field'] == 'requester_role'
|
284
|
+
role = Readiness::Zendesk::RequesterRoles.find_by_name(c['value'])
|
285
|
+
unless role.nil?
|
286
|
+
object['conditions'][type][i]['value'] = role.id.to_s
|
287
|
+
end
|
288
|
+
end
|
289
|
+
if c['field'] == 'role'
|
290
|
+
role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
|
291
|
+
unless role.nil?
|
292
|
+
object['conditions'][type][i]['value'] = role.id.to_s
|
293
|
+
end
|
294
|
+
end
|
295
|
+
if c['field'] == 'assignee_id'
|
296
|
+
unless ['', 'current_user', 'requester_id'].include? c['value']
|
297
|
+
search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{c['value']}")
|
298
|
+
if search.count == 1
|
299
|
+
object['conditions'][type][i]['value'] = search.first.id.to_s
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
if c['field'] == 'ticket_form_id'
|
304
|
+
if c['value'] =~ /Form\:\ /
|
305
|
+
name = c['value'].split('Form: ').last
|
306
|
+
ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
|
307
|
+
object['conditions'][type][i]['value'] = ticket_form.id.to_s
|
308
|
+
end
|
309
|
+
end
|
310
|
+
if c['field'] =~ /Field\:\ /
|
311
|
+
name = c['field'].split('Field: ').last
|
312
|
+
ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
|
313
|
+
object['conditions'][type][i]['field'] = "custom_fields_#{ticket_field.id}"
|
314
|
+
end
|
315
|
+
if c['value'].to_s =~ /Schedule\:\ /
|
316
|
+
name = c['value'].split('Schedule: ').last
|
317
|
+
schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
|
318
|
+
object['conditions'][type][i]['value'] = schedule.id.to_s
|
319
|
+
end
|
320
|
+
end
|
321
|
+
end
|
322
|
+
object
|
323
|
+
end
|
324
|
+
|
325
|
+
##
|
326
|
+
# Convert user friendly Strings within actions into Zendesk values for standard objects
|
327
|
+
#
|
328
|
+
# @author Jason Colyer
|
329
|
+
# @since 1.0.112
|
330
|
+
# @param object [Object] The object to parse
|
331
|
+
def self.convert_actions(object)
|
332
|
+
object['actions'].each_with_index do |a, i|
|
333
|
+
if a['field'] == 'group_id'
|
334
|
+
group = Readiness::Zendesk::Groups.find_by_name(@zendesk_client, a['value'], @groups)
|
335
|
+
unless group.nil?
|
336
|
+
object['actions'][i]['value'] = group.id.to_s
|
337
|
+
end
|
338
|
+
end
|
339
|
+
if a['field'] == 'organization_id'
|
340
|
+
code = a['value']
|
341
|
+
next if code.empty?
|
342
|
+
next if %r{^[0-9]+$}.match code
|
343
|
+
|
344
|
+
search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
|
345
|
+
if search.count == 1
|
346
|
+
object['actions'][i]['value'][0] = search.first.id.to_s
|
347
|
+
end
|
348
|
+
end
|
349
|
+
if a['field'] == 'notification_target'
|
350
|
+
if a['value'].first =~ /^Target\:\ /
|
351
|
+
name = a['value'].first.split('Target: ').last
|
352
|
+
target = Readiness::Zendesk::Targets.find_by_name(@zendesk_client, name, @targets)
|
353
|
+
object['actions'][i]['value'][0] = target.id.to_s
|
354
|
+
end
|
355
|
+
end
|
356
|
+
if a['field'] == 'role'
|
357
|
+
role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
|
358
|
+
unless role.nil?
|
359
|
+
object['actions'][i]['value'] = role.id.to_s
|
360
|
+
end
|
361
|
+
end
|
362
|
+
if a['field'] == 'assignee_id'
|
363
|
+
unless ['', 'current_user', 'requester_id'].include? a['value']
|
364
|
+
search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{a['value']}")
|
365
|
+
if search.count == 1
|
366
|
+
object['actions'][i]['value'] = search.first.id.to_s
|
367
|
+
else
|
368
|
+
puts "Cannot find user #{a['value']} for #{object['title']}"
|
369
|
+
exit 1
|
370
|
+
end
|
371
|
+
end
|
372
|
+
end
|
373
|
+
if a['field'] == 'notification_webhook'
|
374
|
+
if a['value'].first =~ /^Webhook\:\ /
|
375
|
+
name = a['value'].first.split('Webhook: ').last
|
376
|
+
webhook = Readiness::Zendesk::Webhooks.find_by_name(@zendesk_client, name, @webhooks)
|
377
|
+
object['actions'][i]['value'][0] = webhook.id.to_s
|
378
|
+
end
|
379
|
+
end
|
380
|
+
if a['field'] == 'ticket_form_id'
|
381
|
+
if a['value'] =~ /Form\:\ /
|
382
|
+
name = a['value'].split('Form: ').last
|
383
|
+
ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
|
384
|
+
object['actions'][i]['value'] = ticket_form.id.to_s
|
385
|
+
end
|
386
|
+
end
|
387
|
+
if a['field'] =~ /Field\:\ /
|
388
|
+
name = a['field'].split('Field: ').last
|
389
|
+
ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
|
390
|
+
object['actions'][i]['field'] = "custom_fields_#{ticket_field.id}"
|
391
|
+
end
|
392
|
+
if a['field'] == 'set_schedule' && a['value'].to_s =~ /Schedule\:\ /
|
393
|
+
name = a['value'].split('Schedule: ').last
|
394
|
+
schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
|
395
|
+
object['actions'][i]['value'] = schedule.id.to_s
|
396
|
+
end
|
397
|
+
end
|
398
|
+
object
|
399
|
+
end
|
234
400
|
end
|
235
401
|
end
|
@@ -136,6 +136,7 @@ module Readiness
|
|
136
136
|
# # => 35
|
137
137
|
def self.gather(location = 'data')
|
138
138
|
@categories = Readiness::Zendesk::TriggerCategories.list(@zendesk_client)
|
139
|
+
@groups = Readiness::Zendesk::Groups.list(@zendesk_client)
|
139
140
|
@schedules = Readiness::Zendesk::Schedules.list(@zendesk_client)
|
140
141
|
@satisfaction_reasons = Readiness::Zendesk::SatisfactionReasons.list(@zendesk_client)
|
141
142
|
@targets = Readiness::Zendesk::Targets.list(@zendesk_client)
|
@@ -150,7 +151,7 @@ module Readiness
|
|
150
151
|
object = convert_managed_content(object, f) if object['contains_managed_content']
|
151
152
|
object['default'] = false
|
152
153
|
#object = convert_managed_webhook(object, f) if object['contains_managed_webhook']
|
153
|
-
object =
|
154
|
+
object = convert_standard_names_to_ids(object)
|
154
155
|
if object['category_id'].to_i.zero?
|
155
156
|
trigger_category = Readiness::Zendesk::TriggerCategories.find_by_name(@zendesk_client, object['category_id'], @categories)
|
156
157
|
object['category_id'] = trigger_category.id.to_s
|
@@ -164,140 +165,6 @@ module Readiness
|
|
164
165
|
array
|
165
166
|
end
|
166
167
|
|
167
|
-
##
|
168
|
-
# Converts various user Strings to the proper ID value
|
169
|
-
#
|
170
|
-
# @author Jason Colyer
|
171
|
-
# @since 1.0.92
|
172
|
-
# @param trigger [Hash] The trigger information from the YAMl file
|
173
|
-
# @return [Hash]
|
174
|
-
def self.convert_names_to_ids(trigger)
|
175
|
-
%w[any all].each do |type|
|
176
|
-
trigger['conditions'][type].each_with_index do |c, i|
|
177
|
-
if c['field'] == 'organization_id'
|
178
|
-
code = c['value']
|
179
|
-
next if code.empty?
|
180
|
-
next if %r{^[0-9]+$}.match code
|
181
|
-
|
182
|
-
search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
|
183
|
-
if search.count == 1
|
184
|
-
trigger['conditions'][type][i]['value'] = search.first.id.to_s
|
185
|
-
end
|
186
|
-
end
|
187
|
-
if c['field'] == 'satisfaction_reason_code'
|
188
|
-
reason = Readiness::Zendesk::SatisfactionReasons.find_by_name(@zendesk_client, c['value'], @satisfaction_reasons)
|
189
|
-
unless reason.nil?
|
190
|
-
trigger['conditions'][type][i]['value'] = reason.reason_code.to_s
|
191
|
-
end
|
192
|
-
end
|
193
|
-
if c['field'] == 'via_id'
|
194
|
-
via_type = Readiness::Zendesk::ViaTypes.find_by_name(c['value'])
|
195
|
-
unless via_type.nil?
|
196
|
-
trigger['conditions'][type][i]['value'] = via_type.id.to_s
|
197
|
-
end
|
198
|
-
end
|
199
|
-
if c['field'] == 'requester_role'
|
200
|
-
role = Readiness::Zendesk::RequesterRoles.find_by_name(c['value'])
|
201
|
-
unless role.nil?
|
202
|
-
trigger['conditions'][type][i]['value'] = role.id.to_s
|
203
|
-
end
|
204
|
-
end
|
205
|
-
if c['field'] == 'role'
|
206
|
-
role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
|
207
|
-
unless role.nil?
|
208
|
-
trigger['conditions'][type][i]['value'] = role.id.to_s
|
209
|
-
end
|
210
|
-
end
|
211
|
-
if c['field'] == 'assignee_id'
|
212
|
-
unless ['', 'current_user', 'requester_id'].include? c['value']
|
213
|
-
search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{c['value']}")
|
214
|
-
if search.count == 1
|
215
|
-
trigger['conditions'][type][i]['value'] = search.first.id.to_s
|
216
|
-
end
|
217
|
-
end
|
218
|
-
end
|
219
|
-
if c['field'] == 'ticket_form_id'
|
220
|
-
if c['value'] =~ /Form\:\ /
|
221
|
-
name = c['value'].split('Form: ').last
|
222
|
-
ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
|
223
|
-
trigger['conditions'][type][i]['value'] = ticket_form.id.to_s
|
224
|
-
end
|
225
|
-
end
|
226
|
-
if c['field'] =~ /Field\:\ /
|
227
|
-
name = c['field'].split('Field: ').last
|
228
|
-
ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
|
229
|
-
trigger['conditions'][type][i]['field'] = "custom_fields_#{ticket_field.id}"
|
230
|
-
end
|
231
|
-
if c['value'].to_s =~ /Schedule\:\ /
|
232
|
-
name = c['value'].split('Schedule: ').last
|
233
|
-
schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
|
234
|
-
trigger['conditions'][type][i]['value'] = schedule.id.to_s
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
trigger['actions'].each_with_index do |a, i|
|
239
|
-
if a['field'] == 'organization_id'
|
240
|
-
code = a['value']
|
241
|
-
next if code.empty?
|
242
|
-
next if %r{^[0-9]+$}.match code
|
243
|
-
|
244
|
-
search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
|
245
|
-
if search.count == 1
|
246
|
-
trigger['actions'][i]['value'][0] = search.first.id.to_s
|
247
|
-
end
|
248
|
-
end
|
249
|
-
if a['field'] == 'notification_target'
|
250
|
-
if a['value'].first =~ /^Target\:\ /
|
251
|
-
name = a['value'].first.split('Target: ').last
|
252
|
-
target = Readiness::Zendesk::Targets.find_by_name(@zendesk_client, name, @targets)
|
253
|
-
trigger['actions'][i]['value'][0] = target.id.to_s
|
254
|
-
end
|
255
|
-
end
|
256
|
-
if a['field'] == 'role'
|
257
|
-
role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
|
258
|
-
unless role.nil?
|
259
|
-
trigger['actions'][i]['value'] = role.id.to_s
|
260
|
-
end
|
261
|
-
end
|
262
|
-
if a['field'] == 'assignee_id'
|
263
|
-
unless ['', 'current_user', 'requester_id'].include? a['value']
|
264
|
-
search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{a['value']}")
|
265
|
-
if search.count == 1
|
266
|
-
trigger['actions'][i]['value'] = search.first.id.to_s
|
267
|
-
else
|
268
|
-
puts "Cannot find user #{a['value']} for #{trigger['title']}"
|
269
|
-
exit 1
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
if a['field'] == 'notification_webhook'
|
274
|
-
if a['value'].first =~ /^Webhook\:\ /
|
275
|
-
name = a['value'].first.split('Webhook: ').last
|
276
|
-
webhook = Readiness::Zendesk::Webhooks.find_by_name(@zendesk_client, name, @webhooks)
|
277
|
-
trigger['actions'][i]['value'][0] = webhook.id.to_s
|
278
|
-
end
|
279
|
-
end
|
280
|
-
if a['field'] == 'ticket_form_id'
|
281
|
-
if a['value'] =~ /Form\:\ /
|
282
|
-
name = a['value'].split('Form: ').last
|
283
|
-
ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
|
284
|
-
trigger['actions'][i]['value'] = ticket_form.id.to_s
|
285
|
-
end
|
286
|
-
end
|
287
|
-
if a['field'] =~ /Field\:\ /
|
288
|
-
name = a['field'].split('Field: ').last
|
289
|
-
ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
|
290
|
-
trigger['actions'][i]['field'] = "custom_fields_#{ticket_field.id}"
|
291
|
-
end
|
292
|
-
if a['field'] == 'set_schedule' && a['value'].to_s =~ /Schedule\:\ /
|
293
|
-
name = a['value'].split('Schedule: ').last
|
294
|
-
schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
|
295
|
-
trigger['actions'][i]['value'] = schedule.id.to_s
|
296
|
-
end
|
297
|
-
end
|
298
|
-
trigger
|
299
|
-
end
|
300
|
-
|
301
168
|
##
|
302
169
|
# Outputs an error report and exits with a status code of 1
|
303
170
|
#
|
@@ -130,6 +130,34 @@ module Readiness
|
|
130
130
|
Groups.new(Oj.load(response.body)['group'])
|
131
131
|
end
|
132
132
|
|
133
|
+
##
|
134
|
+
# Locates a group within Zendesk by name. Can utilize a cacheh for quicker results
|
135
|
+
#
|
136
|
+
# @author Jason Colyer
|
137
|
+
# @since 1.0.112
|
138
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
139
|
+
# @param name [String] The group name to look for
|
140
|
+
# @param cache [Array] The results of {Readiness::Zendesk::Groups#list}
|
141
|
+
# @return [Object] An instance of {Readiness::Zendesk::Groups}
|
142
|
+
# @example
|
143
|
+
# require 'support_readiness'
|
144
|
+
# config = Readiness::Zendesk::Configuration.new
|
145
|
+
# config.username = 'alice@example.com'
|
146
|
+
# config.token = 'test123abc'
|
147
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
148
|
+
# client = Readiness::Zendesk::Client.new(config)
|
149
|
+
# field = Readiness::Zendesk::Groups.find_by_name(client, 'Security')
|
150
|
+
# pp field.id
|
151
|
+
# # => 456
|
152
|
+
def self.find_by_name(client, name, cache = nil)
|
153
|
+
groups = if cache.nil?
|
154
|
+
Groups.list(client)
|
155
|
+
else
|
156
|
+
cache
|
157
|
+
end
|
158
|
+
groups.detect { |f| f.name == name }
|
159
|
+
end
|
160
|
+
|
133
161
|
##
|
134
162
|
# Creates a group. Will exit if unsuccessful
|
135
163
|
#
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitlab_support_readiness
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.112
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Colyer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-02-
|
11
|
+
date: 2025-02-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|