gitlab_support_readiness 1.0.8 → 1.0.9

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: cb6ce249d7793519dad87daf138f77b5bca3e0e856750afc720f7d8d1a7ec2d9
4
- data.tar.gz: 1e6421faf02b125338fc8ebd3ec0844999b2ed3ba024914cbc7ac49571b3d455
3
+ metadata.gz: 7b6172a8a41b139003edf771fe377bd8910f12d41c27d54456290c114cae08cb
4
+ data.tar.gz: 568efc6d2b6cd4bd7c014787a70cce19927415b14944ed4e4bb7dac4f682b03a
5
5
  SHA512:
6
- metadata.gz: 447477704b6d00f11f71927e26724160a485463b3b1f10e94b66f7dd978b0e34161f6ab67f47f1e58af7aa7a06e975b16792a2487baf87321b0896a5bb361b91
7
- data.tar.gz: fc45684a9e03449b8962547622bc89e4fd5c3e8a64a248979dc1b5fdb5da0180e1581d72582f3ba19581079eb5a5ae0ab41645f22c87ba7e10d4daca9e52bc7d
6
+ metadata.gz: 50e8b47c5a5eb3cc7b3e537c4d64c30ebc5f1461c1586b7890ca97b20783d285a8c060cf4c35dac4ad9a76e75b6645f8b1498e42c3162ca71f2d96197b4b3acb
7
+ data.tar.gz: 502bee0ca7781bd1469a7551f0a40239f940e7619b083e8c148b6e81f2ba58c277d6adf8ce18f35465864df2ce16e465e93f14ede1d6b367c882c38f14a18e90
@@ -36,6 +36,22 @@ module Readiness
36
36
  hash.to_json
37
37
  end
38
38
 
39
+ ##
40
+ # Converts an Object to a JSON String, removing nil values except for ones defined in an Array
41
+ #
42
+ # @author Jason Colyer
43
+ # @since 1.0.9
44
+ # @param object [Object]
45
+ # @param keep_nil [Array] An array of keys to keep as nil in the final return
46
+ # @return [String]
47
+ def self.to_nearly_clean_json(object, keep_nil)
48
+ hash = to_hash(object).compact
49
+ keep_nil.each do |k|
50
+ hash[key.to_sym][k] = nil unless hash[key.to_sym].keys.include? k
51
+ end
52
+ hash.to_json
53
+ end
54
+
39
55
  ##
40
56
  # Converts an Object to a JSON String with a leading key, removing nil values
41
57
  #
@@ -49,6 +65,23 @@ module Readiness
49
65
  hash.to_json
50
66
  end
51
67
 
68
+ ##
69
+ # Converts an Object to a JSON String with a leading key, removing nil values except for ones defined in an Array
70
+ #
71
+ # @author Jason Colyer
72
+ # @since 1.0.9
73
+ # @param object [Object]
74
+ # @param key [String]
75
+ # @param keep_nil [Array] An array of keys to keep as nil in the final return
76
+ # @return [String]
77
+ def self.to_nearly_clean_json_with_key(object, key, keep_nil)
78
+ hash = { "#{key}": to_hash(object).compact }
79
+ keep_nil.each do |k|
80
+ hash[key.to_sym][k] = nil unless hash[key.to_sym].keys.include? k
81
+ end
82
+ hash.to_json
83
+ end
84
+
52
85
  ##
53
86
  # Handles error occurred from making Faraday requests
54
87
  #
@@ -86,9 +119,15 @@ module Readiness
86
119
  exit 1
87
120
  end
88
121
 
122
+ ##
123
+ # Handles 400 bad request errors from making Faraday requests.
124
+ #
125
+ # @author Jason Colyer
126
+ # @since 1.0.0
127
+ # @param system [String] The system the error occurred on
128
+ # @param params [Hash] A Hash of information about the request
89
129
  def self.bad_request_error(system, params)
90
- pp system
91
- pp params
130
+ puts "Action '#{params[:action]}' to ID #{params[:id]} on #{system} returned a 404 error"
92
131
  exit 1
93
132
  end
94
133
 
@@ -68,41 +68,6 @@ module Readiness
68
68
  @weight = object['weight']
69
69
  end
70
70
 
71
- ##
72
- # Lists all issues. Does not stop until it ends or the page limit is hit.
73
- # This method can take a long time to run depending on the parameters used.
74
- #
75
- # @author Jason Colyer
76
- # @since 1.0.0
77
- # @param client [Object] An instance of {Readiness::GitLab::Client}
78
- # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
79
- # @param filters [Array] An array of filter Strings to use. Should be in the format of key=value
80
- # @return [Array]
81
- # @see https://docs.gitlab.com/ee/api/issues.html#list-issues GitLab API > Issues > List issues
82
- # @example
83
- # require 'support_readiness'
84
- # config = Readiness::GitLab::Configuration.new
85
- # config.token = 'test123abc'
86
- # client = Readiness::GitLab::Client.new(config)
87
- # issues = Readiness::GitLab::Issues.list_all(client, 2, ["assignee_id=5", "state=opened"])
88
- # puts issues.first.web_url
89
- # # => "https://gitlab.com/gitlab-com/support/support-team-meta/-/issues/1"
90
- def self.list_all(client, limit = 0, filters = [])
91
- array = []
92
- page = 1
93
- loop do
94
- response = client.connection.get "issues?per_page=100&page=#{page}&#{to_param_string(filters)}"
95
- handle_request_error(0, 'GitLab', response.status) unless response.status == 200
96
- body = Oj.load(response.body)
97
- array += body.map { |p| Issues.new(p) }
98
- break if body.count < 100
99
- break if limit != 0 && array.count >= (limit * 100)
100
-
101
- page += 1
102
- end
103
- array
104
- end
105
-
106
71
  ##
107
72
  # Lists all issues for an object. Does not stop until it ends or the page limit is hit.
108
73
  # This method can take a long time to run depending on the parameters used.
@@ -306,7 +271,7 @@ module Readiness
306
271
  array = []
307
272
  page = 0
308
273
  loop do
309
- response = client.connection.get "projects/#{project.id}/issues/#{issues.id}/notes?per_page=100&page=#{page}"
274
+ response = client.connection.get "projects/#{project.id}/issues/#{issues.iid}/notes?per_page=100&page=#{page}"
310
275
  handle_request_error(0, 'GitLab', response.status) unless response.status == 200
311
276
  body = Oj.load(response.body)
312
277
  array += body
@@ -374,7 +339,7 @@ module Readiness
374
339
  # pp comment['updated_at']
375
340
  # # => "2024-09-23T16:47:36Z"
376
341
  def self.update_comment!(client, project, issue, cid, params)
377
- response = client.connection.put "projects/#{project.id}/issues/#{issue.iid}/notes/#{cid}", to_clean_json(params)
342
+ response = client.connection.put "projects/#{project.id}/issues/#{issue.iid}/notes/#{cid}", params.to_json
378
343
  handle_request_error(1, 'GitLab', response.status, { action: 'Update issue comment', id: issue.id }) unless response.status == 200
379
344
  Oj.load(response.body)
380
345
  end
@@ -447,7 +447,7 @@ module Readiness
447
447
  # pp badge['id']
448
448
  # # => 7
449
449
  def self.create_badge!(client, project, params)
450
- response = client.connection.post "projects/#{project.id}/badges", to_clean_json(params)
450
+ response = client.connection.post "projects/#{project.id}/badges", params.to_json
451
451
  handle_request_error(1, 'GitLab', response.status, { action: 'Create badge', id: project.id }) unless response.status == 200
452
452
  Oj.load(response.body)
453
453
  end
@@ -472,11 +472,11 @@ module Readiness
472
472
  # bdge_params = {
473
473
  # image_url: 'https://shields.io/my/badge'
474
474
  # }
475
- # badge = Readiness::GitLab::Projects.create_badge!(client, project, 7, bdge_params)
475
+ # badge = Readiness::GitLab::Projects.update_badge!(client, project, 7, bdge_params)
476
476
  # pp badge['name']
477
477
  # # => "mybadge"
478
478
  def self.update_badge!(client, project, bid, params)
479
- response = client.connection.put "projects/#{project.id}/badges/#{bid}", to_clean_json(params)
479
+ response = client.connection.put "projects/#{project.id}/badges/#{bid}", params.to_json
480
480
  handle_request_error(1, 'GitLab', response.status, { action: 'Update badge', id: project.id }) unless response.status == 200
481
481
  Oj.load(response.body)
482
482
  end
@@ -497,7 +497,7 @@ module Readiness
497
497
  # config.token = 'test123abc'
498
498
  # client = Readiness::GitLab::Client.new(config)
499
499
  # project = Readiness::GitLab::Projects.find!(client, 1083469)
500
- # badge = Readiness::GitLab::Projects.create_badge!(client, project, 7)
500
+ # badge = Readiness::GitLab::Projects.delete_badge!(client, project, 7)
501
501
  # pp badge
502
502
  # # => true
503
503
  def self.delete_badge!(client, project, bid)
@@ -81,7 +81,7 @@ module Readiness
81
81
  # @param project [Object] An instance of {Readiness::GitLab::Projects}
82
82
  # @param path [String] The full file path. Ex: lib/support_readiness/gitlab/repositories.rb
83
83
  # @param ref [String] The name of branch, tag or commit
84
- # @return [Array]
84
+ # @return [String]
85
85
  # @see https://docs.gitlab.com/ee/api/repository_files.html#get-raw-file-from-repository GitLab API > Repository files > Get raw file from repository
86
86
  # @example
87
87
  # require 'support_readiness'
@@ -90,12 +90,12 @@ module Readiness
90
90
  # client = Readiness::GitLab::Client.new(config)
91
91
  # project = Readiness::GitLab::Projects.find!(client, 1083469)
92
92
  # file = Readiness::GitLab::Repositories.raw_file(client, project, ".gitlab/CODEOWNERS", "main")
93
- # pp file['size']
94
- # # => 88
93
+ # pp file
94
+ # # => "Hello World!"
95
95
  def self.raw_file(client, project, path, ref)
96
96
  response = client.connection.get "projects/#{project.id}/repository/files/#{CGI.escape(path)}/raw?ref=#{ref}"
97
97
  handle_request_error(0, 'GitLab', response.status) unless response.status == 200
98
- Oj.load(response.body)
98
+ response.body
99
99
  end
100
100
 
101
101
  ##
@@ -126,7 +126,7 @@ module Readiness
126
126
  # pp file['path']
127
127
  # # => "spec/test.file"
128
128
  def self.create_file!(client, project, path, params)
129
- response = client.connection.post "projects/#{project.id}/repository/files/#{CGI.escape(path)}", to_clean_json(params)
129
+ response = client.connection.post "projects/#{project.id}/repository/files/#{CGI.escape(path)}", params.to_json
130
130
  handle_request_error(1, 'GitLab', response.status, { action: 'Create file in repo', id: "#{project.id}" }) unless response.status == 200
131
131
  Oj.load(response.body)
132
132
  end
@@ -159,7 +159,7 @@ module Readiness
159
159
  # pp file['path']
160
160
  # # => "spec/test.file"
161
161
  def self.update_file!(client, project, path, params)
162
- response = client.connection.put "projects/#{project.id}/repository/files/#{CGI.escape(path)}", to_clean_json(params)
162
+ response = client.connection.put "projects/#{project.id}/repository/files/#{CGI.escape(path)}", params.to_json
163
163
  handle_request_error(1, 'GitLab', response.status, { action: 'Update file in repo', id: "#{project.id}" }) unless response.status == 200
164
164
  Oj.load(response.body)
165
165
  end
@@ -190,7 +190,7 @@ module Readiness
190
190
  # pp file
191
191
  # # => true
192
192
  def self.delete_file!(client, project, path, params)
193
- response = client.connection.delete "projects/#{project.id}/repository/files/#{CGI.escape(path)}", to_clean_json(params)
193
+ response = client.connection.delete "projects/#{project.id}/repository/files/#{CGI.escape(path)}", params.to_json
194
194
  handle_request_error(1, 'GitLab', response.status, { action: 'Delete file in repo', id: "#{project.id}" }) unless response.status == 204
195
195
  true
196
196
  end
@@ -227,7 +227,7 @@ module Readiness
227
227
  # pp commit['title']
228
228
  # # => "Notify via slack for failed pipelines"
229
229
  def self.create_commit!(client, project, params)
230
- response = client.connection.post "projects/#{project.id}/repository/commits", to_clean_json(params)
230
+ response = client.connection.post "projects/#{project.id}/repository/commits", params.to_json
231
231
  handle_request_error(1, 'GitLab', response.status, { action: 'Create commit', id: "#{project.id}" }) unless response.status == 200
232
232
  Oj.load(response.body)
233
233
  end
@@ -258,7 +258,7 @@ module Readiness
258
258
  # pp update['parent_ids']
259
259
  # # => ["ae1d9fb46aa2b07ee9836d49862ec4e2c46fbbba"]
260
260
  def self.update_submodule!(client, project, path, params)
261
- response = clinet.connection.put "projects/#{project.id}/repository/submodules/#{CGI.escape(path)}", to_clean_json(params)
261
+ response = clinet.connection.put "projects/#{project.id}/repository/submodules/#{CGI.escape(path)}", params.to_json
262
262
  handle_request_error(1, 'GitLab', response.status, { action: 'Update submodule in repo', id: "#{project.id}" }) unless response.status == 200
263
263
  Oj.load(response.body)
264
264
  end
@@ -248,7 +248,7 @@ module Readiness
248
248
  # @param user [Object] An instance of {Readiness::GitLab::Users}
249
249
  # @param filters [Array] An array of filter Strings to use. Should be in the format of key=value
250
250
  # @return [Array]
251
- # @see https://docs.gitlab.com/ee/api/projects.html#list-user-projects GitLab API > Projects > List user projects
251
+ # @see https://docs.gitlab.com/ee/api/projects.html#list-a-users-projects GitLab API > Projects > List user projects
252
252
  # @example
253
253
  # require 'support_readiness'
254
254
  # config = Readiness::GitLab::Configuration.new
@@ -383,7 +383,7 @@ module Readiness
383
383
  # pp token['token']
384
384
  # # => "s3cr3t1"
385
385
  def self.create_token!(client, user, params)
386
- response = client.connection.post "users/#{user.id}/personal_access_tokens", to_clean_json(params)
386
+ response = client.connection.post "users/#{user.id}/personal_access_tokens", params.to_json
387
387
  handle_request_error(1, 'GitLab', response.status, { action: 'Create PAT for a user', id: "#{user.id}" }) unless response.status == 200
388
388
  Oj.load(response.body)
389
389
  end
@@ -54,6 +54,8 @@ module Readiness
54
54
  # # => bar
55
55
  def self.get(client, key)
56
56
  Marshal.load client.connection.get(key)
57
+ rescue TypeError
58
+ nil
57
59
  end
58
60
 
59
61
  ##
@@ -69,7 +71,7 @@ module Readiness
69
71
  # redis = Readiness::Redis.new('domain.com', 6379, 'p@assw0rd!')
70
72
  # Readiness::Redis.set(redis, 'foo', 'bar2')
71
73
  def self.set(client, key, value)
72
- client.connection.set(key, Marhsal.dump(value))
74
+ client.connection.set(key, Marshal.dump(value))
73
75
  end
74
76
 
75
77
  ##
@@ -79,12 +81,16 @@ module Readiness
79
81
  # @since 1.0.0
80
82
  # @param client [Object] A {Readiness::Redis} instance
81
83
  # @param key [String] The Redis key to delete
84
+ # @return [Boolean]
82
85
  # @example
83
86
  # require 'support_readiness'
84
87
  # redis = Readiness::Redis.new('domain.com', 6379, 'p@assw0rd!')
85
88
  # Readiness::Redis.del(redis, 'foo')
86
89
  def self.del(client, key)
