gitlab_support_readiness 1.0.111 → 1.0.113

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 76db68661570a026ab3995ec2a8b9ab882372b5589ed401881844485298ca670
4
- data.tar.gz: 1bdb1a5122dca406871c78e1b65449c12422824163384e9bfff4c2d14145b8c7
3
+ metadata.gz: '027085156c8432506c68b06131cea002a4830cc4508556ccc6a56895c4d4440b'
4
+ data.tar.gz: 8e23a57b995694c5ffe85e9d47d113001fce4d40aba51796af9c4f34f554e4db
5
5
  SHA512:
6
- metadata.gz: 4fe8cce60d44b4874f4d91bb8f1d3d5a6f50c8692e2f066cfc7ff232200d5f8fde8ed837bc9868facfaa294eea4ee2c0230dd00bebc23518afa7dbef7b5b7612
7
- data.tar.gz: 81ffcf980569383eb449ad461e47a0f7185d9f7025ebd6e0bad8668e0567a7d9983fb18a54d8691852a84aeb30faff77b64941b0556e5166e1ad9e7de9d05fcd
6
+ metadata.gz: ad61f3ce7896ce12a581793771684f8e295121a3655382f5c85b94c60dd7c68393fadd7ea363b0f4ed697a6444ad118ed0e371682316f371516217bc47f0d6c4
7
+ data.tar.gz: ed9ac045fcf5e53cbb54d49356129ffb304648923c93c742455ec3b36b13f9229b645fd512b65569bc254e7b2175034c3a0ad7083790d4e4411adc9f2eb045dc
@@ -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, attribute_name = 'conditions')
253
+ %w[any all].each do |type|
254
+ object[attribute_name][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[attribute_name][type][i]['value'] = group.id.to_s
259
+ end
260
+ end
261
+ if c['field'] == 'organization_id'
262
+ code = c['value'].to_s
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[attribute_name][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[attribute_name][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[attribute_name][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[attribute_name][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[attribute_name][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[attribute_name][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'].to_s =~ /Form\:\ /
305
+ name = c['value'].split('Form: ').last
306
+ ticket_form = Readiness::Zendesk::TicketForms.find_by_name(@zendesk_client, name, @ticket_forms)
307
+ object[attribute_name][type][i]['value'] = ticket_form.id.to_s
308
+ end
309
+ end
310
+ if c['field'].to_s =~ /Field\:\ /
311
+ name = c['field'].split('Field: ').last
312
+ ticket_field = Readiness::Zendesk::TicketFields.find_by_name(@zendesk_client, name, @ticket_fields)
313
+ object[attribute_name][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[attribute_name][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
@@ -48,6 +48,7 @@ module Readiness
48
48
  # pp diffs[:updates.count]
49
49
  # # => 1
50
50
  def self.compare(zendesk_client, location = 'data', verbose = false)
51
+ @zendesk_client = zendesk_client
51
52
  diffs = {
52
53
  updates: [],
53
54
  creates: []
@@ -133,11 +134,20 @@ module Readiness
133
134
  # pp repo.count
134
135
  # # => 35
135
136
  def self.gather(location = 'data')
137
+ @categories = Readiness::Zendesk::TriggerCategories.list(@zendesk_client)
138
+ @groups = Readiness::Zendesk::Groups.list(@zendesk_client)
139
+ @schedules = Readiness::Zendesk::Schedules.list(@zendesk_client)
140
+ @satisfaction_reasons = Readiness::Zendesk::SatisfactionReasons.list(@zendesk_client)
141
+ @targets = Readiness::Zendesk::Targets.list(@zendesk_client)
142
+ @ticket_fields = Readiness::Zendesk::TicketFields.list(@zendesk_client)
143
+ @ticket_forms = Readiness::Zendesk::TicketForms.list(@zendesk_client)
144
+ @webhooks = Readiness::Zendesk::Webhooks.list(@zendesk_client)
136
145
  @errors = []
137
146
  @location = location
138
147
  array = []
139
148
  Dir["#{@location}/*.yaml"].each do |f|
140
149
  object = YAML.safe_load_file(f)
150
+ object = convert_conditions(object, 'filter')
141
151
  validity_check(f, object)
142
152
  object['id'] = nil
143
153
  array.push(Zendesk::SLAs.new(object))
@@ -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.113
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-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport