gitlab_support_readiness 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/lib/support_readiness/client.rb +108 -0
  3. data/lib/support_readiness/gitlab/client.rb +64 -0
  4. data/lib/support_readiness/gitlab/configuration.rb +46 -0
  5. data/lib/support_readiness/gitlab/groups.rb +180 -0
  6. data/lib/support_readiness/gitlab/issues.rb +410 -0
  7. data/lib/support_readiness/gitlab/namespaces.rb +190 -0
  8. data/lib/support_readiness/gitlab/projects.rb +510 -0
  9. data/lib/support_readiness/gitlab/repositories.rb +267 -0
  10. data/lib/support_readiness/gitlab/users.rb +488 -0
  11. data/lib/support_readiness/gitlab.rb +19 -0
  12. data/lib/support_readiness/pagerduty/client.rb +66 -0
  13. data/lib/support_readiness/pagerduty/configuration.rb +43 -0
  14. data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
  15. data/lib/support_readiness/pagerduty/schedules.rb +223 -0
  16. data/lib/support_readiness/pagerduty/services.rb +132 -0
  17. data/lib/support_readiness/pagerduty.rb +16 -0
  18. data/lib/support_readiness/redis.rb +90 -0
  19. data/lib/support_readiness/zendesk/articles.rb +210 -0
  20. data/lib/support_readiness/zendesk/automations.rb +304 -0
  21. data/lib/support_readiness/zendesk/client.rb +84 -0
  22. data/lib/support_readiness/zendesk/configuration.rb +49 -0
  23. data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
  24. data/lib/support_readiness/zendesk/groups.rb +249 -0
  25. data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
  26. data/lib/support_readiness/zendesk/macros.rb +267 -0
  27. data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
  28. data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
  29. data/lib/support_readiness/zendesk/organizations.rb +515 -0
  30. data/lib/support_readiness/zendesk/roles.rb +194 -0
  31. data/lib/support_readiness/zendesk/search.rb +159 -0
  32. data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
  33. data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
  34. data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
  35. data/lib/support_readiness/zendesk/tickets.rb +854 -0
  36. data/lib/support_readiness/zendesk/triggers.rb +269 -0
  37. data/lib/support_readiness/zendesk/users.rb +946 -0
  38. data/lib/support_readiness/zendesk/views.rb +469 -0
  39. data/lib/support_readiness/zendesk.rb +31 -0
  40. data/lib/support_readiness.rb +29 -0
  41. metadata +215 -0
