gitlab_support_readiness 1.0.110 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bcaad3ddf5dae80d44628c64919b1816fdcf5b9f55bcaf16be572abda1d39f40
4
- data.tar.gz: a4e96419eda25a20c671d05ad98b4b368bd32a9585eb3d078cfdfb8f670100c5
3
+ metadata.gz: 8edd59d6823d5030545aa74b9ce7dba68822470283bc7384a6e071ea04003f94
4
+ data.tar.gz: 8f0871238aa1a5d14879f036b1e0dbaeff16e3a507c17451b51461093ec4f843
5
5
  SHA512:
6
- metadata.gz: e0f612510cf7978298d2efdd89c7f7472c8662a5de27be23a81ad4bcf6741ef3265cb9c6ce74d4c0cd843895f17ead184c7dc2a12468b7fa22a115a878007536
7
- data.tar.gz: e0541f1e0afc68ae449e67511d929a77eda037d5e9c5b29bd81eee49e15bc91748ba7447a905b60684125fd1e6b2def101746071241b7471129db6eebac73614
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 = convert_names_to_ids(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,136 +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 unless code.to_i.zero?
180
-
181
- search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
182
- if search.count == 1
183
- trigger['conditions'][type][i]['value'] = search.first.id.to_s
184
- end
185
- end
186
- if c['field'] == 'satisfaction_reason_code'
187
- reason = Readiness::Zendesk::SatisfactionReasons.find_by_name(@zendesk_client, c['value'], @satisfaction_reasons)
188
- unless reason.nil?
189
- trigger['conditions'][type][i]['value'] = reason.reason_code.to_s
190
- end
191
- end
192
- if c['field'] == 'via_id'
193
- via_type = Readiness::Zendesk::ViaTypes.find_by_name(c['value'])
194
- unless via_type.nil?
195
- trigger['conditions'][type][i]['value'] = via_type.id.to_s
196
- end
197
- end
198
- if c['field'] == 'requester_role'
199
- role = Readiness::Zendesk::RequesterRoles.find_by_name(c['value'])
200
- unless role.nil?
201
- trigger['conditions'][type][i]['value'] = role.id.to_s
202
- end
203
- end
204
- if c['field'] == 'role'
205
- role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
206
- unless role.nil?
207
- trigger['conditions'][type][i]['value'] = role.id.to_s
208
- end
209
- end
210
- if c['field'] == 'assignee_id'
211
- unless ['', 'current_user', 'requester_id'].include? c['value']
212
- search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{c['value']}")
213
- if search.count == 1
214
- trigger['conditions'][type][i]['value'] = search.first.id.to_s
215
- end
216
- end
217
- end
218
- if c['field'] == 'ticket_form_id'
219
- if c['value'] =~ /Form\:\ /
220
- name = c['value'].split('Form: ').last
221
- ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
222
- trigger['conditions'][type][i]['value'] = ticket_form.id.to_s
223
- end
224
- end
225
- if c['field'] =~ /Field\:\ /
226
- name = c['field'].split('Field: ').last
227
- ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
228
- trigger['conditions'][type][i]['field'] = "custom_fields_#{ticket_field.id}"
229
- end
230
- if c['value'].to_s =~ /Schedule\:\ /
231
- name = c['value'].split('Schedule: ').last
232
- schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
233
- trigger['conditions'][type][i]['value'] = schedule.id.to_s
234
- end
235
- end
236
- end
237
- trigger['actions'].each_with_index do |a, i|
238
- if a['field'] == 'organization_id'
239
- code = a['value']
240
- search = Readiness::Zendesk::Search.organizations(@zendesk_client, "salesforce_id:#{code}")
241
- if search.count == 1
242
- trigger['actions'][i]['value'][0] = search.first.id.to_s
243
- end
244
- end
245
- if a['field'] == 'notification_target'
246
- if a['value'].first =~ /^Target\:\ /
247
- name = a['value'].first.split('Target: ').last
248
- target = Readiness::Zendesk::Targets.find_by_name(@zendesk_client, name, @targets)
249
- trigger['actions'][i]['value'][0] = target.id.to_s
250
- end
251
- end
252
- if a['field'] == 'role'
253
- role = Readiness::Zendesk::TicketUserTypes.find_by_name(@zendesk_client, c['value'])
254
- unless role.nil?
255
- trigger['actions'][i]['value'] = role.id.to_s
256
- end
257
- end
258
- if a['field'] == 'assignee_id'
259
- unless ['', 'current_user', 'requester_id'].include? a['value']
260
- search = Readiness::Zendesk::Search.users(@zendesk_client, "email:#{a['value']}")
261
- if search.count == 1
262
- trigger['actions'][i]['value'] = search.first.id.to_s
263
- else
264
- puts "Cannot find user #{a['value']} for #{trigger['title']}"
265
- exit 1
266
- end
267
- end
268
- end
269
- if a['field'] == 'notification_webhook'
270
- if a['value'].first =~ /^Webhook\:\ /
271
- name = a['value'].first.split('Webhook: ').last
272
- webhook = Readiness::Zendesk::Webhooks.find_by_name(@zendesk_client, name, @webhooks)
273
- trigger['actions'][i]['value'][0] = webhook.id.to_s
274
- end
275
- end
276
- if a['field'] == 'ticket_form_id'
277
- if a['value'] =~ /Form\:\ /
278
- name = a['value'].split('Form: ').last
279
- ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
280
- trigger['actions'][i]['value'] = ticket_form.id.to_s
281
- end
282
- end
283
- if a['field'] =~ /Field\:\ /
284
- name = a['field'].split('Field: ').last
285
- ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
286
- trigger['actions'][i]['field'] = "custom_fields_#{ticket_field.id}"
287
- end
288
- if a['field'] == 'set_schedule' && a['value'].to_s =~ /Schedule\:\ /
289
- name = a['value'].split('Schedule: ').last
290
- schedule = Readiness::Zendesk::Schedules.find_by_name(@zendesk_client, name, @schedules)
291
- trigger['actions'][i]['value'] = schedule.id.to_s
292
- end
293
- end
294
- trigger
295
- end
296
-
297
168
  ##
298
169
  # Outputs an error report and exits with a status code of 1
299
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.110
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-01-31 00:00:00.000000000 Z
11
+ date: 2025-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport