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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76db68661570a026ab3995ec2a8b9ab882372b5589ed401881844485298ca670
4
- data.tar.gz: 1bdb1a5122dca406871c78e1b65449c12422824163384e9bfff4c2d14145b8c7
3
+ metadata.gz: 8edd59d6823d5030545aa74b9ce7dba68822470283bc7384a6e071ea04003f94
4
+ data.tar.gz: 8f0871238aa1a5d14879f036b1e0dbaeff16e3a507c17451b51461093ec4f843
5
5
  SHA512:
6
- metadata.gz: 4fe8cce60d44b4874f4d91bb8f1d3d5a6f50c8692e2f066cfc7ff232200d5f8fde8ed837bc9868facfaa294eea4ee2c0230dd00bebc23518afa7dbef7b5b7612
7
- data.tar.gz: 81ffcf980569383eb449ad461e47a0f7185d9f7025ebd6e0bad8668e0567a7d9983fb18a54d8691852a84aeb30faff77b64941b0556e5166e1ad9e7de9d05fcd
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,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.111
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-01 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