87
- client.connection.del(key)
90
+ response = client.connection.del(key)
91
+ return true if response == 1
92
+
93
+ false
88
94
  end
89
95
  end
90
96
  end
@@ -141,14 +141,16 @@ module Readiness
141
141
  # client = Readiness::Zendesk::Client.new(config)
142
142
  # article = Readiness::Zendesk::Articles.new
143
143
  # article.title = 'Taking photos in low light'
144
- # artricle.body = 'Use a tripod'
144
+ # article.body = 'Use a tripod'
145
145
  # article.section_id = 123
146
146
  # article.locale = 'en-us'
147
+ # article.user_segment_id = nil
148
+ # article.permission_group_id = 12528735509276
147
149
  # create = Readiness::Zendesk::Articles.create!(client, article)
148
150
  # pp create.id
149
151
  # # => 35468
150
152
  def self.create!(client, article)
151
- response = client.connection.post "help_center/sections/#{article.section_id}/articles", to_clean_json_with_key(article, 'article')
153
+ response = client.connection.post "help_center/sections/#{article.section_id}/articles", to_nearly_clean_json_with_key(article, 'article', ['user_segment_id'])
152
154
  handle_request_error(1, 'Zendesk', response.status, { action: 'Create article', message: Oj.load(response.body)}) unless response.status == 201
153
155
  Articles.new(Oj.load(response.body)['article'])
154
156
  end
@@ -175,7 +177,7 @@ module Readiness
175
177
  # pp update.body
176
178
  # # => "Use a tripod and low light approved camera"
177
179
  def self.update!(client, article)
178
- response = client.connection.put "help_center/sections/#{article.section_id}/articles", to_clean_json_with_key(article, 'article')
180
+ response = client.connection.put "help_center/articles/#{article.id}", to_nearly_clean_json_with_key(article, 'article', ['user_segment_id'])
179
181
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update article', id: article.id, message: Oj.load(response.body)}) unless response.status == 200
180
182
  Articles.new(Oj.load(response.body)['article'])
181
183
  end
@@ -201,7 +203,7 @@ module Readiness
201
203
  # pp archive
202
204
  # # => true
203
205
  def self.archive!(client, article)
204
- response = client.connection.delete "help_center/articles/#{article_id}"
206
+ response = client.connection.delete "help_center/articles/#{article.id}"
205
207
  handle_request_error(1, 'Zendesk', response.status, { action: 'Archive article', id: article.id, message: Oj.load(response.body)}) unless response.status == 204
206
208
  true
207
209
  end
@@ -137,21 +137,21 @@ module Readiness
137
137
  # automation.conditions = {
138
138
  # all: [
139
139
  # {
140
- # field: 'status'
141
- # operator: 'is'
140
+ # field: 'status',
141
+ # operator: 'is',
142
142
  # value: 'solved'
143
143
  # },
144
144
  # {
145
- # field: 'priority'
146
- # operator: 'is_not'
145
+ # field: 'priority',
146
+ # operator: 'is_not',
147
147
  # value: 'low'
148
148
  # }
149
- # ]
149
+ # ],
150
150
  # any: []
151
151
  # }
152
152
  # automation.actions = [
153
153
  # {
154
- # field: 'priority'
154
+ # field: 'priority',
155
155
  # value: 'low'
156
156
  # }
157
157
  # ]
@@ -213,7 +213,7 @@ module Readiness
213
213
  end
214
214
 
215
215
  ##
216
- # Updates multiple automations via a batch job
216
+ # Updates multiple automations. Can only update position and active values.
217
217
  #
218
218
  # @author Jason Colyer
219
219
  # @since 1.0.0
@@ -238,11 +238,11 @@ module Readiness
238
238
  # updated = Readiness::Zendesk::Automations.update_many!(client, automation)
239
239
  # pp updated.first.position
240
240
  # # => 2
241
- def self.update_many(client, automations)
241
+ def self.update_many!(client, automations)
242
242
  data = { automations: automations.map { |t| to_hash(t).compact } }.to_json
243
243
  response = client.connection.put('automations/update_many', data)
244
244
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update many automations', message: Oj.load(response.body)}) unless response.status == 200
245
- Oj.load(response.body).map { |a| Automations.new(a) }
245
+ Oj.load(response.body)['automations'].map { |a| Automations.new(a) }
246
246
  end
247
247
 
248
248
  ##
@@ -287,11 +287,7 @@ module Readiness
287
287
  # config.token = 'test123abc'
288
288
  # config.url = 'https://example.zendesk.com/api/v2'
289
289
  # client = Readiness::Zendesk::Client.new(config)
290
- # automation1 = Readiness::Zendesk::Automations.find!(client, 1)
291
- # automation2 = Readiness::Zendesk::Automations.find!(client, 2)
292
- # automation3 = Readiness::Zendesk::Automations.find!(client, 3)
293
- # automations = [automation1, automation2, automation3]
294
- # deleted = Readiness::Zendesk::Automations.delete_many!(client, automation)
290
+ # deleted = Readiness::Zendesk::Automations.delete_many!(client, [1, 7, 19])
295
291
  # pp deleted
296
292
  # # => true
297
293
  def self.delete_many!(client, aids)
@@ -194,7 +194,7 @@ module Readiness
194
194
  # create = Readiness::Zendesk::GroupMemberships.create_many!(client, memberships)
195
195
  # pp create.id
196
196
  # # => "82de0b044094f0c67893ac9fe64f1a99"
