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,233 @@
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 OrganizationFields within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ class OrganizationFields < Readiness::Client
13
+ attr_accessor :active, :custom_field_options, :description, :id, :key, :position, :regexp_for_validation, :title, :type
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::OrganizationFields} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.0
20
+ # @param object [Object] An instance of {Readiness::Zendesk::OrganizationFields}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::OrganizationFields.new
24
+ def initialize(object = {})
25
+ @active = object['active']
26
+ @custom_field_options = object['custom_field_options']
27
+ @description = object['description']
28
+ @id = object['id']
29
+ @key = object['key']
30
+ @position = object['position']
31
+ @regexp_for_validation = object['regexp_for_validation']
32
+ @title = object['title']
33
+ @type = object['type']
34
+ end
35
+
36
+ ##
37
+ # Lists all organization fields
38
+ #
39
+ # @author Jason Colyer
40
+ # @since 1.0.0
41
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
42
+ # @return [Array]
43
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#list-organization-fields Zendesk API > Organization Fields > List Organization Fields
44
+ # @example
45
+ # require 'support_readiness'
46
+ # config = Readiness::Zendesk::Configuration.new
47
+ # config.username = 'alice@example.com'
48
+ # config.token = 'test123abc'
49
+ # config.url = 'https://example.zendesk.com/api/v2'
50
+ # client = Readiness::Zendesk::Client.new(config)
51
+ # fields = Readiness::Zendesk::OrganizationFields.list(client)
52
+ # pp fields.first.id
53
+ # # => 7
54
+ def self.list(client, limit = 0, sort = 'id')
55
+ array = []
56
+ opts = "page[size]=100"
57
+ loop do
58
+ response = client.connection.get("organization_fields?#{opts}")
59
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
60
+ body = Oj.load(response.body)
61
+ array += body['organization_fields'].map { |f| OrganizationFields.new(f) }
62
+ break if limit != 0 && array.count >= (limit * 100)
63
+ break unless body['meta']['has_more']
64
+
65
+ opts = body['links'] ['next'].split('?').last
66
+ end
67
+ array
68
+ end
69
+
70
+ ##
71
+ # Locates an organization field within Zendesk. This will not exit on error (except Authentication errors)
72
+ #
73
+ # @author Jason Colyer
74
+ # @since 1.0.0
75
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
76
+ # @param fid [Integer] The organization field ID to find
77
+ # @return [Hash]
78
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#show-organization-field > Organization Fields > Show Organization Field
79
+ # @example
80
+ # require 'support_readiness'
81
+ # config = Readiness::Zendesk::Configuration.new
82
+ # config.username = 'alice@example.com'
83
+ # config.token = 'test123abc'
84
+ # config.url = 'https://example.zendesk.com/api/v2'
85
+ # client = Readiness::Zendesk::Client.new(config)
86
+ # field = Readiness::Zendesk::OrganizationFields.find(client, 8)
87
+ # pp field.title
88
+ # # => "Custom Field 1"
89
+ def self.find(client, fid)
90
+ response = client.connection.get("organization_fields/#{fid}")
91
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: fid }) unless response.status == 200
92
+ return OrganizationFields.new(Oj.load(response.body)['organization_field']) if response.status == 200
93
+
94
+ Oj.load(response.body)
95
+ end
96
+
97
+ ##
98
+ # Locates an organization field within Zendesk. This will exit on error
99
+ #
100
+ # @author Jason Colyer
101
+ # @since 1.0.0
102
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
103
+ # @param fid [Integer] The organization field ID to find
104
+ # @return [Object] An instance of {Readiness::Zendesk::OrganizationFields}
105
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#show-organization-field > Organization Fields > Show Organization Field
106
+ # @example
107
+ # require 'support_readiness'
108
+ # config = Readiness::Zendesk::Configuration.new
109
+ # config.username = 'alice@example.com'
110
+ # config.token = 'test123abc'
111
+ # config.url = 'https://example.zendesk.com/api/v2'
112
+ # client = Readiness::Zendesk::Client.new(config)
113
+ # field = Readiness::Zendesk::OrganizationFields.find!(client, 8)
114
+ # pp field.title
115
+ # # => "Custom Field 1"
116
+ def self.find!(client, fid)
117
+ response = client.connection.get("organization_fields/#{fid}")
118
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find organization field', id: fid }) unless response.status == 200
119
+ OrganizationFields.new(Oj.load(response.body)['organization_field'])
120
+ end
121
+
122
+ ##
123
+ # Creates an organization field. Will exit if unsuccessful
124
+ #
125
+ # @author Jason Colyer
126
+ # @since 1.0.0
127
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
128
+ # @param field [Object] An instance of {Readiness::Zendesk::OrganizationFields}
129
+ # @return [Object] An instance of {Readiness::Zendesk::OrganizationFields}
130
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#create-organization-field Zendesk API > Organization Fields > Create Organization Field
131
+ # @example
132
+ # require 'support_readiness'
133
+ # config = Readiness::Zendesk::Configuration.new
134
+ # config.username = 'alice@example.com'
135
+ # config.token = 'test123abc'
136
+ # config.url = 'https://example.zendesk.com/api/v2'
137
+ # client = Readiness::Zendesk::Client.new(config)
138
+ # field = Readiness::Zendesk::OrganizationFields.new
139
+ # field.type = 'text'
140
+ # field.title = 'Support desc'
141
+ # field.description = 'This field describes the support plan this organization has'
142
+ # field.position: 0
143
+ # field.active = true
144
+ # field.key = 'support_description'
145
+ # create = Readiness::Zendesk::OrganizationFields.create!(client, field)
146
+ # pp create.id
147
+ # # => 75
148
+ def self.create!(client, field)
149
+ response = client.connection.post 'organization_fields', to_clean_json_with_key(field, 'organization_field')
150
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create organization field', message: Oj.load(response.body)}) unless response.status == 201
151
+ OrganizationFields.new(Oj.load(response.body)['organization_field'])
152
+ end
153
+
154
+ ##
155
+ # Updates an organization field. Will exit if unsuccessful
156
+ #
157
+ # @author Jason Colyer
158
+ # @since 1.0.0
159
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
160
+ # @param field [Object] An instance of {Readiness::Zendesk::OrganizationFields}
161
+ # @return [Object] An instance of {Readiness::Zendesk::OrganizationFields}
162
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#update-organization-field Zendesk API > Organization Fields > Update Organization Field
163
+ # @example
164
+ # require 'support_readiness'
165
+ # config = Readiness::Zendesk::Configuration.new
166
+ # config.username = 'alice@example.com'
167
+ # config.token = 'test123abc'
168
+ # config.url = 'https://example.zendesk.com/api/v2'
169
+ # client = Readiness::Zendesk::Client.new(config)
170
+ # field = Readiness::Zendesk::OrganizationFields.find!(client, 75)
171
+ # field.title = 'Support description'
172
+ # update = Readiness::Zendesk::OrganizationFields.update!(client, field)
173
+ # pp create.title
174
+ # # => "Support description"
175
+ def self.update!(client, field)
176
+ response = client.connection.put "organization_fields/#{field.id}", to_clean_json_with_key(field, 'ticket_field')
177
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update organization field', message: Oj.load(response.body)}) unless response.status == 200
178
+ OrganizationFields.new(Oj.load(response.body)['organization_field'])
179
+ end
180
+
181
+ ##
182
+ # Deletes an organization field. Will exit if unsuccessful
183
+ #
184
+ # @author Jason Colyer
185
+ # @since 1.0.0
186
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
187
+ # @param field [Object] An instance of {Readiness::Zendesk::OrganizationFields}
188
+ # @return [Boolean]
189
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#delete-organization-field Zendesk API > Organization Fields > Delete Organization Field
190
+ # @example
191
+ # require 'support_readiness'
192
+ # config = Readiness::Zendesk::Configuration.new
193
+ # config.username = 'alice@example.com'
194
+ # config.token = 'test123abc'
195
+ # config.url = 'https://example.zendesk.com/api/v2'
196
+ # client = Readiness::Zendesk::Client.new(config)
197
+ # field = Readiness::Zendesk::OrganizationFields.find!(client, 75)
198
+ # delete = Readiness::Zendesk::OrganizationFields.delete!(client, field)
199
+ # pp delete
200
+ # # => true
201
+ def self.delete!(client, field)
202
+ response = client.connection.delete "organization_fields/#{field.id}"
203
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an organization field', id: field.id, message: Oj.load(response.body)}) unless response.status == 204
204
+ true
205
+ end
206
+
207
+ ##
208
+ # Reorders organization fields. Will exit if unsuccessful
209
+ #
210
+ # @author Jason Colyer
211
+ # @since 1.0.0
212
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
213
+ # @param fids [Array] An Array of field IDs (order is important)
214
+ # @return [Boolean]
215
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_fields/#reorder-organization-field Zendesk API > Organization Fields > Reorder Organization Field
216
+ # @example
217
+ # require 'support_readiness'
218
+ # config = Readiness::Zendesk::Configuration.new
219
+ # config.username = 'alice@example.com'
220
+ # config.token = 'test123abc'
221
+ # config.url = 'https://example.zendesk.com/api/v2'
222
+ # client = Readiness::Zendesk::Client.new(config)
223
+ # reorder = Readiness::Zendesk::OrganizationFields.reorder!(client, [4, 5, 2, 8])
224
+ # pp reorder
225
+ # # => true
226
+ def self.reorder!(client, fids)
227
+ response = client.connection.put 'organization_fields/reorder', { organization_field_ids: fids }.to_json
228
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Reorder organization fields', id: fids, message: Oj.load(response.body)}) unless response.status == 200
229
+ true
230
+ end
231
+ end
232
+ end
233
+ end
@@ -0,0 +1,257 @@
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 OrganizationMemberships within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ class OrganizationMemberships < Readiness::Client
13
+ attr_accessor :id, :default, :organization_id, :organization_name, :user_id, :view_tickets
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::OrganizationMemberships} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.0
20
+ # @param object [Object] An instance of {Readiness::Zendesk::OrganizationMemberships}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::OrganizationMemberships.new
24
+ def initialize(object = {})
25
+ @id = object['id']
26
+ @default = object['default']
27
+ @organization_id = object['organization_id']
28
+ @organization_name = object['organization_name']
29
+ @user_id = object['user_id']
30
+ @view_tickets = object['view_tickets']
31
+ end
32
+
33
+ ##
34
+ # Lists the first 100 organization memberships
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/organizations/organization_memberships/#list-memberships Zendesk API > Organization Memberships > List Memberships
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
+ # memberships = Readiness::Zendesk::OrganizationMemberships.list(client)
49
+ # pp memberships.first.id
50
+ # # => 4
51
+ def self.list(client)
52
+ response = client.connection.get("organization_memberships?page[size]=100")
53
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
54
+ Oj.load(response.body)['organization_memberships'].map { |m| OrganizationMemberships.new(m) }
55
+ end
56
+
57
+ ##
58
+ # Lists many organization memberships. Does not stop until it ends or the page limit is hit.
59
+ # This method can take a long time to run depending on the parameters used.
60
+ #
61
+ # @author Jason Colyer
62
+ # @since 1.0.0
63
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
64
+ # @param limit [Integer] The number of pages to stop at. Using 0 means to list all.
65
+ # @return [Array]
66
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#list-memberships Zendesk API > Organization Memberships > List Memberships
67
+ # @example
68
+ # require 'support_readiness'
69
+ # config = Readiness::Zendesk::Configuration.new
70
+ # config.username = 'alice@example.com'
71
+ # config.token = 'test123abc'
72
+ # config.url = 'https://example.zendesk.com/api/v2'
73
+ # client = Readiness::Zendesk::Client.new(config)
74
+ # memberships = Readiness::Zendesk::OrganizationMemberships.list_many(client, 2)
75
+ # pp memberships.count
76
+ # # => 200
77
+ def self.list_many(client, limit = 0)
78
+ array = []
79
+ opts = "page[size]=100"
80
+ loop do
81
+ response = client.connection.get("organization_memberships?#{opts}")
82
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
83
+ body = Oj.load(response.body)
84
+ array += body['organization_memberships'].map { |o| OrganizationMemberships.new(o) }
85
+ break if limit != 0 && array.count >= (limit * 100)
86
+ break unless body['meta']['has_more']
87
+
88
+ opts = body['links'] ['next'].split('?').last
89
+ end
90
+ array
91
+ end
92
+
93
+ ##
94
+ # Locates an organization membership within Zendesk. This will not exit on error (except Authentication errors)
95
+ #
96
+ # @author Jason Colyer
97
+ # @since 1.0.0
98
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
99
+ # @param oid [Integer] The organization membership ID to find
100
+ # @return [Hash]
101
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#show-membership Zendesk API > Organization Memberships > Show Membership
102
+ # @example
103
+ # require 'support_readiness'
104
+ # config = Readiness::Zendesk::Configuration.new
105
+ # config.username = 'alice@example.com'
106
+ # config.token = 'test123abc'
107
+ # config.url = 'https://example.zendesk.com/api/v2'
108
+ # client = Readiness::Zendesk::Client.new(config)
109
+ # membership = Readiness::Zendesk::OrganizationMemberships.find(client, 4)
110
+ # pp membership.user_id
111
+ # # => 29
112
+ def self.find(client, oid)
113
+ response = client.connection.get("organization_memberships/#{oid}")
114
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: oid }) unless response.status == 200
115
+ return OrganizationMemberships.new(Oj.load(response.body)['organization_membership']) if response.status == 200
116
+
117
+ Oj.load(response.body)
118
+ end
119
+
120
+ ##
121
+ # Locates an organization membership within Zendesk. This will exit on error
122
+ #
123
+ # @author Jason Colyer
124
+ # @since 1.0.0
125
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
126
+ # @param oid [Integer] The organization membership ID to find
127
+ # @return [Hash]
128
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#show-membership Zendesk API > Organization Memberships > Show Membership
129
+ # @example
130
+ # require 'support_readiness'
131
+ # config = Readiness::Zendesk::Configuration.new
132
+ # config.username = 'alice@example.com'
133
+ # config.token = 'test123abc'
134
+ # config.url = 'https://example.zendesk.com/api/v2'
135
+ # client = Readiness::Zendesk::Client.new(config)
136
+ # membership = Readiness::Zendesk::OrganizationMemberships.find!(client, 4)
137
+ # pp membership.user_id
138
+ # # => 29
139
+ def self.find!(client, oid)
140
+ response = client.connection.get("organization_memberships/#{oid}")
141
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find organization membership', id: oid }) unless response.status == 200
142
+ OrganizationMemberships.new(Oj.load(response.body)['organization_membership'])
143
+ end
144
+
145
+ ##
146
+ # Creates an organization membership. Will exit if unsuccessful
147
+ #
148
+ # @author Jason Colyer
149
+ # @since 1.0.0
150
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
151
+ # @param membership [Object] An instance of {Readiness::Zendesk::OrganizationMemberships}
152
+ # @return [Object] An instance of {Readiness::Zendesk::OrganizationMemberships}
153
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#create-membership Zendesk API > Organization Memberships > Create Membership
154
+ # @example
155
+ # require 'support_readiness'
156
+ # config = Readiness::Zendesk::Configuration.new
157
+ # config.username = 'alice@example.com'
158
+ # config.token = 'test123abc'
159
+ # config.url = 'https://example.zendesk.com/api/v2'
160
+ # client = Readiness::Zendesk::Client.new(config)
161
+ # membership = Readiness::Zendesk::OrganizationMemberships.new
162
+ # membership.user_id = 72
163
+ # membership.organization_id = 88
164
+ # create = Readiness::Zendesk::OrganizationMemberships.create!(client, membership)
165
+ # pp create.id
166
+ # # => 461
167
+ def self.create!(client, membership)
168
+ response = client.connection.post 'organization_memberships', to_clean_json_with_key(membership, 'organization_membership')
169
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create organization membership', message: Oj.load(response.body)}) unless response.status == 201
170
+ OrganizationMemberships.new(Oj.load(response.body)['organization_membership'])
171
+ end
172
+
173
+ ##
174
+ # Creates multiple organization memberships via a batch job
175
+ #
176
+ # @author Jason Colyer
177
+ # @since 1.0.0
178
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
179
+ # @param memberships [Array] An array of {Readiness::Zendesk::OrganizationMemberships} instances
180
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
181
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#create-many-memberships Zendesk API > Organization Memberships > Create Many Memberships
182
+ # @example
183
+ # require 'support_readiness'
184
+ # config = Readiness::Zendesk::Configuration.new
185
+ # config.username = 'alice@example.com'
186
+ # config.token = 'test123abc'
187
+ # config.url = 'https://example.zendesk.com/api/v2'
188
+ # client = Readiness::Zendesk::Client.new(config)
189
+ # membership1 = Readiness::Zendesk::OrganizationMemberships.new
190
+ # membership1.user_id = 72
191
+ # membership1.organization_id = 88
192
+ # membership2 = Readiness::Zendesk::OrganizationMemberships.new
193
+ # membership2.user_id = 27
194
+ # membership2.organization_id = 88
195
+ # creates = Readiness::Zendesk::OrganizationMemberships.create_many!(client, membership)
196
+ # pp creates.id
197
+ # # => "8b726e606741012ffc2d782bcb7848fe"
198
+ def self.create_many!(client, memberships)
199
+ data = { organization_memberships: memberships.map { |t| to_hash(t).compact } }.to_json
200
+ response = client.connection.post('organization_memberships/create_many', data)
201
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create many organization memberships', message: Oj.load(response.body)}) unless response.status == 200
202
+ JobStatuses.new(Oj.load(response.body)['job_status'])
203
+ end
204
+
205
+ ##
206
+ # Deletes an organization membership. Will exit if unsuccessful
207
+ #
208
+ # @author Jason Colyer
209
+ # @since 1.0.0
210
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
211
+ # @param membership [Object] An instance of {Readiness::Zendesk::OrganizationMemberships}
212
+ # @return [Boolean]
213
+ # @see hhttps://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#delete-membership Zendesk API > Organization Memberships > Delete Membership
214
+ # @example
215
+ # require 'support_readiness'
216
+ # config = Readiness::Zendesk::Configuration.new
217
+ # config.username = 'alice@example.com'
218
+ # config.token = 'test123abc'
219
+ # config.url = 'https://example.zendesk.com/api/v2'
220
+ # client = Readiness::Zendesk::Client.new(config)
221
+ # membership = Readiness::Zendesk::OrganizationMemberships.find!(client, 461)
222
+ # delete = Readiness::Zendesk::OrganizationMemberships.delete!(client, membership)
223
+ # pp delete
224
+ # # => true
225
+ def self.delete!(client, membership)
226
+ response = client.connection.delete "organization_memberships/#{membership.id}"
227
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete organization membership', message: Oj.load(response.body)}) unless response.status == 204
228
+ true
229
+ end
230
+
231
+ ##
232
+ # Deletes multiple organization memberships via a batch job
233
+ #
234
+ # @author Jason Colyer
235
+ # @since 1.0.0
236
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
237
+ # @param mids [Array] An array of organization memberships IDs
238
+ # @return [object] A {Readiness::Zendesk::JobStatuses} instance
239
+ # @see https://developer.zendesk.com/api-reference/ticketing/organizations/organization_memberships/#bulk-delete-memberships Zendesk API > Organization Memberships > Bulk Delete Memberships
240
+ # @example
241
+ # require 'support_readiness'
242
+ # config = Readiness::Zendesk::Configuration.new
243
+ # config.username = 'alice@example.com'
244
+ # config.token = 'test123abc'
245
+ # config.url = 'https://example.zendesk.com/api/v2'
246
+ # client = Readiness::Zendesk::Client.new(config)
247
+ # deletes = Readiness::Zendesk::OrganizationMemberships.delete!(client, [461, 462])
248
+ # pp deletes.id
249
+ # # => "82de0b044094f0c67893ac9fe64f1a99"
250
+ def self.delete_many(client, mids)
251
+ response = client.connection.delete("organization_memberships/destroy_many?ids=#{mids.join(',')}")
252
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many organization memberships', message: Oj.load(response.body)}) unless response.status == 200
253
+ JobStatuses.new(Oj.load(response.body)['job_status'])
254
+ end
255
+ end
256
+ end
257
+ end