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