197
- def self.create_many(client, memberships)
197
+ def self.create_many!(client, memberships)
198
198
  data = { group_memberships: memberships.map { |t| to_hash(t).compact } }.to_json
199
199
  response = client.connection.post('group_memberships/create_many', data)
200
200
  handle_request_error(1, 'Zendesk', response.status, { action: 'Create many group memberships', message: Oj.load(response.body)}) unless response.status == 200
@@ -237,7 +237,6 @@ module Readiness
237
237
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
238
238
  body = Oj.load(response.body)
239
239
  array += body['group_memberships']
240
- break if limit != 0 && array.count >= (limit * 100)
241
240
  break unless body['meta']['has_more']
242
241
 
243
242
  opts = body['links'] ['next'].split('?').last
@@ -173,7 +173,7 @@ module Readiness
173
173
  end
174
174
 
175
175
  ##
176
- # Updates multiple macros via a batch job
176
+ # Updates multiple macros. Can only update position and active values.
177
177
  #
178
178
  # @author Jason Colyer
179
179
  # @since 1.0.0
@@ -230,7 +230,7 @@ module Readiness
230
230
  end
231
231
 
232
232
  ##
233
- # Deletes multiple macros via a batch job
233
+ # Deletes multiple macros
234
234
  #
235
235
  # @author Jason Colyer
236
236
  # @since 1.0.0
@@ -139,7 +139,7 @@ module Readiness
139
139
  # field.type = 'text'
140
140
  # field.title = 'Support desc'
141
141
  # field.description = 'This field describes the support plan this organization has'
142
- # field.position: 0
142
+ # field.position = 0
143
143
  # field.active = true
144
144
  # field.key = 'support_description'
145
145
  # create = Readiness::Zendesk::OrganizationFields.create!(client, field)
@@ -173,7 +173,7 @@ module Readiness
173
173
  # pp create.title
174
174
  # # => "Support description"
175
175
  def self.update!(client, field)
176
- response = client.connection.put "organization_fields/#{field.id}", to_clean_json_with_key(field, 'ticket_field')
176
+ response = client.connection.put "organization_fields/#{field.id}", to_clean_json_with_key(field, 'organization_field')
177
177
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update organization field', message: Oj.load(response.body)}) unless response.status == 200
178
178
  OrganizationFields.new(Oj.load(response.body)['organization_field'])
179
179
  end
@@ -244,10 +244,10 @@ module Readiness
244
244
  # config.token = 'test123abc'
245
245
  # config.url = 'https://example.zendesk.com/api/v2'
246
246
  # client = Readiness::Zendesk::Client.new(config)
247
- # deletes = Readiness::Zendesk::OrganizationMemberships.delete!(client, [461, 462])
247
+ # deletes = Readiness::Zendesk::OrganizationMemberships.delete_many!(client, [461, 462])
248
248
  # pp deletes.id
249
249
  # # => "82de0b044094f0c67893ac9fe64f1a99"
250
- def self.delete_many(client, mids)
250
+ def self.delete_many!(client, mids)
251
251
  response = client.connection.delete("organization_memberships/destroy_many?ids=#{mids.join(',')}")
252
252
  handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many organization memberships', message: Oj.load(response.body)}) unless response.status == 200
253
253
  JobStatuses.new(Oj.load(response.body)['job_status'])
@@ -503,7 +503,6 @@ module Readiness
503
503
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
504
504
  body = Oj.load(response.body)
505
505
  array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
506
- break if limit != 0 && array.count >= (limit * 100)
507
506
  break unless body['meta']['has_more']
508
507
 
509
508
  opts = body['links'] ['next'].split('?').last
@@ -62,7 +62,7 @@ module Readiness
62
62
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
63
63
  # @param rid [Integer] The Custom Role ID to find
64
64
  # @return [Hash]
65
- # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
65
+ # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
66
66
  # @example
67
67
  # require 'support_readiness'
68
68
  # config = Readiness::Zendesk::Configuration.new
@@ -89,7 +89,7 @@ module Readiness
89
89
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
90
90
  # @param rid [Integer] The Custom Role ID to find
91
91
  # @return [Object] An instance of {Readiness::Zendesk::Roles}
92
- # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
92
+ # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#show-custom-role Zendesk API > Custom Roles > Show Custom Role
93
93
  # @example
94
94
  # require 'support_readiness'
95
95
  # config = Readiness::Zendesk::Configuration.new
@@ -114,7 +114,7 @@ module Readiness
114
114
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
115
115
  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
116
116
  # @return [Object] An instance of {Readiness::Zendesk::Roles}
117
- # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#create-custom-role Zendesk API > Custom Roles > Create Custom Role
117
+ # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#create-custom-role Zendesk API > Custom Roles > Create Custom Role
118
118
  # @example
119
119
  # require 'support_readiness'
120
120
  # config = Readiness::Zendesk::Configuration.new
@@ -145,7 +145,7 @@ module Readiness
145
145
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
146
146
  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
147
147
  # @return [Object] An instance of {Readiness::Zendesk::Roles}
148
- # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#update-custom-role Zendesk API > Custom Roles > Update Custom Role
148
+ # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#update-custom-role Zendesk API > Custom Roles > Update Custom Role
149
149
  # @example
150
150
  # require 'support_readiness'
151
151
  # config = Readiness::Zendesk::Configuration.new
