gitlab_support_readiness 1.0.0

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.
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