gitlab-customer-support-operations_zendesk 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.
- checksums.yaml +7 -0
- data/lib/support_ops_zendesk/packages.rb +89 -0
- data/lib/support_ops_zendesk/zendesk/app_installations.rb +62 -0
- data/lib/support_ops_zendesk/zendesk/app_job_statuses.rb +157 -0
- data/lib/support_ops_zendesk/zendesk/apps.rb +476 -0
- data/lib/support_ops_zendesk/zendesk/articles.rb +362 -0
- data/lib/support_ops_zendesk/zendesk/audit_logs.rb +166 -0
- data/lib/support_ops_zendesk/zendesk/automations.rb +390 -0
- data/lib/support_ops_zendesk/zendesk/base.rb +472 -0
- data/lib/support_ops_zendesk/zendesk/brands.rb +172 -0
- data/lib/support_ops_zendesk/zendesk/client.rb +91 -0
- data/lib/support_ops_zendesk/zendesk/comments.rb +37 -0
- data/lib/support_ops_zendesk/zendesk/configuration.rb +138 -0
- data/lib/support_ops_zendesk/zendesk/custom_roles.rb +224 -0
- data/lib/support_ops_zendesk/zendesk/dynamic_content.rb +297 -0
- data/lib/support_ops_zendesk/zendesk/dynamic_content_variants.rb +309 -0
- data/lib/support_ops_zendesk/zendesk/group_memberships.rb +337 -0
- data/lib/support_ops_zendesk/zendesk/groups.rb +385 -0
- data/lib/support_ops_zendesk/zendesk/help_center_categories.rb +332 -0
- data/lib/support_ops_zendesk/zendesk/help_center_content_tags.rb +237 -0
- data/lib/support_ops_zendesk/zendesk/help_center_management_permission_groups.rb +271 -0
- data/lib/support_ops_zendesk/zendesk/help_center_sections.rb +378 -0
- data/lib/support_ops_zendesk/zendesk/help_center_topics.rb +274 -0
- data/lib/support_ops_zendesk/zendesk/help_center_user_segments.rb +279 -0
- data/lib/support_ops_zendesk/zendesk/job_statuses.rb +231 -0
- data/lib/support_ops_zendesk/zendesk/locales.rb +326 -0
- data/lib/support_ops_zendesk/zendesk/macros.rb +407 -0
- data/lib/support_ops_zendesk/zendesk/oauth_clients.rb +186 -0
- data/lib/support_ops_zendesk/zendesk/oauth_tokens.rb +114 -0
- data/lib/support_ops_zendesk/zendesk/organization_fields.rb +282 -0
- data/lib/support_ops_zendesk/zendesk/organization_memberships.rb +336 -0
- data/lib/support_ops_zendesk/zendesk/organizations.rb +568 -0
- data/lib/support_ops_zendesk/zendesk/requester_roles.rb +58 -0
- data/lib/support_ops_zendesk/zendesk/satisfaction_reasons.rb +161 -0
- data/lib/support_ops_zendesk/zendesk/schedule_holidays.rb +27 -0
- data/lib/support_ops_zendesk/zendesk/schedules.rb +192 -0
- data/lib/support_ops_zendesk/zendesk/search.rb +185 -0
- data/lib/support_ops_zendesk/zendesk/sla_policies.rb +302 -0
- data/lib/support_ops_zendesk/zendesk/targets.rb +96 -0
- data/lib/support_ops_zendesk/zendesk/theme_job_statuses.rb +154 -0
- data/lib/support_ops_zendesk/zendesk/themes.rb +328 -0
- data/lib/support_ops_zendesk/zendesk/ticket_field_options.rb +154 -0
- data/lib/support_ops_zendesk/zendesk/ticket_fields.rb +357 -0
- data/lib/support_ops_zendesk/zendesk/ticket_forms.rb +370 -0
- data/lib/support_ops_zendesk/zendesk/ticket_user_types.rb +67 -0
- data/lib/support_ops_zendesk/zendesk/tickets.rb +837 -0
- data/lib/support_ops_zendesk/zendesk/translations.rb +310 -0
- data/lib/support_ops_zendesk/zendesk/trigger_categories.rb +275 -0
- data/lib/support_ops_zendesk/zendesk/triggers.rb +427 -0
- data/lib/support_ops_zendesk/zendesk/user_field_options.rb +153 -0
- data/lib/support_ops_zendesk/zendesk/user_fields.rb +312 -0
- data/lib/support_ops_zendesk/zendesk/users.rb +889 -0
- data/lib/support_ops_zendesk/zendesk/via_types.rb +137 -0
- data/lib/support_ops_zendesk/zendesk/views.rb +636 -0
- data/lib/support_ops_zendesk/zendesk/webhooks.rb +206 -0
- data/lib/support_ops_zendesk/zendesk.rb +66 -0
- data/lib/support_ops_zendesk.rb +29 -0
- metadata +274 -0
@@ -0,0 +1,636 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module SupportOps.
|
4
|
+
module SupportOps
|
5
|
+
# Defines the module Zendesk
|
6
|
+
module Zendesk
|
7
|
+
##
|
8
|
+
# Defines the class Views within the module {SupportOps::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
# @attr [Boolean] active Whether the view is active
|
13
|
+
# @attr [Hash] conditions Describes how the view is constructed
|
14
|
+
# @attr [String] created_at The time the view was created
|
15
|
+
# @attr [Boolean] default If true, the view is a default view
|
16
|
+
# @attr [String] description The description of the view
|
17
|
+
# @attr [Hash] execution Describes how the view should be executed
|
18
|
+
# @attr [Integer] id Automatically assigned when created
|
19
|
+
# @attr [Integer] position The position of the view
|
20
|
+
# @attr [Hash] restriction Who may access this account. Is null when everyone in the account can access it
|
21
|
+
# @attr [String] title The title of the view
|
22
|
+
# @attr [String] updated_at The time the view was last updated
|
23
|
+
# @todo List Views - Compact => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views---compact
|
24
|
+
# @todo Search Views => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#search-views
|
25
|
+
# @todo Preview Ticket Count => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#preview-ticket-count
|
26
|
+
# @todo Execute View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#execute-view
|
27
|
+
# @todo Count Tickets in View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-tickets-in-view
|
28
|
+
# @todo Count Tickets in Views => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-tickets-in-views
|
29
|
+
# @todo Export View => https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#export-view
|
30
|
+
class Views < SupportOps::Zendesk::Base
|
31
|
+
# @!parse
|
32
|
+
# # Creates/updates a view
|
33
|
+
# #
|
34
|
+
# # @author Jason Colyer
|
35
|
+
# # @since 1.0.0
|
36
|
+
# # @return [Object] Instance of {SupportOps::Zendesk::Views}
|
37
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#save!}
|
38
|
+
# # @see
|
39
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#create-view
|
40
|
+
# # Zendesk API > Views > Create View
|
41
|
+
# # @see
|
42
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#update-view
|
43
|
+
# # Zendesk API > Views > Update View
|
44
|
+
# # @example
|
45
|
+
# # require 'support_ops_zendesk'
|
46
|
+
# #
|
47
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
48
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
49
|
+
# # config.username = 'jason@example.com'
|
50
|
+
# # config.token = 'abc123'
|
51
|
+
# # end
|
52
|
+
# #
|
53
|
+
# # new_view = SupportOps::Zendesk::Views.new
|
54
|
+
# # new_view.title = "Kelly's tickets"
|
55
|
+
# # new_view.description = 'Tickets that are assigned to Kelly'
|
56
|
+
# # new_view.active = true
|
57
|
+
# # new_view.position = 3
|
58
|
+
# # new_view.conditions = {
|
59
|
+
# # "all" => [
|
60
|
+
# # { "field" => 'status', "operator" => 'less_than', "value" => 'solved' }
|
61
|
+
# # ],
|
62
|
+
# # "any" => []
|
63
|
+
# # }
|
64
|
+
# # new_view.execution = {
|
65
|
+
# # "columns" => [
|
66
|
+
# # { "id" => 'status', "title" => 'Status', "filterable" => true, "sortable" => true},
|
67
|
+
# # { "id" => 'requester', "title" => 'Requester', "filterable" => true, "sortable" => true},
|
68
|
+
# # { "id" => 'assignee', "title" => 'Assignee', "filterable" => true, "sortable" => true},
|
69
|
+
# # ],
|
70
|
+
# # "group_by" => 'assignee',
|
71
|
+
# # "group_order" => 'desc',
|
72
|
+
# # "sort_by" => 'status',
|
73
|
+
# # "sort_order" => 'desc',
|
74
|
+
# # "group" => {
|
75
|
+
# # "id" => 'assignee',
|
76
|
+
# # "title" => 'Assignee',
|
77
|
+
# # "filterable" => true,
|
78
|
+
# # "sortable" => true,
|
79
|
+
# # "order" => 'desc'
|
80
|
+
# # },
|
81
|
+
# # "sort" => {
|
82
|
+
# # "id" => 'status',
|
83
|
+
# # "title" => 'Status',
|
84
|
+
# # "filterable" => true,
|
85
|
+
# # "sortable" => true,
|
86
|
+
# # "order" => 'desc'
|
87
|
+
# # }
|
88
|
+
# # }
|
89
|
+
# #
|
90
|
+
# # new_view.save!
|
91
|
+
# #
|
92
|
+
# # pp new_view.id
|
93
|
+
# # # => 123
|
94
|
+
# # @example
|
95
|
+
# # require 'support_ops_zendesk'
|
96
|
+
# #
|
97
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
98
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
99
|
+
# # config.username = 'jason@example.com'
|
100
|
+
# # config.token = 'abc123'
|
101
|
+
# # end
|
102
|
+
# #
|
103
|
+
# # existing_view = SupportOps::Zendesk::Views.get!(9873843)
|
104
|
+
# # existing_view.title = 'Canada tickets'
|
105
|
+
# #
|
106
|
+
# # existing_view.save!
|
107
|
+
# #
|
108
|
+
# # pp existing_view.title
|
109
|
+
# # # => "Canada tickets"
|
110
|
+
# def save!; end
|
111
|
+
# @!parse
|
112
|
+
# # Deletes a view
|
113
|
+
# #
|
114
|
+
# # @author Jason Colyer
|
115
|
+
# # @since 1.0.0
|
116
|
+
# # @return [Boolean]
|
117
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#delete!}
|
118
|
+
# # @see
|
119
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#delete-view
|
120
|
+
# # Zendesk API > Views > Delete View
|
121
|
+
# # @example
|
122
|
+
# # require 'support_ops_zendesk'
|
123
|
+
# #
|
124
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
125
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
126
|
+
# # config.username = 'jason@example.com'
|
127
|
+
# # config.token = 'abc123'
|
128
|
+
# # end
|
129
|
+
# #
|
130
|
+
# # existing_view = SupportOps::Zendesk::Views.get!(9873843)
|
131
|
+
# # existing_view.delete!
|
132
|
+
# def delete!; end
|
133
|
+
# @!parse
|
134
|
+
# # Lists tickets from a view
|
135
|
+
# #
|
136
|
+
# # @author Jason Colyer
|
137
|
+
# # @since 1.0.0
|
138
|
+
# # @return [Object]
|
139
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#tickets}
|
140
|
+
# # @see
|
141
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-tickets-from-a-view
|
142
|
+
# # Zendesk API > Views > List Tickets From a View
|
143
|
+
# # @example
|
144
|
+
# # require 'support_ops_zendesk'
|
145
|
+
# #
|
146
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
147
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
148
|
+
# # config.username = 'jason@example.com'
|
149
|
+
# # config.token = 'abc123'
|
150
|
+
# # end
|
151
|
+
# #
|
152
|
+
# # view = SupportOps::Zendesk::Views.get!(17258763336988)
|
153
|
+
# # tickets = view.tickets
|
154
|
+
# #
|
155
|
+
# # pp tickets.first.status
|
156
|
+
# # # => "pending"
|
157
|
+
# def tickets; end
|
158
|
+
# @!parse
|
159
|
+
# # Previews what a view would look like
|
160
|
+
# #
|
161
|
+
# # @author Jason Colyer
|
162
|
+
# # @since 1.0.0
|
163
|
+
# # @return [Object]
|
164
|
+
# # @note This is inherited from {SupportOps::Zendesk::Base#preview!}
|
165
|
+
# # @see
|
166
|
+
# # https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#preview-views
|
167
|
+
# # Zendesk API > Views > Preview View
|
168
|
+
# # @example
|
169
|
+
# # require 'support_ops_zendesk'
|
170
|
+
# #
|
171
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
172
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
173
|
+
# # config.username = 'jason@example.com'
|
174
|
+
# # config.token = 'abc123'
|
175
|
+
# # end
|
176
|
+
# #
|
177
|
+
# # existing_view = SupportOps::Zendesk::Views.get!(9873858)
|
178
|
+
# # preview = existing_view.preview!
|
179
|
+
# # pp preview['rows']['tickets'].first['id']
|
180
|
+
# # # => 12851
|
181
|
+
# # @example
|
182
|
+
# # require 'support_ops_zendesk'
|
183
|
+
# #
|
184
|
+
# # SupportOps::Zendesk::Configuration.configure do |config|
|
185
|
+
# # config.url = 'https://gitlab.zendesk.com/api/v2'
|
186
|
+
# # config.username = 'jason@example.com'
|
187
|
+
# # config.token = 'abc123'
|
188
|
+
# # end
|
189
|
+
# #
|
190
|
+
# # new_view = SupportOps::Zendesk::Views.new
|
191
|
+
# # new_view.conditions = {
|
192
|
+
# # "all" => [
|
193
|
+
# # { "field" => 'status', "operator" => 'less_than', "value" => 'solved' }
|
194
|
+
# # ],
|
195
|
+
# # "any" => []
|
196
|
+
# # }
|
197
|
+
# # new_view.execution = {
|
198
|
+
# # "columns" => [
|
199
|
+
# # { "id" => 'status', "title" => 'Status', "filterable" => true, "sortable" => true},
|
200
|
+
# # { "id" => 'requester', "title" => 'Requester', "filterable" => true, "sortable" => true},
|
201
|
+
# # { "id" => 'assignee', "title" => 'Assignee', "filterable" => true, "sortable" => true},
|
202
|
+
# # ],
|
203
|
+
# # "group_by" => 'assignee',
|
204
|
+
# # "group_order" => 'desc',
|
205
|
+
# # "sort_by" => 'status',
|
206
|
+
# # "sort_order" => 'desc',
|
207
|
+
# # "group" => {
|
208
|
+
# # "id" => 'assignee',
|
209
|
+
# # "title" => 'Assignee',
|
210
|
+
# # "filterable" => true,
|
211
|
+
# # "sortable" => true,
|
212
|
+
# # "order" => 'desc'
|
213
|
+
# # },
|
214
|
+
# # "sort" => {
|
215
|
+
# # "id" => 'status',
|
216
|
+
# # "title" => 'Status',
|
217
|
+
# # "filterable" => true,
|
218
|
+
# # "sortable" => true,
|
219
|
+
# # "order" => 'desc'
|
220
|
+
# # }
|
221
|
+
# # }
|
222
|
+
# # preview = new_view.preview!
|
223
|
+
# # pp preview['rows']['tickets'].first['id']
|
224
|
+
# # # => 21516
|
225
|
+
# def preview!; end
|
226
|
+
define_attributes :active, :conditions, :created_at, :default,
|
227
|
+
:description, :execution, :id, :position, :restriction,
|
228
|
+
:title, :updated_at
|
229
|
+
readonly_attributes :created_at, :default, :id, :updated_at
|
230
|
+
|
231
|
+
##
|
232
|
+
# Lists views in the Zendesk system
|
233
|
+
#
|
234
|
+
# @author Jason Colyer
|
235
|
+
# @since 1.0.0
|
236
|
+
# @overload list(key: value)
|
237
|
+
# @param access [String optional] Only views with given access. May be
|
238
|
+
# "personal", "shared", or "account"
|
239
|
+
# @param active [Boolean optional]Only active views if true, inactive
|
240
|
+
# views if false
|
241
|
+
# @param group_id [Integer optional] Only views belonging to given group
|
242
|
+
# @param sort_by [String optional] Possible values are "alphabetical",
|
243
|
+
# "created_at", or "updated_at". Defaults to "position"
|
244
|
+
# @param sort_order [String optional] One of "asc" or "desc". Defaults to "asc" for alphabetical and position
|
245
|
+
# sort, "desc" for all others
|
246
|
+
# @param limit [Integer optional] The limit to the number of webhooks
|
247
|
+
# @return [Array]
|
248
|
+
# @see
|
249
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views
|
250
|
+
# Zendesk API > Views > List Views
|
251
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
252
|
+
# @example
|
253
|
+
# require 'support_ops_zendesk'
|
254
|
+
#
|
255
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
256
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
257
|
+
# config.username = 'jason@example.com'
|
258
|
+
# config.token = 'abc123'
|
259
|
+
# end
|
260
|
+
#
|
261
|
+
# views = SupportOps::Zendesk::Views.list(active: true, group_id: 12510506606620, limit: 25)
|
262
|
+
# pp views.count
|
263
|
+
# # => 8
|
264
|
+
def self.list(**args)
|
265
|
+
args[:access] = nil unless args[:access]
|
266
|
+
args[:active] = nil unless args[:active]
|
267
|
+
args[:group_id] = nil unless args[:group_id]
|
268
|
+
args[:sort_by] = nil unless args[:sort_by]
|
269
|
+
args[:sort_order] = nil unless args[:sort_order]
|
270
|
+
args[:limit] = 0 unless args[:limit]
|
271
|
+
params = ''
|
272
|
+
params += "access=#{args[:access]}&" unless args[:access].nil?
|
273
|
+
params += "active=#{args[:active]}&" unless args[:active].nil?
|
274
|
+
params += "group_id=#{args[:group_id]}&" unless args[:group_id].nil?
|
275
|
+
params += "sort_by=#{args[:sort_by]}&" unless args[:sort_by].nil?
|
276
|
+
params += "sort_order=#{args[:sort_order]}&" unless args[:sort_order].nil?
|
277
|
+
views = []
|
278
|
+
opts = "#{params}page[size]=100"
|
279
|
+
loop do
|
280
|
+
response = client.connection.get("views?#{opts}")
|
281
|
+
body = Oj.load(response.body)
|
282
|
+
views += body['views'].map { |v| Views.new(v) }
|
283
|
+
break if args[:limit].to_i.positive? && views.count >= args[:limit].to_i
|
284
|
+
break unless body['meta']['has_more']
|
285
|
+
|
286
|
+
opts = body['links']['next'].split('?').last
|
287
|
+
end
|
288
|
+
return views if args[:limit].to_i.zero?
|
289
|
+
|
290
|
+
views.first(args[:limit].to_i)
|
291
|
+
end
|
292
|
+
|
293
|
+
##
|
294
|
+
# Returns an approximate count of views in the account. If the count exceeds 100,000, it is updated every 24 hours.
|
295
|
+
#
|
296
|
+
# @author Jason Colyer
|
297
|
+
# @since 1.0.0
|
298
|
+
# @return [Hash]
|
299
|
+
# @see
|
300
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#count-views
|
301
|
+
# Zendesk API > Views > Count Views
|
302
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
303
|
+
# @example
|
304
|
+
# require 'support_ops_zendesk'
|
305
|
+
#
|
306
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
307
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
308
|
+
# config.username = 'jason@example.com'
|
309
|
+
# config.token = 'abc123'
|
310
|
+
# end
|
311
|
+
#
|
312
|
+
# orgs = SupportOps::Zendesk::Views.count
|
313
|
+
# pp orgs['value']
|
314
|
+
# # => 102
|
315
|
+
def self.count
|
316
|
+
response = client.connection.get('views/count')
|
317
|
+
Oj.load(response.body)['count']
|
318
|
+
end
|
319
|
+
|
320
|
+
##
|
321
|
+
# Lists active views in the Zendesk system
|
322
|
+
#
|
323
|
+
# @author Jason Colyer
|
324
|
+
# @since 1.0.0
|
325
|
+
# @overload list_active(key: value)
|
326
|
+
# @param access [String optional] Only views with given access. May be
|
327
|
+
# "personal", "shared", or "account"
|
328
|
+
# @param group_id [Integer optional] Only views belonging to given group
|
329
|
+
# @param sort_by [String optional] Possible values are "alphabetical",
|
330
|
+
# "created_at", or "updated_at". Defaults to "position"
|
331
|
+
# @param sort_order [String optional] One of "asc" or "desc". Defaults to "asc" for alphabetical and position
|
332
|
+
# sort, "desc" for all others
|
333
|
+
# @param limit [Integer optional] The limit to the number of webhooks
|
334
|
+
# @return [Array]
|
335
|
+
# @see
|
336
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-active-views
|
337
|
+
# Zendesk API > Views > List Active Views
|
338
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
339
|
+
# @example
|
340
|
+
# require 'support_ops_zendesk'
|
341
|
+
#
|
342
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
343
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
344
|
+
# config.username = 'jason@example.com'
|
345
|
+
# config.token = 'abc123'
|
346
|
+
# end
|
347
|
+
#
|
348
|
+
# views = SupportOps::Zendesk::Views.list_active(group_id: 12510506606620, limit: 25)
|
349
|
+
# pp views.count
|
350
|
+
# # => 8
|
351
|
+
def self.list_active(**args)
|
352
|
+
args[:access] = nil unless args[:access]
|
353
|
+
args[:group_id] = nil unless args[:group_id]
|
354
|
+
args[:sort_by] = nil unless args[:sort_by]
|
355
|
+
args[:sort_order] = nil unless args[:sort_order]
|
356
|
+
args[:limit] = 0 unless args[:limit]
|
357
|
+
params = ''
|
358
|
+
params += "access=#{args[:access]}&" unless args[:access].nil?
|
359
|
+
params += "group_id=#{args[:group_id]}&" unless args[:group_id].nil?
|
360
|
+
params += "sort_by=#{args[:sort_by]}&" unless args[:sort_by].nil?
|
361
|
+
params += "sort_order=#{args[:sort_order]}&" unless args[:sort_order].nil?
|
362
|
+
page = 1
|
363
|
+
views = []
|
364
|
+
loop do
|
365
|
+
response = client.connection.get("views/active?#{params}page=#{page}")
|
366
|
+
body = Oj.load(response.body)
|
367
|
+
views += body['views'].map { |v| Views.new(v) }
|
368
|
+
break if args[:limit].to_i.positive? && views.count >= args[:limit].to_i
|
369
|
+
break if body['views'].count < 100
|
370
|
+
|
371
|
+
page += 1
|
372
|
+
end
|
373
|
+
return views if args[:limit].to_i.zero?
|
374
|
+
|
375
|
+
views.first(args[:limit].to_i)
|
376
|
+
end
|
377
|
+
|
378
|
+
##
|
379
|
+
# Locates a specific view in the Zendesk system
|
380
|
+
#
|
381
|
+
# @author Jason Colyer
|
382
|
+
# @since 1.0.0
|
383
|
+
# @see
|
384
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#show-view
|
385
|
+
# Zendesk API > Views > Show View
|
386
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
387
|
+
# @example
|
388
|
+
# require 'support_ops_zendesk'
|
389
|
+
#
|
390
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
391
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
392
|
+
# config.username = 'jason@example.com'
|
393
|
+
# config.token = 'abc123'
|
394
|
+
# end
|
395
|
+
#
|
396
|
+
# views = SupportOps::Zendesk::Views.get(25)
|
397
|
+
# pp view.title
|
398
|
+
# # => "I'm the 25th view"
|
399
|
+
def self.get(object)
|
400
|
+
if object.is_a? Views
|
401
|
+
Views.new(id: id).find
|
402
|
+
else
|
403
|
+
Views.new(id: object).find
|
404
|
+
end
|
405
|
+
end
|
406
|
+
|
407
|
+
##
|
408
|
+
# Locates a specific view in the Zendesk system
|
409
|
+
#
|
410
|
+
# @author Jason Colyer
|
411
|
+
# @since 1.0.0
|
412
|
+
# @see
|
413
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#show-view
|
414
|
+
# Zendesk API > Views > Show View
|
415
|
+
# @see SupportOps::Zendesk::Configuration Setting up a client
|
416
|
+
# @example
|
417
|
+
# require 'support_ops_zendesk'
|
418
|
+
#
|
419
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
420
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
421
|
+
# config.username = 'jason@example.com'
|
422
|
+
# config.token = 'abc123'
|
423
|
+
# end
|
424
|
+
#
|
425
|
+
# views = SupportOps::Zendesk::Views.get!(25)
|
426
|
+
# pp view.title
|
427
|
+
# # => "I'm the 25th view"
|
428
|
+
def self.get!(object)
|
429
|
+
if object.is_a? Views
|
430
|
+
Views.new(id: id).find!
|
431
|
+
else
|
432
|
+
Views.new(id: object).find!
|
433
|
+
end
|
434
|
+
end
|
435
|
+
|
436
|
+
##
|
437
|
+
# Locates up to 100 views within Zendesk.
|
438
|
+
#
|
439
|
+
# @author Jason Colyer
|
440
|
+
# @since 1.0.0
|
441
|
+
# @param view_ids [Array] The view IDs to find
|
442
|
+
# @return [Array]
|
443
|
+
# @see
|
444
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#list-views-by-id
|
445
|
+
# Zendesk API > Views > Show Views By ID
|
446
|
+
# @example
|
447
|
+
# require 'support_ops_zendesk'
|
448
|
+
#
|
449
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
450
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
451
|
+
# config.username = 'jason@example.com'
|
452
|
+
# config.token = 'abc123'
|
453
|
+
# end
|
454
|
+
#
|
455
|
+
# views = SupportOps::Zendesk::Views.get_many([255, 256])
|
456
|
+
# pp views.map { |t| t.title }
|
457
|
+
# # => ["View 255", "256th View"]
|
458
|
+
def self.get_many(view_ids)
|
459
|
+
raise 'The parameter must be an Array' unless view_ids.is_a? Array
|
460
|
+
raise 'You can only get a maximum of 100 views at a time' if view_ids.count > 100
|
461
|
+
|
462
|
+
response = client.connection.get("views/show_many?ids=#{view_ids.join(',')}")
|
463
|
+
Oj.load(response.body)['views'].map { |v| Views.new(v) }
|
464
|
+
end
|
465
|
+
|
466
|
+
##
|
467
|
+
# Returns a Hash used in creating/updating views, as the formatting does not match the Zendesk list functions
|
468
|
+
#
|
469
|
+
# @author Jason Colyer
|
470
|
+
# @since 1.0.0
|
471
|
+
# @param view [Object] An instance of {SupportOps::Zendesk::Views}
|
472
|
+
# @return [Hash]
|
473
|
+
# @example
|
474
|
+
# require 'support_ops_zendesk'
|
475
|
+
#
|
476
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
477
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
478
|
+
# config.username = 'jason@example.com'
|
479
|
+
# config.token = 'abc123'
|
480
|
+
# end
|
481
|
+
#
|
482
|
+
# view = SupportOps::Zendesk::Views.get!(9873858)
|
483
|
+
# object = SupportOps::Zendesk::Views.create_or_update_object(view)
|
484
|
+
# pp object[:id]
|
485
|
+
# # => 9873858
|
486
|
+
def self.create_or_update_object(view)
|
487
|
+
{
|
488
|
+
id: view.id,
|
489
|
+
title: view.title,
|
490
|
+
description: view.description,
|
491
|
+
active: view.active,
|
492
|
+
position: view.position,
|
493
|
+
restriction: view.restriction,
|
494
|
+
all: view.conditions['all'],
|
495
|
+
any: view.conditions['any'],
|
496
|
+
output: {
|
497
|
+
columns: view.execution['columns'].map { |c| c['id'] },
|
498
|
+
group_by: view.execution['group_by'],
|
499
|
+
group_order: view.execution['group_order'],
|
500
|
+
sort_by: view.execution['sort_by'],
|
501
|
+
sort_order: view.execution['sort_order']
|
502
|
+
}
|
503
|
+
}.compact
|
504
|
+
end
|
505
|
+
|
506
|
+
##
|
507
|
+
# Deletes multiple views via a batch job
|
508
|
+
#
|
509
|
+
# @author Jason Colyer
|
510
|
+
# @since 1.0.0
|
511
|
+
# @param view_ids [Array] An array of view IDs
|
512
|
+
# @return [object] A {SupportOps::Zendesk::JobStatuses} instance
|
513
|
+
# @see
|
514
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#bulk-delete-views
|
515
|
+
# Zendesk API > views > Bulk Delete Views
|
516
|
+
# @example
|
517
|
+
# require 'support_ops_zendesk'
|
518
|
+
#
|
519
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
520
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
521
|
+
# config.username = 'jason@example.com'
|
522
|
+
# config.token = 'abc123'
|
523
|
+
# end
|
524
|
+
#
|
525
|
+
# delete = SupportOps::Zendesk::Views.delete_many!([123, 456])
|
526
|
+
# pp delete.id
|
527
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
528
|
+
def self.delete_many!(view_ids)
|
529
|
+
raise 'The parameter must be an Array' unless view_ids.is_a? Array
|
530
|
+
raise 'You can only delete a maximum of 100 views at a time' if view_ids.count > 100
|
531
|
+
|
532
|
+
response = client.connection.delete("views/destroy_many?ids=#{view_ids.join(',')}")
|
533
|
+
raise "Failed to delete views => #{body['details']}" if response.status != 200
|
534
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
535
|
+
end
|
536
|
+
|
537
|
+
##
|
538
|
+
# Updates multiple views via a batch job
|
539
|
+
#
|
540
|
+
# @author Jason Colyer
|
541
|
+
# @since 1.0.0
|
542
|
+
# @param views [Array] An array of {SupportOps::Zendesk::Views} instances
|
543
|
+
# @return [object] A {SupportOps::Zendesk::JobStatuses} instance
|
544
|
+
# @see
|
545
|
+
# https://developer.zendesk.com/api-reference/ticketing/business-rules/views/#update-many-views
|
546
|
+
# Zendesk API > Views > Update Many Views
|
547
|
+
# @example
|
548
|
+
# require 'support_ops_zendesk'
|
549
|
+
#
|
550
|
+
# SupportOps::Zendesk::Configuration.configure do |config|
|
551
|
+
# config.url = 'https://gitlab.zendesk.com/api/v2'
|
552
|
+
# config.username = 'jason@example.com'
|
553
|
+
# config.token = 'abc123'
|
554
|
+
# end
|
555
|
+
#
|
556
|
+
# view1 = SupportOps::Zendesk::Views.get!(123)
|
557
|
+
# view1.title = 'Org for Alice Company'
|
558
|
+
# view2 = SupportOps::Zendesk::Views.get!(456)
|
559
|
+
# view2.title = 'Org for Bob Company'
|
560
|
+
#
|
561
|
+
# updates = SupportOps::Zendesk::Views.update_many!([view1, view2])
|
562
|
+
# pp updates.id
|
563
|
+
# # => "82de0b044094f0c67893ac9fe64f1a99"
|
564
|
+
def self.update_many!(views)
|
565
|
+
raise 'The parameter must be an Array' unless views.is_a? Array
|
566
|
+
raise 'You can only update a maximum of 100 views at a time' if views.count > 100
|
567
|
+
raise 'You can only use SupportOps::Zendesk::Views instances in the Array' unless views.reject { |o| o.is_a? SupportOps::Zendesk::Views }.count.zero?
|
568
|
+
|
569
|
+
data = { views: views.map { |v| Views.create_or_update_object(v) } }.to_json
|
570
|
+
response = client.connection.put('views/update_many', data)
|
571
|
+
raise "Failed to update views => #{body['details']}" if response.status != 200
|
572
|
+
JobStatuses.new(Oj.load(response.body)['job_status'])
|
573
|
+
end
|
574
|
+
|
575
|
+
private
|
576
|
+
|
577
|
+
##
|
578
|
+
# @private
|
579
|
+
def get_record
|
580
|
+
response = self.client.connection.get("views/#{self.id}")
|
581
|
+
return nil if response.status != 200
|
582
|
+
|
583
|
+
Oj.load(response.body)['view']
|
584
|
+
end
|
585
|
+
|
586
|
+
##
|
587
|
+
# @private
|
588
|
+
def create_record
|
589
|
+
response = self.client.connection.post("views", { view: Views.create_or_update_object(self) }.to_json)
|
590
|
+
body = Oj.load(response.body)
|
591
|
+
raise "Failed to create view => #{body['details']}" if response.status != 201
|
592
|
+
body['view']
|
593
|
+
end
|
594
|
+
|
595
|
+
##
|
596
|
+
# @private
|
597
|
+
def update_record
|
598
|
+
raise "Failed to update view => You didn't change anything in the object" if attributes_for_save.keys == [:id]
|
599
|
+
response = self.client.connection.put("views/#{self.id}", { view: Views.create_or_update_object(self) }.to_json)
|
600
|
+
body = Oj.load(response.body)
|
601
|
+
raise "Failed to update view #{self.id} => #{body['details']}" if response.status != 200
|
602
|
+
body['view']
|
603
|
+
end
|
604
|
+
|
605
|
+
##
|
606
|
+
# @private
|
607
|
+
def delete_record
|
608
|
+
response = self.client.connection.delete("views/#{self.id}")
|
609
|
+
raise "Failed to delete view => #{body['details']}" if response.status != 204
|
610
|
+
true
|
611
|
+
end
|
612
|
+
|
613
|
+
##
|
614
|
+
# @private
|
615
|
+
def tickets_record
|
616
|
+
response = self.client.connection.get("views/#{self.id}/tickets")
|
617
|
+
Oj.load(response.body)['tickets'].map { |t| Tickets.new(t) }
|
618
|
+
end
|
619
|
+
|
620
|
+
##
|
621
|
+
# @private
|
622
|
+
def preview_record
|
623
|
+
converted = Views.create_or_update_object(self)
|
624
|
+
data = {
|
625
|
+
all: converted[:all],
|
626
|
+
any: converted[:any],
|
627
|
+
output: converted[:output]
|
628
|
+
}.compact
|
629
|
+
response = self.client.connection.post('views/preview', { view: data }.to_json)
|
630
|
+
body = Oj.load(response.body)
|
631
|
+
raise "Unable to generate a preview => #{body}" if response.status != 200
|
632
|
+
body
|
633
|
+
end
|
634
|
+
end
|
635
|
+
end
|
636
|
+
end
|