@@ -172,7 +172,7 @@ module Readiness
172
172
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
173
173
  # @param role [Object] An instance of {Readiness::Zendesk::Roles}
174
174
  # @return [Boolean]
175
- # @see https:/developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#delete-custom-role Zendesk API > Custom Roles > Delete Custom Role
175
+ # @see https://developer.zendesk.com/api-reference/ticketing/account-configuration/custom_roles/#delete-custom-role Zendesk API > Custom Roles > Delete Custom Role
176
176
  # @example
177
177
  # require 'support_readiness'
178
178
  # config = Readiness::Zendesk::Configuration.new
@@ -145,7 +145,7 @@ module Readiness
145
145
  # pp create.id
146
146
  # # => 36
147
147
  def self.create!(client, policy)
148
- response = client.connection.post 'slas/policies', to_clean_json_with_key(policyt, 'sla_policy')
148
+ response = client.connection.post 'slas/policies', to_clean_json_with_key(policy, 'sla_policy')
149
149
  handle_request_error(1, 'Zendesk', response.status, { action: 'Create SLA Policy', message: Oj.load(response.body)}) unless response.status == 201
150
150
  SLAs.new(Oj.load(response.body)['sla_policy'])
151
151
  end
@@ -280,7 +280,7 @@ module Readiness
280
280
  # reorder = Readiness::Zendesk::TicketForms.reorder!(client, [2, 23, 46, 50])
281
281
  # pp reorder.count
282
282
  # # => 4
283
- def self.reorder(client, fids)
283
+ def self.reorder!(client, fids)
284
284
  response = client.connection.put 'ticket_forms/reorder', { ticket_form_ids: fids }.to_json
285
285
  handle_request_error(1, 'Zendesk', response.status, { action: 'Clone a ticket form', id: form.id, message: Oj.load(response.body)}) unless response.status == 200
286
286
  Oj.load(response.body)['ticket_form'].map { |f| TicketForms.new(f) }
@@ -108,7 +108,7 @@ module Readiness
108
108
  end
109
109
 
110
110
  ##
111
- # Lists the CCs on a ticket
111
+ # Lists the CCs on a ticket. If your system is not using followers, you need to use {collaborators}
112
112
  #
113
113
  # @author Jason Colyer
114
114
  # @since 1.0.0
@@ -492,7 +492,7 @@ module Readiness
492
492
  def self.delete_permanently!(client, tid)
493
493
  response = client.connection.delete "deleted_tickets/#{tid}"
494
494
  handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
495
- JobStatuses.new(Oj.load(response.body['job_status']))
495
+ JobStatuses.new(Oj.load(response.body)['job_status'])
496
496
  end
497
497
 
498
498
  ##
@@ -523,7 +523,6 @@ module Readiness
523
523
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
524
524
  body = Oj.load(response.body)
525
525
  array += body['tickets'].map { |t| Tickets.new(t) }
526
- break if limit != 0 && array.count >= (limit * 100)
527
526
  break unless body['meta']['has_more']
528
527
 
529
528
  opts = body['links'] ['next'].split('?').last
@@ -557,7 +556,6 @@ module Readiness
557
556
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
558
557
  body = Oj.load(response.body)
559
558
  array += body['tickets'].map { |t| Tickets.new(t) }
560
- break if limit != 0 && array.count >= (limit * 100)
561
559
  break unless body['meta']['has_more']
562
560
 
563
561
  opts = body['links'] ['next'].split('?').last
@@ -742,7 +740,6 @@ module Readiness
742
740
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
743
741
  body = Oj.load(response.body)
744
742
  array += body['suspended_tickets']
745
- break if limit != 0 && array.count >= (limit * 100)
746
743
  break unless body['meta']['has_more']
747
744
 
748
745
  opts = body['links'] ['next'].split('?').last
@@ -184,7 +184,7 @@ module Readiness
184
184
  end
185
185
 
186
186
  ##
187
- # Updates multiple triggers via a batch job
187
+ # Updates multiple triggers
188
188
  #
189
189
  # @author Jason Colyer
190
190
  # @since 1.0.0
@@ -211,7 +211,7 @@ module Readiness
211
211
  data = { triggers: triggers.map { |t| to_hash(t).compact } }.to_json
212
212
  response = client.connection.put('triggers/update_many', data)
213
213
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update many triggers', message: Oj.load(response.body)}) unless response.status == 200
214
- Oj.load(response.body)['trigger'].map { |t| Triggers.new(t) }
214
+ Oj.load(response.body)['triggers'].map { |t| Triggers.new(t) }
215
215
  end
216
216
 
217
217
  ##
@@ -256,10 +256,10 @@ module Readiness
256
256
  # config.token = 'test123abc'
257
257
  # config.url = 'https://example.zendesk.com/api/v2'
258
258
  # client = Readiness::Zendesk::Client.new(config)
259
- # deletes = Readiness::Zendesk::Triggers.delete!(client, [25, 23, 27, 22])
259
+ # deletes = Readiness::Zendesk::Triggers.delete_many!(client, [25, 23, 27, 22])
260
260
  # pp deletes
261
261
  # # => true
262
- def self.delete_many(client, tids)
262
+ def self.delete_many!(client, tids)
263
263
  response = client.connection.delete("triggers/destroy_many?ids=#{tids.join(',')}")
264
264
  handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many triggers', message: Oj.load(response.body)}) unless response.status == 204
265
265
  true
@@ -383,8 +383,8 @@ module Readiness
383
383
  # # => 189304711533