@@ -0,0 +1,256 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Zendesk
6
+ module Zendesk
7
+ ##
8
+ # Defines the class GroupMemberships within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ class GroupMemberships < Readiness::Client
13
+ attr_accessor :id, :default, :group_id, :user_id
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::GroupMemberships} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.0
20
+ # @param object [Object] An instance of {Readiness::Zendesk::GroupMemberships}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::GroupMemberships.new
24
+ def initialize(object = {})
25
+ @id = object['id']
26
+ @default = object['default']
27
+ @group_id = object['group_id']
28
+ @user_id = object['user_id']
29
+ end
30
+
31
+ ##
32
+ # Lists the first 100 group memberships
33
+ #
34
+ # @author Jason Colyer
35
+ # @since 1.0.0
36
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
37
+ # @return [Array]
38
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships Zendesk API > Group Memberships > List Memberships
39
+ # @example
40
+ # require 'support_readiness'
41
+ # config = Readiness::Zendesk::Configuration.new
42
+ # config.username = 'alice@example.com'
43
+ # config.token = 'test123abc'
44
+ # config.url = 'https://example.zendesk.com/api/v2'
45
+ # client = Readiness::Zendesk::Client.new(config)
46
+ # memberships = Readiness::Zendesk::GroupMemberships.list(client)
47
+ # pp memberships.first.id
48
+ # # => 4
49
+ def self.list(client)
50
+ response = client.connection.get("group_memberships?page[size]=100")
51
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
52
+ Oj.load(response.body)['group_memberships'].map { |m| GroupMemberships.new(m) }
53
+ end
54
+
55
+ ##
56
+ # Lists many group memberships. Does not stop until it ends or the page limit is hit.
57
+ # This method can take a long time to run depending on the parameters used.
58
+ #
59
+ # @author Jason Colyer
60
+ # @since 1.0.0
61
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
62
+ # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
63
+ # @return [Array]
64
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships Zendesk API > Group Memberships > List Memberships
65
+ # @example
66
+ # require 'support_readiness'
67
+ # config = Readiness::Zendesk::Configuration.new
68
+ # config.username = 'alice@example.com'
69
+ # config.token = 'test123abc'
70
+ # config.url = 'https://example.zendesk.com/api/v2'
71
+ # client = Readiness::Zendesk::Client.new(config)
72
+ # memberships = Readiness::Zendesk::GroupMemberships.list_many(client)
73
+ # pp memberships.first.id
74
+ # # => 4
75
+ def self.list_many(client, limit = 0)
76
+ array = []
77
+ opts = "page[size]=100"
78
+ loop do
79
+ response = client.connection.get("group_memberships?#{opts}")
80
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
81
+ body = Oj.load(response.body)
82
+ array += body['group_memberships'].map { |o| GroupMemberships.new(o) }
83
+ break if limit != 0 && array.count >= (limit * 100)
84
+ break unless body['meta']['has_more']
85
+
86
+ opts = body['links'] ['next'].split('?').last
87
+ end
88
+ array
89
+ end
90
+
91
+ ##
92
+ # Locates a group membership within Zendesk. This will not exit on error (except Authentication errors)
93
+ #
94
+ # @author Jason Colyer
95
+ # @since 1.0.0
96
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
97
+ # @param gid [Integer] The group membership ID to find
98
+ # @return [Hash]
99
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#show-membership Zendesk API > Group Memberships > Show Membership
100
+ # @example
101
+ # require 'support_readiness'
102
+ # config = Readiness::Zendesk::Configuration.new
103
+ # config.username = 'alice@example.com'
104
+ # config.token = 'test123abc'
105
+ # config.url = 'https://example.zendesk.com/api/v2'
106
+ # client = Readiness::Zendesk::Client.new(config)
107
+ # membership = Readiness::Zendesk::GroupMemberships.find(client, 4)
108
+ # pp membership.user_id
109
+ # # => 29
110
+ def self.find(client, gid)
111
+ response = client.connection.get("group_memberships/#{gid}")
112
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: gid }) unless response.status == 200
113
+ return GroupMemberships.new(Oj.load(response.body)['group_membership']) if response.status == 200
114
+
115
+ Oj.load(response.body)
116
+ end
117
+
118
+ ##
119
+ # Locates a group membership within Zendesk. This will exit on error
120
+ #
121
+ # @author Jason Colyer
122
+ # @since 1.0.0
123
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
124
+ # @param gid [Integer] The group membership ID to find
125
+ # @return [Hash]
126
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#show-membership Zendesk API > Group Memberships > Show Membership
127
+ # @example
128
+ # require 'support_readiness'
129
+ # config = Readiness::Zendesk::Configuration.new
130
+ # config.username = 'alice@example.com'
131
+ # config.token = 'test123abc'
132
+ # config.url = 'https://example.zendesk.com/api/v2'
133
+ # client = Readiness::Zendesk::Client.new(config)
134
+ # membership = Readiness::Zendesk::GroupMemberships.find!(client, 4)
135
+ # pp membership.user_id
136
+ # # => 29
137
+ def self.find!(client, gid)
138
+ response = client.connection.get("group_memberships/#{gid}")
139
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find group membership', id: gid }) unless response.status == 200
140
+ GroupMemberships.new(Oj.load(response.body)['group_membership'])
141
+ end
142
+
143
+ ##
144
+ # Creates an organization membership. Will exit if unsuccessful
145
+ #
146
+ # @author Jason Colyer
147
+ # @since 1.0.0
148
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
149
+ # @param membership [Object] An instance of {Readiness::Zendesk::GroupMemberships}
150
+ # @return [Object] An instance of {Readiness::Zendesk::GroupMemberships}
151
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#create-membership Zendesk API > Group Memberships > Create Membership
152
+ # @example
153
+ # require 'support_readiness'
154
+ # config = Readiness::Zendesk::Configuration.new
155
+ # config.username = 'alice@example.com'
156
+ # config.token = 'test123abc'
157
+ # config.url = 'https://example.zendesk.com/api/v2'
158
+ # client = Readiness::Zendesk::Client.new(config)
159
+ # membership = Readiness::Zendesk::GroupMemberships.new
160
+ # membership.user_id = 72
161
+ # membership.group_id: 88
162
+ # create = Readiness::Zendesk::GroupMemberships.create!(client, membership)
163
+ # pp create.id
164
+ # # => 461
165
+ def self.create!(client, membership)
166
+ response = client.connection.post 'group_memberships', to_clean_json_with_key(membership, 'group_membership')
167
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create group membership', message: Oj.load(response.body)}) unless response.status == 201
168
+ GroupMemberships.new(Oj.load(response.body)['group_membership'])
169
+ end
170
+
171
+ ##
172
+ # Creates multiple organization memberships via a batch job
173
+ #
174
+ # @author Jason Colyer
175
+ # @since 1.0.0
176
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
177
+ # @param memberships [Array] An array of {Readiness::Zendesk::GroupMemberships} instances
178
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
179
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#bulk-create-memberships Zendesk API > Group Memberships > Create Many Memberships
180
+ # @example
181
+ # require 'support_readiness'
182
+ # config = Readiness::Zendesk::Configuration.new
183
+ # config.username = 'alice@example.com'
184
+ # config.token = 'test123abc'
185
+ # config.url = 'https://example.zendesk.com/api/v2'
186
+ # client = Readiness::Zendesk::Client.new(config)
187
+ # membership1 = Readiness::Zendesk::GroupMemberships.new
188
+ # membership1.user_id = 72
189
+ # membership1.group_id: 88
190
+ # membership2 = Readiness::Zendesk::GroupMemberships.new
191
+ # membership2.user_id = 27
192
+ # membership2.group_id: 88
193
+ # memberships = [membership1, membership2]
194
+ # create = Readiness::Zendesk::GroupMemberships.create_many!(client, memberships)
195
+ # pp create.id
196
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
197
+ def self.create_many(client, memberships)
198
+ data = { group_memberships: memberships.map { |t| to_hash(t).compact } }.to_json
199
+ response = client.connection.post('group_memberships/create_many', data)
200
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create many group memberships', message: Oj.load(response.body)}) unless response.status == 200
201
+ JobStatuses.new(Oj.load(response.body)['job_status'])
202
+ end
203
+
204
+ ##
205
+ # Deletes an group membership. Will exit if unsuccessful
206
+ #
207
+ # @author Jason Colyer
208
+ # @since 1.0.0
209
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
210
+ # @param membership [Object] An instance of {Readiness::Zendesk::GroupMemberships}
211
+ # @return [Boolean]
212
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#delete-membership Zendesk API > Group Memberships > Delete Membership
213
+ # @example
214
+ # require 'support_readiness'
215
+ # config = Readiness::Zendesk::Configuration.new
216
+ # config.username = 'alice@example.com'
217
+ # config.token = 'test123abc'
218
+ # config.url = 'https://example.zendesk.com/api/v2'
219
+ # client = Readiness::Zendesk::Client.new(config)
220
+ # membership = Readiness::Zendesk::GroupMemberships.find!(client, 4)
221
+ # delete = Readiness::Zendesk::GroupMemberships.delete!(client, membership)
222
+ # pp delete
223
+ # # => true
224
+ def self.delete!(client, membership)
225
+ response = client.connection.delete "group_memberships/#{membership.id}"
226
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete group membership', message: Oj.load(response.body)}) unless response.status == 204
227
+ true
228
+ end
229
+
230
+ ##
231
+ # Deletes multiple organization memberships via a batch job
232
+ #
233
+ # @author Jason Colyer
234
+ # @since 1.0.0
235
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
236
+ # @param mids [Array] An array of group memberships IDs
237
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
238
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#bulk-delete-memberships Zendesk API > Group Memberships > Bulk Delete Memberships
239
+ # @example
240
+ # require 'support_readiness'
241
+ # config = Readiness::Zendesk::Configuration.new
242
+ # config.username = 'alice@example.com'
243
+ # config.token = 'test123abc'
244
+ # config.url = 'https://example.zendesk.com/api/v2'
245
+ # client = Readiness::Zendesk::Client.new(config)
246
+ # delete = Readiness::Zendesk::GroupMemberships.delete_many!(client, [1, 2, 3])
247
+ # pp delete.id
248
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
249
+ def self.delete_many!(client, mids)
250
+ response = client.connection.delete("group_memberships/destroy_many?ids=#{mids.join(',')}")
251
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many group memberships', message: Oj.load(response.body)}) unless response.status == 200
252
+ JobStatuses.new(Oj.load(response.body)['job_status'])
253
+ end
254
+ end
255
+ end
256
+ end
@@ -0,0 +1,249 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Zendesk
6
+ module Zendesk
7
+ ##
8
+ # Defines the class Groups within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ class Groups < Readiness::Client
13
+ attr_accessor :default, :deleted, :description, :id, :is_public, :name
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::Groups} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.0
20
+ # @param object [Object] An instance of {Readiness::Zendesk::Groups}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::Groups.new
24
+ def initialize(object = {})
25
+ @default = object['default']
26
+ @deleted = object['deleted']
27
+ @description = object['description']
28
+ @id = object['id']
29
+ @is_public = object['is_public']
30
+ @name = object['name']
31
+ end
32
+
33
+ ##
34
+ # Lists the first 100 groups
35
+ #
36
+ # @author Jason Colyer
37
+ # @since 1.0.0
38
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
39
+ # @return [Array]
40
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#list-groups Zendesk API > Groups > List Groups
41
+ # @example
42
+ # require 'support_readiness'
43
+ # config = Readiness::Zendesk::Configuration.new
44
+ # config.username = 'alice@example.com'
45
+ # config.token = 'test123abc'
46
+ # config.url = 'https://example.zendesk.com/api/v2'
47
+ # client = Readiness::Zendesk::Client.new(config)
48
+ # groups = Readiness::Zendesk::Groups.list(client)
49
+ # pp groups.first.id
50
+ # # => 211
51
+ def self.list(client)
52
+ response = client.connection.get("groups?page[size]=100")
53
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
54
+ Oj.load(response.body)['groups'].map { |g| Groups.new(g) }
55
+ end
56
+
57
+ ##
58
+ # Show information on the approximate count of groups.
59
+ #
60
+ # @author Jason Colyer
61
+ # @since 1.0.0
62
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
63
+ # @return [Hash]
64
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#count-groups Zendesk API > Groups > Count Groups
65
+ # @example
66
+ # require 'support_readiness'
67
+ # config = Readiness::Zendesk::Configuration.new
68
+ # config.username = 'alice@example.com'
69
+ # config.token = 'test123abc'
70
+ # config.url = 'https://example.zendesk.com/api/v2'
71
+ # client = Readiness::Zendesk::Client.new(config)
72
+ # count = Readiness::Zendesk::Groups.count(client)
73
+ # pp count['value']
74
+ # # => 102
75
+ def self.count(client)
76
+ response = client.connection.get('groups/count')
77
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
78
+ Oj.load(response.body)['count']
79
+ end
80
+
81
+ ##
82
+ # Locates a group within Zendesk. This will not exit on error (except Authentication errors)
83
+ #
84
+ # @author Jason Colyer
85
+ # @since 1.0.0
86
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
87
+ # @param gid [Integer] The group ID to find
88
+ # @return [Hash]
89
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#show-group Zendesk API > Groups > Show Group
90
+ # @example
91
+ # require 'support_readiness'
92
+ # config = Readiness::Zendesk::Configuration.new
93
+ # config.username = 'alice@example.com'
94
+ # config.token = 'test123abc'
95
+ # config.url = 'https://example.zendesk.com/api/v2'
96
+ # client = Readiness::Zendesk::Client.new(config)
97
+ # group = Readiness::Zendesk::Groups.find(client, 211)
98
+ # pp group.name
99
+ # # => "DJs"
100
+ def self.find(client, gid)
101
+ response = client.connection.get("groups/#{gid}")
102
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: gid }) unless response.status == 200
103
+ return Groups.new(Oj.load(response.body)['group']) if response.status == 200
104
+
105
+ Oj.load(response.body)
106
+ end
107
+
108
+ ##
109
+ # Locates a group within Zendesk. This will exit on error
110
+ #
111
+ # @author Jason Colyer
112
+ # @since 1.0.0
113
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
114
+ # @param gid [Integer] The group ID to find
115
+ # @return [Hash]
116
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#show-group Zendesk API > Groups > Show Group
117
+ # @example
118
+ # require 'support_readiness'
119
+ # config = Readiness::Zendesk::Configuration.new
120
+ # config.username = 'alice@example.com'
121
+ # config.token = 'test123abc'
122
+ # config.url = 'https://example.zendesk.com/api/v2'
123
+ # client = Readiness::Zendesk::Client.new(config)
124
+ # group = Readiness::Zendesk::Groups.find!(client, 211)
125
+ # pp group.name
126
+ # # => "DJs"
127
+ def self.find!(client, gid)
128
+ response = client.connection.get("groups/#{gid}")
129
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find group', id: gid }) unless response.status == 200
130
+ Groups.new(Oj.load(response.body)['group'])
131
+ end
132
+
133
+ ##
134
+ # Creates a group. Will exit if unsuccessful
135
+ #
136
+ # @author Jason Colyer
137
+ # @since 1.0.0
138
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
139
+ # @param group [Object] An instance of {Readiness::Zendesk::Groups}
140
+ # @return [Object] An instance of {Readiness::Zendesk::Groups}
141
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#create-group Zendesk API > Groups > Create Group
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
+ # group = Readiness::Zendesk::Groups.new
150
+ # group.name = 'My Group'
151
+ # create = Readiness::Zendesk::Groups.create!(client, group)
152
+ # pp create.id
153
+ # # => 122
154
+ def self.create!(client, group)
155
+ response = client.connection.post 'groups', to_clean_json_with_key(group, 'group')
156
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create group', message: Oj.load(response.body)}) unless response.status == 201
157
+ Groups.new(Oj.load(response.body)['group'])
158
+ end
159
+
160
+ ##
161
+ # Updates a group. Will exit if unsuccessful
162
+ #
163
+ # @author Jason Colyer
164
+ # @since 1.0.0
165
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
166
+ # @param group [Object] An instance of {Readiness::Zendesk::Groups}
167
+ # @return [Object] An instance of {Readiness::Zendesk::Groups}
168
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#update-group Zendesk API > Groups > Update Group
169
+ # @example
170
+ # require 'support_readiness'
171
+ # config = Readiness::Zendesk::Configuration.new
172
+ # config.username = 'alice@example.com'
173
+ # config.token = 'test123abc'
174
+ # config.url = 'https://example.zendesk.com/api/v2'
175
+ # client = Readiness::Zendesk::Client.new(config)
176
+ # group = Readiness::Zendesk::Groups.find!(client, 122)
177
+ # group.name = 'My Group 2'
178
+ # update = Readiness::Zendesk::Groups.update!(client, group)
179
+ # pp update.name
180
+ # # => "My Group 2"
181
+ def self.update!(client, group)
182
+ response = client.connection.put "groups/#{group.id}", to_clean_json_with_key(group, 'group')
183
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update group', id: group.id, message: Oj.load(response.body)}) unless response.status == 200
184
+ Groups.new(Oj.load(response.body)['group'])
185
+ end
186
+
187
+ ##
188
+ # Deletes a group. Will exit if unsuccessful
189
+ #
190
+ # @author Jason Colyer
191
+ # @since 1.0.0
192
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
193
+ # @param group [Object] An instance of {Readiness::Zendesk::Groups}
194
+ # @return [Boolean]
195
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/groups/#delete-group Zendesk API > Groups > Delete Group
196
+ # @example
197
+ # require 'support_readiness'
198
+ # config = Readiness::Zendesk::Configuration.new
199
+ # config.username = 'alice@example.com'
200
+ # config.token = 'test123abc'
201
+ # config.url = 'https://example.zendesk.com/api/v2'
202
+ # client = Readiness::Zendesk::Client.new(config)
203
+ # group = Readiness::Zendesk::Groups.find!(client, 122)
204
+ # delete = Readiness::Zendesk::Groups.delete!(client, group)
205
+ # pp delete
206
+ # # => true
207
+ def self.delete!(client, group)
208
+ response = client.connection.delete "groups/#{group.id}"
209
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an group', id: group.id, message: Oj.load(response.body)}) unless response.status == 204
210
+ true
211
+ end
212
+
213
+ ##
214
+ # Lists the members of a group
215
+ #
216
+ # @author Jason Colyer
217
+ # @since 1.0.0
218
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
219
+ # @return [Array]
220
+ # @see https://developer.zendesk.com/api-reference/ticketing/groups/group_memberships/#list-memberships Zendesk API > Group Memberships > List Memberships
221
+ # @example
222
+ # require 'support_readiness'
223
+ # config = Readiness::Zendesk::Configuration.new
224
+ # config.username = 'alice@example.com'
225
+ # config.token = 'test123abc'
226
+ # config.url = 'https://example.zendesk.com/api/v2'
227
+ # client = Readiness::Zendesk::Client.new(config)
228
+ # group = Readiness::Zendesk::Groups.find!(client, 122)
229
+ # members = Readiness::Zendesk::Groups.memberships(client, group)
230
+ # pp members.count
231
+ # # => 38
232
+ def self.memberships(client, group)
233
+ array = []
234
+ opts = "page[size]=100"
235
+ loop do
236
+ response = client.connection.get("groups/#{group.id}/memberships?#{opts}")
237
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
238
+ body = Oj.load(response.body)
239
+ array += body['group_memberships']
240
+ break if limit != 0 && array.count >= (limit * 100)
241
+ break unless body['meta']['has_more']
242
+
243
+ opts = body['links'] ['next'].split('?').last
244
+ end
245
+ array
246
+ end
247
+ end
248
+ end
249
+ end