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,222 @@
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 TicketFields within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ # @todo List ticket field options
13
+ # @todo Show ticket field option
14
+ # @todo Create or update ticket field option
15
+ # @todo Delete ticket field option
16
+ # @todo Reorder ticket fields
17
+ class TicketFields < Readiness::Client
18
+ attr_accessor :active, :agent_description, :collapsed_for_agents, :custom_field_options, :description, :editable_in_portal, :id, :key, :position, :regexp_for_validation, :removable, :required, :system_field_options, :tag, :title, :title_in_portal, :type, :visible_in_portal
19
+
20
+ ##
21
+ # Creates a new {Readiness::Zendesk::TicketFields} instance
22
+ #
23
+ # @author Jason Colyer
24
+ # @since 1.0.0
25
+ # @param object [Object] An instance of {Readiness::Zendesk::TicketFields}
26
+ # @example
27
+ # require 'support_readiness'
28
+ # Readiness::Zendesk::TicketFields.new
29
+ def initialize(object = {})
30
+ @active = object['active']
31
+ @agent_description = object['agent_description']
32
+ @collapsed_for_agents = object['collapsed_for_agents']
33
+ @custom_field_options = object['custom_field_options']
34
+ @description = object['description']
35
+ @editable_in_portal = object['editable_in_portal']
36
+ @id = object['id']
37
+ @key = object['key']
38
+ @position = object['position']
39
+ @regexp_for_validation = object['regexp_for_validation']
40
+ @removable = object['removable']
41
+ @required = object['required']
42
+ @system_field_options = object['system_field_options']
43
+ @tag = object['tag']
44
+ @title = object['title']
45
+ @title_in_portal = object['title_in_portal']
46
+ @type = object['type']
47
+ @visible_in_portal = object['visible_in_portal']
48
+ end
49
+
50
+ ##
51
+ # Lists all ticket fields.
52
+ #
53
+ # @author Jason Colyer
54
+ # @since 1.0.0
55
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
56
+ # @return [Array]
57
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#list-ticket-fields Zendesk API > Ticket Fields > List Ticket Fields
58
+ # @example
59
+ # require 'support_readiness'
60
+ # config = Readiness::Zendesk::Configuration.new
61
+ # config.username = 'alice@example.com'
62
+ # config.token = 'test123abc'
63
+ # config.url = 'https://example.zendesk.com/api/v2'
64
+ # client = Readiness::Zendesk::Client.new(config)
65
+ # fields = Readiness::Zendesk::TicketFields.list(client, 2)
66
+ # pp fields.count
67
+ # # => 200
68
+ def self.list(client, limit = 0, sort = 'id')
69
+ array = []
70
+ opts = "page[size]=100"
71
+ loop do
72
+ response = client.connection.get("ticket_fields?#{opts}")
73
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
74
+ body = Oj.load(response.body)
75
+ array += body['ticket_fields'].map { |f| TicketFields.new(f) }
76
+ break if limit != 0 && array.count >= (limit * 100)
77
+ break unless body['meta']['has_more']
78
+
79
+ opts = body['links'] ['next'].split('?').last
80
+ end
81
+ array
82
+ end
83
+
84
+ ##
85
+ # Locates a ticket field within Zendesk. This will not exit on error (except Authentication errors)
86
+ #
87
+ # @author Jason Colyer
88
+ # @since 1.0.0
89
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
90
+ # @param fid [Integer] The ticket field ID to find
91
+ # @return [Hash]
92
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#show-ticket-field Zendesk API > Ticket Fields > Show Ticket Field
93
+ # @example
94
+ # require 'support_readiness'
95
+ # config = Readiness::Zendesk::Configuration.new
96
+ # config.username = 'alice@example.com'
97
+ # config.token = 'test123abc'
98
+ # config.url = 'https://example.zendesk.com/api/v2'
99
+ # client = Readiness::Zendesk::Client.new(config)
100
+ # field = Readiness::Zendesk::TicketFields.find(client, 89)
101
+ # pp field.title
102
+ # # => "Age"
103
+ def self.find(client, fid)
104
+ response = client.connection.get("ticket_fields/#{fid}")
105
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: fid }) unless response.status == 200
106
+ return TicketFields.new(Oj.load(response.body)['ticket_field']) if response.status == 200
107
+
108
+ Oj.load(response.body)
109
+ end
110
+
111
+ ##
112
+ # Locates a ticket field within Zendesk. This will exit on error
113
+ #
114
+ # @author Jason Colyer
115
+ # @since 1.0.0
116
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
117
+ # @param fid [Integer] The ticket field ID to find
118
+ # @return [Hash]
119
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#show-ticket-field Zendesk API > Ticket Fields > Show Ticket Field
120
+ # @example
121
+ # require 'support_readiness'
122
+ # config = Readiness::Zendesk::Configuration.new
123
+ # config.username = 'alice@example.com'
124
+ # config.token = 'test123abc'
125
+ # config.url = 'https://example.zendesk.com/api/v2'
126
+ # client = Readiness::Zendesk::Client.new(config)
127
+ # field = Readiness::Zendesk::TicketFields.find!(client, 89)
128
+ # pp field.title
129
+ # # => "Age"
130
+ def self.find!(client, fid)
131
+ response = client.connection.get("ticket_fields/#{fid}")
132
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find ticket field', id: fid }) unless response.status == 200
133
+ TicketFields.new(Oj.load(response.body)['ticket_field'])
134
+ end
135
+
136
+ ##
137
+ # Creates a ticket field. Will exit if unsuccessful
138
+ #
139
+ # @author Jason Colyer
140
+ # @since 1.0.0
141
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
142
+ # @param field [Object] An instance of {Readiness::Zendesk::TicketFields}
143
+ # @return [Object] An instance of {Readiness::Zendesk::TicketFields}
144
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#create-ticket-field Zendesk API > Ticket Fields > Create Ticket Field
145
+ # @example
146
+ # require 'support_readiness'
147
+ # config = Readiness::Zendesk::Configuration.new
148
+ # config.username = 'alice@example.com'
149
+ # config.token = 'test123abc'
150
+ # config.url = 'https://example.zendesk.com/api/v2'
151
+ # client = Readiness::Zendesk::Client.new(config)
152
+ # field = Readiness::Zendesk::TicketFields.new
153
+ # field.type = 'text'
154
+ # field.title = 'Age'
155
+ # create = Readiness::Zendesk::TicketFields.create!(client, field)
156
+ # pp create.id
157
+ # # => 89
158
+ def self.create!(client, field)
159
+ response = client.connection.post 'ticket_fields', to_clean_json_with_key(field, 'ticket_field')
160
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create ticket field', message: Oj.load(response.body)}) unless response.status == 201
161
+ TicketFields.new(Oj.load(response.body)['ticket_field'])
162
+ end
163
+
164
+ ##
165
+ # Updates a ticket field. Will exit if unsuccessful
166
+ #
167
+ # @author Jason Colyer
168
+ # @since 1.0.0
169
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
170
+ # @param field [Object] An instance of {Readiness::Zendesk::TicketFields}
171
+ # @return [Object] An instance of {Readiness::Zendesk::TicketFields}
172
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#update-ticket-field Zendesk API > Ticket Fields > Update Ticket Field
173
+ # @example
174
+ # require 'support_readiness'
175
+ # config = Readiness::Zendesk::Configuration.new
176
+ # config.username = 'alice@example.com'
177
+ # config.token = 'test123abc'
178
+ # config.url = 'https://example.zendesk.com/api/v2'
179
+ # client = Readiness::Zendesk::Client.new(config)
180
+ # field = Readiness::Zendesk::TicketFields.find!(client, 21938362)
181
+ # field.title = 'Pies'
182
+ # field.custom_field_options = [
183
+ # { name: 'Apple Pie', value: 'apple' },
184
+ # { name: 'Pecan Pie', value: 'pecan' }
185
+ # ]
186
+ # update = Readiness::Zendesk::TicketFields.update!(client, field)
187
+ # pp update.title
188
+ # # => "Pies"
189
+ def self.update!(client, field)
190
+ response = client.connection.put "ticket_fields/#{field.id}", to_clean_json_with_key(field, 'ticket_field')
191
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update ticket field', message: Oj.load(response.body)}) unless response.status == 200
192
+ TicketFields.new(Oj.load(response.body)['ticket_field'])
193
+ end
194
+
195
+ ##
196
+ # Deletes a ticket field. Will exit if unsuccessful
197
+ #
198
+ # @author Jason Colyer
199
+ # @since 1.0.0
200
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
201
+ # @param field [Object] An instance of {Readiness::Zendesk::TicketFields}
202
+ # @return [Boolean]
203
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_fields/#delete-ticket-field Zendesk API > Ticket Fields > Delete Ticket Field
204
+ # @example
205
+ # require 'support_readiness'
206
+ # config = Readiness::Zendesk::Configuration.new
207
+ # config.username = 'alice@example.com'
208
+ # config.token = 'test123abc'
209
+ # config.url = 'https://example.zendesk.com/api/v2'
210
+ # client = Readiness::Zendesk::Client.new(config)
211
+ # field = Readiness::Zendesk::TicketFields.find!(client, 34)
212
+ # delete = Readiness::Zendesk::TicketFields.delete!(client, field)
213
+ # pp delete
214
+ # # => true
215
+ def self.delete!(client, field)
216
+ response = client.connection.delete "ticket_fields/#{field.id}"
217
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a ticket field', id: field.id, message: Oj.load(response.body)}) unless response.status == 204
218
+ true
219
+ end
220
+ end
221
+ end
222
+ end
@@ -0,0 +1,290 @@
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 TicketForms within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.0
12
+ class TicketForms < Readiness::Client
13
+ attr_accessor :active, :agent_conditions, :default, :display_name, :end_user_conditions, :end_user_visible, :id, :in_all_brands, :name, :position, :restricted_brand_ids, :ticket_field_ids
14
+
15
+ ##
16
+ # Creates a new {Readiness::Zendesk::TicketForms} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.0
20
+ # @param object [Object] An instance of {Readiness::Zendesk::TicketForms}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Zendesk::TicketForms.new
24
+ def initialize(object = {})
25
+ @active = object['active']
26
+ @agent_conditions = object['agent_conditions']
27
+ @default = object['default']
28
+ @display_name = object['display_name']
29
+ @end_user_conditions = object['end_user_conditions']
30
+ @end_user_visible = object['end_user_visible']
31
+ @id = object['id']
32
+ @in_all_brands = object['in_all_brands']
33
+ @name = object['name']
34
+ @position = object['position']
35
+ @restricted_brand_ids = object['restricted_brand_ids']
36
+ @ticket_field_ids = object['ticket_field_ids']
37
+ end
38
+
39
+ ##
40
+ # Lists the first 100 ticket forms
41
+ #
42
+ # @author Jason Colyer
43
+ # @since 1.0.0
44
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
45
+ # @return [Array]
46
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#list-ticket-forms Zendesk API > Ticket Forms > List Ticket Forms
47
+ # @example
48
+ # require 'support_readiness'
49
+ # config = Readiness::Zendesk::Configuration.new
50
+ # config.username = 'alice@example.com'
51
+ # config.token = 'test123abc'
52
+ # config.url = 'https://example.zendesk.com/api/v2'
53
+ # client = Readiness::Zendesk::Client.new(config)
54
+ # forms = Readiness::Zendesk::TicketForms.list(client)
55
+ # pp forms.first.id
56
+ # # => 47
57
+ def self.list(client)
58
+ response = client.connection.get('ticket_forms')
59
+ handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
60
+ Oj.load(response.body)['ticket_forms'].map { |f| TicketForms.new(f) }
61
+ end
62
+
63
+ ##
64
+ # Locates a ticket form within Zendesk. This will not exit on error (except Authentication errors)
65
+ #
66
+ # @author Jason Colyer
67
+ # @since 1.0.0
68
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
69
+ # @param fid [Integer] The ticket form ID to find
70
+ # @return [Hash]
71
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#show-ticket-form Zendesk API > Ticket Forms > Show Ticket Form
72
+ # @example
73
+ # require 'support_readiness'
74
+ # config = Readiness::Zendesk::Configuration.new
75
+ # config.username = 'alice@example.com'
76
+ # config.token = 'test123abc'
77
+ # config.url = 'https://example.zendesk.com/api/v2'
78
+ # client = Readiness::Zendesk::Client.new(config)
79
+ # form = Readiness::Zendesk::TicketForms.find(client, 47)
80
+ # pp form.name
81
+ # # => "Snowboard Problem"
82
+ def self.find(client, fid)
83
+ response = client.connection.get("ticket_forms/#{fid}")
84
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: oid }) unless response.status == 200
85
+ return TicketForms.new(Oj.load(response.body)['ticket_form']) if response.status == 200
86
+
87
+ Oj.load(response.body)
88
+ end
89
+
90
+ ##
91
+ # Locates aa ticket form within Zendesk. This will exit on error
92
+ #
93
+ # @author Jason Colyer
94
+ # @since 1.0.0
95
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
96
+ # @param fid [Integer] The ticket form ID to find
97
+ # @return [Hash]
98
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#show-ticket-form Zendesk API > Ticket Forms > Show Ticket Form
99
+ # @example
100
+ # require 'support_readiness'
101
+ # config = Readiness::Zendesk::Configuration.new
102
+ # config.username = 'alice@example.com'
103
+ # config.token = 'test123abc'
104
+ # config.url = 'https://example.zendesk.com/api/v2'
105
+ # client = Readiness::Zendesk::Client.new(config)
106
+ # form = Readiness::Zendesk::TicketForms.find!(client, 47)
107
+ # pp form.name
108
+ # # => "Snowboard Problem"
109
+ def self.find!(client, fid)
110
+ response = client.connection.get("ticket_forms/#{fid}")
111
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Find ticket form', id: fid }) unless response.status == 200
112
+ TicketForms.new(Oj.load(response.body)['ticket_form'])
113
+ end
114
+
115
+ ##
116
+ # Locates up to 100 ticket forms within Zendesk.
117
+ #
118
+ # @author Jason Colyer
119
+ # @since 1.0.0
120
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
121
+ # @param fids [Array] The tikcet form IDs to find
122
+ # @return [Array]
123
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#show-many-ticket-forms Zendesk API > Ticket Forms > Show Many Ticket Forms
124
+ # @example
125
+ # require 'support_readiness'
126
+ # config = Readiness::Zendesk::Configuration.new
127
+ # config.username = 'alice@example.com'
128
+ # config.token = 'test123abc'
129
+ # config.url = 'https://example.zendesk.com/api/v2'
130
+ # client = Readiness::Zendesk::Client.new(config)
131
+ # forms = Readiness::Zendesk::TicketForms.find!(client, [47, 50, 52])
132
+ # pp forms.first.name
133
+ # # => "Snowboard Problem"
134
+ def self.find_many(client, fids)
135
+ response = client.connection.get("ticket_forms/show_many?ids=#{fids.join(',')}")
136
+ handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: fids }) unless response.status == 200
137
+ Oj.load(response.body)['ticket_forms'].map { |f| TicketForms.new(f) }
138
+ end
139
+
140
+ ##
141
+ # Creates a ticket form. Will exit if unsuccessful
142
+ #
143
+ # @author Jason Colyer
144
+ # @since 1.0.0
145
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
146
+ # @param form [Object] An instance of {Readiness::Zendesk::TicketForms}
147
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
148
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#create-ticket-form Zendesk API > Ticket Forms > Create Ticket Form
149
+ # @example
150
+ # require 'support_readiness'
151
+ # config = Readiness::Zendesk::Configuration.new
152
+ # config.username = 'alice@example.com'
153
+ # config.token = 'test123abc'
154
+ # config.url = 'https://example.zendesk.com/api/v2'
155
+ # client = Readiness::Zendesk::Client.new(config)
156
+ # form = Readiness::Zendesk::TicketForms.new
157
+ # form.name = 'Snowboard Problem'
158
+ # form.end_user_visible = true
159
+ # form.display_name = 'Snowboard Damage'
160
+ # form.position = 9999
161
+ # form.active = true
162
+ # form.in_all_brands = false
163
+ # form.restricted_brand_ids = [1, 4, 6, 12, 34]
164
+ # form.ticket_field_ids = [2, 3, 4, 32, 33]
165
+ # form.agent_conditions = []
166
+ # form.end_user_conditions = []
167
+ # form.default = false
168
+ # create = Readiness::Zendesk::TicketForms.create!(client, form)
169
+ # pp create.id
170
+ # # => 47
171
+ def self.create!(client, form)
172
+ response = client.connection.post 'ticket_forms', to_clean_json_with_key(form, 'ticket_form')
173
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Create ticket form', message: Oj.load(response.body)}) unless response.status == 201
174
+ TicketForms.new(Oj.load(response.body)['ticket_form'])
175
+ end
176
+
177
+ ##
178
+ # Updates a ticket form. Will exit if unsuccessful
179
+ #
180
+ # @author Jason Colyer
181
+ # @since 1.0.0
182
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
183
+ # @param form [Object] An instance of {Readiness::Zendesk::TicketForms}
184
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
185
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#update-ticket-form Zendesk API > Ticket Forms > Update Ticket Form
186
+ # @example
187
+ # require 'support_readiness'
188
+ # config = Readiness::Zendesk::Configuration.new
189
+ # config.username = 'alice@example.com'
190
+ # config.token = 'test123abc'
191
+ # config.url = 'https://example.zendesk.com/api/v2'
192
+ # client = Readiness::Zendesk::Client.new(config)
193
+ # form = Readiness::Zendesk::TicketForms.find!(client, 47)
194
+ # form.name = 'Snowboard Fixed'
195
+ # form.display_name = 'Snowboard has been fixed'
196
+ # form.position = 9999
197
+ # form.active = true
198
+ # form.in_all_brands = true
199
+ # form.restricted_brand_ids = []
200
+ # form.agent_conditions = []
201
+ # form.end_user_conditions = []
202
+ # update = Readiness::Zendesk::TicketForms.update!(client, form)
203
+ # pp update.name
204
+ # # => "Snowboard Fixed"
205
+ def self.update!(client, form)
206
+ response = client.connection.put "ticket_forms/#{form.id}", to_clean_json_with_key(form, 'ticket_form')
207
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Update ticket form', message: Oj.load(response.body)}) unless response.status == 200
208
+ TicketForms.new(Oj.load(response.body)['ticket_form'])
209
+ end
210
+
211
+ ##
212
+ # Deletes a ticket form. Will exit if unsuccessful
213
+ #
214
+ # @author Jason Colyer
215
+ # @since 1.0.0
216
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
217
+ # @param form [Object] An instance of {Readiness::Zendesk::TicketForms}
218
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
219
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#update-ticket-form Zendesk API > Ticket Forms > Delete Ticket Form
220
+ # @example
221
+ # require 'support_readiness'
222
+ # config = Readiness::Zendesk::Configuration.new
223
+ # config.username = 'alice@example.com'
224
+ # config.token = 'test123abc'
225
+ # config.url = 'https://example.zendesk.com/api/v2'
226
+ # client = Readiness::Zendesk::Client.new(config)
227
+ # form = Readiness::Zendesk::TicketForms.find!(client, 47)
228
+ # delete = Readiness::Zendesk::TicketForms.delete!(client, form)
229
+ # pp delete
230
+ # # => true
231
+ def self.delete!(client, form)
232
+ response = client.connection.delete "ticket_forms/#{form.id}"
233
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Delete a ticket form', id: form.id, message: Oj.load(response.body)}) unless response.status == 204
234
+ true
235
+ end
236
+
237
+ ##
238
+ # Clones a ticket form. Will exit if unsuccessful
239
+ #
240
+ # @author Jason Colyer
241
+ # @since 1.0.0
242
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
243
+ # @param form [Object] An instance of {Readiness::Zendesk::TicketForms}
244
+ # @return [Object] An instance of {Readiness::Zendesk::TicketForms}
245
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#clone-an-already-existing-ticket-form Zendesk API > Ticket Forms > Clone an Already Existing Ticket Form
246
+ # @example
247
+ # require 'support_readiness'
248
+ # config = Readiness::Zendesk::Configuration.new
249
+ # config.username = 'alice@example.com'
250
+ # config.token = 'test123abc'
251
+ # config.url = 'https://example.zendesk.com/api/v2'
252
+ # client = Readiness::Zendesk::Client.new(config)
253
+ # form = Readiness::Zendesk::TicketForms.find!(client, 47)
254
+ # clone = Readiness::Zendesk::TicketForms.clone!(client, form)
255
+ # pp clone.id
256
+ # # => 48
257
+ def self.clone!(client, form)
258
+ response = client.connection.post "ticket_forms/#{form.id}/clone", { prepend_clone_title: true }.to_json
259
+ handle_request_error(1, 'Zendesk', response.status, { action: 'Clone a ticket form', id: form.id, message: Oj.load(response.body)}) unless response.status == 200
260
+ TicketForms.new(Oj.load(response.body)['ticket_form'])
261
+ end
262
+
263
+ ##
264
+ # Reorders the ticket forms. Will exit if unsuccessful
265
+ #
266
+ # @author Jason Colyer
267
+ # @since 1.0.0
268
+ # @param client [Object] An instance of {Readiness::Zendesk::Client}
269
+ # @param fids [Array] The ticket form IDs to reorder (order in Array is important)
270
+ # @return [Array]
271
+ # @see https://developer.zendesk.com/api-reference/ticketing/tickets/ticket_forms/#reorder-ticket-forms Zendesk API > Ticket Forms > Reorder Ticket Forms
272
+ # @example
273
+ # require 'support_readiness'
274
+ # config = Readiness::Zendesk::Configuration.new
275
+ # config.username = 'alice@example.com'
276
+ # config.token = 'test123abc'
277
+ # config.url = 'https://example.zendesk.com/api/v2'
278
+ # client = Readiness::Zendesk::Client.new(config)
279
+ # form = Readiness::Zendesk::TicketForms.find!(client, 47)
280
+ # reorder = Readiness::Zendesk::TicketForms.reorder!(client, [2, 23, 46, 50])
281
+ # pp reorder.count
282
+ # # => 4
283
+ def self.reorder(client, fids)
284
+ response = client.connection.put 'ticket_forms/reorder', { ticket_form_ids: fids }.to_json
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
+ Oj.load(response.body)['ticket_form'].map { |f| TicketForms.new(f) }
287
+ end
288
+ end
289
+ end
290
+ end