384
384
  def self.delete_permanently!(client, uid)
385
385
  response = client.connection.delete "deleted_users/#{uid}"
386
- handle_request_error(1, 'Zendesk', response.status) unless response.status == 200
387
- Oj.load(response.body['deleted_user'])
386
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete user permanently', id: uid, message: Oj.load(response.body)}) unless response.status == 200
387
+ Oj.load(response.body)['deleted_user']
388
388
  end
389
389
 
390
390
  ##
@@ -466,7 +466,7 @@ module Readiness
466
466
  # pp deletes['value']
467
467
  # # => 13
468
468
  def self.deleted_count(client)
469
- response = client.connection.get("deleted_users/count?#{opts}")
469
+ response = client.connection.get('deleted_users/count')
470
470
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
471
471
  Oj.load(response.body)['count']
472
472
  end
@@ -636,6 +636,8 @@ module Readiness
636
636
  # pp tickets.count
637
637
  # # => 2
638
638
  def self.assigned_tickets(client, user)
639
+ return 0 if user.role == 'end-user'
640
+
639
641
  array = []
640
642
  opts = "page[size]=100"
641
643
  loop do
@@ -736,7 +738,7 @@ module Readiness
736
738
  # # => "82de0b044094f0c67893ac9fe64f1a99"
737
739
  def self.create_or_update_many!(client, users)
738
740
  data = { users: users.map { |u| to_hash(u).compact } }.to_json
739
- response = client.connection.post('users/create_or_update_many', data)
741
+ response = client.connection.put('users/create_or_update_many', data)
740
742
  handle_request_error(1, 'Zendesk', response.status, { action: 'Create or update many users', message: Oj.load(response.body)}) unless response.status == 200
741
743
  JobStatuses.new(Oj.load(response.body)['job_status'])
742
744
  end
@@ -821,7 +823,7 @@ module Readiness
821
823
  array = []
822
824
  opts = "page[size]=100"
823
825
  loop do
824
- response = client.connection.get("user/#{user.id}/organization_memberships?#{opts}")
826
+ response = client.connection.get("users/#{user.id}/organization_memberships?#{opts}")
825
827
  handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
826
828
  body = Oj.load(response.body)
827
829
  array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
@@ -840,9 +842,9 @@ module Readiness
840
842
  # @since 1.0.0
841
843
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
842
844
  # @param user [Object] An instance of {Readiness::Zendesk::Users}
843
- # @param organization [Object] An instance of {Readiness::Zendesk::Organizations}
845
+ # @param membership [Object] An instance of {Readiness::Zendesk::OrganizationMemberships}
844
846
  # @return [Array]
845
- # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#set-organization-as-default Zendesk API > Organization Memberships > Set Organization as Default
847
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#set-membership-as-default Zendesk API > Organization Memberships > Set Membership as Default
846
848
  # @example
847
849
  # require 'support_readiness'
848
850
  # config = Readiness::Zendesk::Configuration.new
@@ -851,12 +853,12 @@ module Readiness
851
853
  # config.url = 'https://example.zendesk.com/api/v2'
852
854
  # client = Readiness::Zendesk::Client.new(config)
853
855
  # user = Readiness::Zendesk::Users.find!(client, 123)
854
- # org = Readiness::Zendesk::Organizations.find!(client, 456)
855
- # member = Readiness::Zendesk::Users.set_default_organization!(client, user, org)
856
+ # membership = Readiness::Zendesk::Users.organization_memberships(client, user).last
857
+ # member = Readiness::Zendesk::Users.set_default_organization!(client, user, membership)
856
858
  # pp member.id
857
859
  # # => 4
858
- def self.set_default_organization!(client, user, organization)
859
- response = client.connection.put("users/#{user.id}/organizations/#{organization.id}/make_default")
860
+ def self.set_default_organization!(client, user, membership)
861
+ response = client.connection.put("users/#{user.id}/organization_memberships/#{membership.id}/make_default")
860
862
  handle_request_error(1, 'Zendesk', response.status, { action: 'Set org as default', message: Oj.load(response.body)}) unless response.status == 200
861
863
  OrganizationMemberships.new(Oj.load(response.body)['organization_membership'])
862
864
  end
@@ -894,7 +896,7 @@ module Readiness
894
896
  # @since 1.0.0
895
897
  # @param client [Object] An instance of {Readiness::Zendesk::Client}
896
898
  # @param user [Object] An instance of {Readiness::Zendesk::Users}
897
- # @param group [Object] An instance of {Readiness::Zendesk::Group}
899
+ # @param membership [Object] An instance of {Readiness::Zendesk::GroupMemberships}
898
900
  # @return [Array]
899
901
  # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#set-membership-as-default Zendesk API > Group Memberships > Set Membership as Default
900
902
  # @example
@@ -905,12 +907,12 @@ module Readiness
905
907
  # config.url = 'https://example.zendesk.com/api/v2'
906
908
  # client = Readiness::Zendesk::Client.new(config)
907
909
  # user = Readiness::Zendesk::Users.find!(client, 123)
908
- # group = Readiness::Zendesk::Groups.find!(client, 456)
909
- # member = Readiness::Zendesk::Users.set_default_group!(client, user, group)
910
+ # membership = Readiness::Zendesk::Users.group_memberships(client, user).last
911
+ # member = Readiness::Zendesk::Users.set_default_group!(client, user, membership)
910
912
  # pp member.id
911
913
  # # => 4
912
- def self.set_default_group!(client, user, group)
913
- response = client.connection.put("users/#{user.id}/group_memberships/#{group.id}/make_default")
914
+ def self.set_default_group!(client, user, membership)
915
+ response = client.connection.put("users/#{user.id}/group_memberships/#{membership.id}/make_default")
914
916
  handle_request_error(1, 'Zendesk', response.status, { action: 'Set group as default', message: Oj.load(response.body)}) unless response.status == 200
915
917
  GroupMemberships.new(Oj.load(response.body)['group_memberships'])
916
918
  end
@@ -163,39 +163,36 @@ module Readiness
163
163
  # view.title = "Kelly's tickets"
164
164
  # view.description = 'Tickets that are assigned to Kelly'
165
165
  # view.active = true
166
- # view.position: 3
167
- # view.restriction: { type: 'User', id: '213977756' }
166
+ # view.position = 3
168
167
  # view.conditions = {
169
- # all: [
170
- # { field: 'status', operator: 'less_than', value: 'solved' },
171
- # { field: 'group_id', operator: 'is', value: '24000932' },
172
- # { field: 'custom_fields_360011872073', operator: 'is', value: 'Canada' }
168
+ # "all" => [
169
+ # { "field" => 'status', "operator" => 'less_than', "value" => 'solved' }
173
170
  # ],
174
- # any: []
171
+ # "any" => []
175
172
  # }
176
173
  # view.execution = {
177
- # columns: [
178
- # { id: 'status', title: 'Status', filterable: true, sortable: true},
179
- # { id: 'requester', title: 'Requester', filterable: true, sortable: true},
180
- # { id: 'assignee', title: 'Assignee', filterable: true, sortable: true},
181
- # ]
182
- # group_by: 'assignee',
183
- # group_order: 'desc',
184
- # sort_by: 'status',
185
- # sort_order: 'desc',
186
- # group: {
187
- # id: 'assignee',
188
- # title: 'Assignee',
189
- # filterable: true,
190
- # sortable: true,
191
- # order: 'desc'
192
- # }
193
- # sort: {
194
- # id: 'status',
195
- # title: 'Status',
196
- # filterable: true,
197
- # sortable: true,
198
- # order: 'desc'
174
+ # "columns" => [
175
+ # { "id" => 'status', "title" => 'Status', "filterable" => true, "sortable" => true},
176
+ # { "id" => 'requester', "title" => 'Requester', "filterable" => true, "sortable" => true},
177
+ # { "id" => 'assignee', "title" => 'Assignee', "filterable" => true, "sortable" => true},
178
+ # ],
179
+ # "group_by" => 'assignee',
180
+ # "group_order" => 'desc',
181
+ # "sort_by" => 'status',
182
+ # "sort_order" => 'desc',
183
+ # "group" => {
184
+ # "id" => 'assignee',
185
+ # "title" => 'Assignee',
186
+ # "filterable" => true,
187
+ # "sortable" => true,
188
+ # "order" => 'desc'
189
+ # },
190
+ # "sort" => {
191
+ # "id" => 'status',
192
+ # "title" => 'Status',
193
+ # "filterable" => true,
194
+ # "sortable" => true,
195
+ # "order" => 'desc'
199
196
  # }
200
197
  # }
201
198
  # create = Readiness::Zendesk::Views.create!(client, view)
@@ -259,7 +256,7 @@ module Readiness
259
256
  # pp updates.map { |v| v.title }
260
257
  # # => ["Canada tickets", "Mexico tickets"]
261
258
  def self.update_many!(client, views)
262
- data = { views: views.map { |v| create_or_update_object(view) } }.to_json
259
+ data = { views: views.map { |v| create_or_update_object(v) } }.to_json
263
260
  response = client.connection.put('views/update_many', data)
264
261
  handle_request_error(1, 'Zendesk', response.status, { action: 'Update many views', message: Oj.load(response.body)}) unless response.status == 200
265
262
  JobStatuses.new(Oj.load(response.body)['job_status'])
@@ -292,7 +289,7 @@ module Readiness
292
289
  end
293
290
 
294
291
  ##
295
- # Deletes multiple views via a batch job
292
+ # Deletes multiple views
296
293
  #
297
294
  # @author Jason Colyer
298
295
  # @since 1.0.0
@@ -310,7 +307,7 @@ module Readiness
310
307
  # deletes = Readiness::Zendesk::Views.find!(client, [9873858, 9873843])
311
308
  # pp deletes
312
309
  # # => true
313
- def self.delete_many(client, vids)
310
+ def self.delete_many!(client, vids)
314
311
  response = client.connection.delete("views/destroy_many?ids=#{vids.join(',')}")
315
312
  handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many views', message: Oj.load(response.body)}) unless response.status == 204
316
313
  true
@@ -345,7 +342,7 @@ module Readiness
345
342
  output: converted['output']
346
343
  }
347
344
  }.compact.to_json
348
- response = client.connection.post 'views/preview', data
345
+ response = client.connection.post 'views/preview', { view: data }.to_json
349
346
  handle_request_error(1, 'Zendesk', response.status, { action: 'Preview a view', message: Oj.load(response.body)}) unless response.status == 200
350
347
  Oj.load(response.body)
351
348
  end
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.8
4
+ version: 1.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Colyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-26 00:00:00.000000000 Z
11
+ date: 2024-09-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport