gitlab_support_readiness 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/support_readiness/client.rb +108 -0
- data/lib/support_readiness/gitlab/client.rb +64 -0
- data/lib/support_readiness/gitlab/configuration.rb +46 -0
- data/lib/support_readiness/gitlab/groups.rb +180 -0
- data/lib/support_readiness/gitlab/issues.rb +410 -0
- data/lib/support_readiness/gitlab/namespaces.rb +190 -0
- data/lib/support_readiness/gitlab/projects.rb +510 -0
- data/lib/support_readiness/gitlab/repositories.rb +267 -0
- data/lib/support_readiness/gitlab/users.rb +488 -0
- data/lib/support_readiness/gitlab.rb +19 -0
- data/lib/support_readiness/pagerduty/client.rb +66 -0
- data/lib/support_readiness/pagerduty/configuration.rb +43 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +123 -0
- data/lib/support_readiness/pagerduty/schedules.rb +223 -0
- data/lib/support_readiness/pagerduty/services.rb +132 -0
- data/lib/support_readiness/pagerduty.rb +16 -0
- data/lib/support_readiness/redis.rb +90 -0
- data/lib/support_readiness/zendesk/articles.rb +210 -0
- data/lib/support_readiness/zendesk/automations.rb +304 -0
- data/lib/support_readiness/zendesk/client.rb +84 -0
- data/lib/support_readiness/zendesk/configuration.rb +49 -0
- data/lib/support_readiness/zendesk/group_memberships.rb +256 -0
- data/lib/support_readiness/zendesk/groups.rb +249 -0
- data/lib/support_readiness/zendesk/job_statuses.rb +188 -0
- data/lib/support_readiness/zendesk/macros.rb +267 -0
- data/lib/support_readiness/zendesk/organization_fields.rb +233 -0
- data/lib/support_readiness/zendesk/organization_memberships.rb +257 -0
- data/lib/support_readiness/zendesk/organizations.rb +515 -0
- data/lib/support_readiness/zendesk/roles.rb +194 -0
- data/lib/support_readiness/zendesk/search.rb +159 -0
- data/lib/support_readiness/zendesk/sla_policies.rb +232 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +222 -0
- data/lib/support_readiness/zendesk/ticket_forms.rb +290 -0
- data/lib/support_readiness/zendesk/tickets.rb +854 -0
- data/lib/support_readiness/zendesk/triggers.rb +269 -0
- data/lib/support_readiness/zendesk/users.rb +946 -0
- data/lib/support_readiness/zendesk/views.rb +469 -0
- data/lib/support_readiness/zendesk.rb +31 -0
- data/lib/support_readiness.rb +29 -0
- metadata +215 -0
@@ -0,0 +1,210 @@
|
|
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 Articles within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Articles < Readiness::Client
|
13
|
+
attr_accessor :author_id, :body, :comments_disabled, :draft, :id, :label_names, :locale, :name, :permission_group_id, :position, :promoted, :section_id, :title, :user_segment_id
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Zendesk::Articles} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @param object [Object] An instance of {Readiness::Zendesk::Articles}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# Readiness::Zendesk::Articles.new
|
24
|
+
def initialize(object = {})
|
25
|
+
@author_id = object['author_id']
|
26
|
+
@body = object['body']
|
27
|
+
@comments_disabled = object['comments_disabled']
|
28
|
+
@draft = object['draft']
|
29
|
+
@id = object['id']
|
30
|
+
@label_names = object['label_names']
|
31
|
+
@locale = object['locale']
|
32
|
+
@name = object['name']
|
33
|
+
@permission_group_id = object['permission_group_id']
|
34
|
+
@position = object['position']
|
35
|
+
@promoted = object['promoted']
|
36
|
+
@section_id = object['section_id']
|
37
|
+
@title = object['title']
|
38
|
+
@user_segment_id = object['user_segment_id']
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Lists articles
|
43
|
+
#
|
44
|
+
# @author Jason Colyer
|
45
|
+
# @since 1.0.0
|
46
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
47
|
+
# @return [Array]
|
48
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#list-articles Zendesk API > Articles > List Articles
|
49
|
+
# @example
|
50
|
+
# require 'support_readiness'
|
51
|
+
# config = Readiness::Zendesk::Configuration.new
|
52
|
+
# config.username = 'alice@example.com'
|
53
|
+
# config.token = 'test123abc'
|
54
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
55
|
+
# client = Readiness::Zendesk::Client.new(config)
|
56
|
+
# articles = Readiness::Zendesk::Articles.list(client)
|
57
|
+
# pp articles.first.id
|
58
|
+
# # => 35467
|
59
|
+
def self.list(client)
|
60
|
+
array = []
|
61
|
+
opts = "page[size]=100"
|
62
|
+
loop do
|
63
|
+
response = client.connection.get("help_center/articles?#{opts}")
|
64
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
65
|
+
body = Oj.load(response.body)
|
66
|
+
array += body['articles'].map { |a| Articles.new(a) }
|
67
|
+
break unless body['meta']['has_more']
|
68
|
+
|
69
|
+
opts = body['links'] ['next'].split('?').last
|
70
|
+
end
|
71
|
+
array
|
72
|
+
end
|
73
|
+
|
74
|
+
##
|
75
|
+
# Locates an article within Zendesk. This will not exit on error (except Authentication errors)
|
76
|
+
#
|
77
|
+
# @author Jason Colyer
|
78
|
+
# @since 1.0.0
|
79
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
80
|
+
# @param aid [Integer] The article ID to find
|
81
|
+
# @return [Hash]
|
82
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#show-article Zendesk API > Articles > Show Article
|
83
|
+
# @example
|
84
|
+
# require 'support_readiness'
|
85
|
+
# config = Readiness::Zendesk::Configuration.new
|
86
|
+
# config.username = 'alice@example.com'
|
87
|
+
# config.token = 'test123abc'
|
88
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
89
|
+
# client = Readiness::Zendesk::Client.new(config)
|
90
|
+
# article = Readiness::Zendesk::Articles.find(client, 35467)
|
91
|
+
# pp article.title
|
92
|
+
# # => "Article title"
|
93
|
+
def self.find(client, aid)
|
94
|
+
response = client.connection.get("help_center/articles/#{aid}")
|
95
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: aid }) unless response.status == 200
|
96
|
+
return Articles.new(Oj.load(response.body)['article']) if response.status == 200
|
97
|
+
|
98
|
+
Oj.load(response.body)
|
99
|
+
end
|
100
|
+
|
101
|
+
##
|
102
|
+
# Locates an article within Zendesk. This will exit on error
|
103
|
+
#
|
104
|
+
# @author Jason Colyer
|
105
|
+
# @since 1.0.0
|
106
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
107
|
+
# @param aid [Integer] The article ID to find
|
108
|
+
# @return [Object] An instance of {Readiness::Zendesk::Articles}
|
109
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#show-article Zendesk API > Articles > Show Article
|
110
|
+
# @example
|
111
|
+
# require 'support_readiness'
|
112
|
+
# config = Readiness::Zendesk::Configuration.new
|
113
|
+
# config.username = 'alice@example.com'
|
114
|
+
# config.token = 'test123abc'
|
115
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
116
|
+
# client = Readiness::Zendesk::Client.new(config)
|
117
|
+
# article = Readiness::Zendesk::Articles.find!(client, 35467)
|
118
|
+
# pp article.title
|
119
|
+
# # => "Article title"
|
120
|
+
def self.find!(client, aid)
|
121
|
+
response = client.connection.get("help_center/articles/#{aid}")
|
122
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Find article', id: aid }) unless response.status == 200
|
123
|
+
Articles.new(Oj.load(response.body)['article'])
|
124
|
+
end
|
125
|
+
|
126
|
+
##
|
127
|
+
# Creates an article. Will exit if unsuccessful
|
128
|
+
#
|
129
|
+
# @author Jason Colyer
|
130
|
+
# @since 1.0.0
|
131
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
132
|
+
# @param article [Object] An instance of {Readiness::Zendesk::Articles}
|
133
|
+
# @return [Object] An instance of {Readiness::Zendesk::Articles}
|
134
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#create-article Zendesk API > Articles > Create Article
|
135
|
+
# @example
|
136
|
+
# require 'support_readiness'
|
137
|
+
# config = Readiness::Zendesk::Configuration.new
|
138
|
+
# config.username = 'alice@example.com'
|
139
|
+
# config.token = 'test123abc'
|
140
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
141
|
+
# client = Readiness::Zendesk::Client.new(config)
|
142
|
+
# article = Readiness::Zendesk::Articles.new
|
143
|
+
# article.title = 'Taking photos in low light'
|
144
|
+
# artricle.body = 'Use a tripod'
|
145
|
+
# article.section_id = 123
|
146
|
+
# article.locale = 'en-us'
|
147
|
+
# create = Readiness::Zendesk::Articles.create!(client, article)
|
148
|
+
# pp create.id
|
149
|
+
# # => 35468
|
150
|
+
def self.create!(client, article)
|
151
|
+
response = client.connection.post "help_center/sections/#{article.section_id}/articles", to_clean_json_with_key(article, 'article')
|
152
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create article', message: Oj.load(response.body)}) unless response.status == 201
|
153
|
+
Articles.new(Oj.load(response.body)['article'])
|
154
|
+
end
|
155
|
+
|
156
|
+
##
|
157
|
+
# Updates an article. Will exit if unsuccessful
|
158
|
+
#
|
159
|
+
# @author Jason Colyer
|
160
|
+
# @since 1.0.0
|
161
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
162
|
+
# @param article [Object] An instance of {Readiness::Zendesk::Articles}
|
163
|
+
# @return [Object] An instance of {Readiness::Zendesk::Articles}
|
164
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#update-article Zendesk API > Articles > Update Article
|
165
|
+
# @example
|
166
|
+
# require 'support_readiness'
|
167
|
+
# config = Readiness::Zendesk::Configuration.new
|
168
|
+
# config.username = 'alice@example.com'
|
169
|
+
# config.token = 'test123abc'
|
170
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
171
|
+
# client = Readiness::Zendesk::Client.new(config)
|
172
|
+
# article = Readiness::Zendesk::Articles.find!(client, 35468)
|
173
|
+
# artricle.body = 'Use a tripod and low light approved camera'
|
174
|
+
# update = Readiness::Zendesk::Articles.update!(client, article)
|
175
|
+
# pp update.body
|
176
|
+
# # => "Use a tripod and low light approved camera"
|
177
|
+
def self.update!(client, article)
|
178
|
+
response = client.connection.put "help_center/sections/#{article.section_id}/articles", to_clean_json_with_key(article, 'article')
|
179
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update article', id: article.id, message: Oj.load(response.body)}) unless response.status == 200
|
180
|
+
Articles.new(Oj.load(response.body)['article'])
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# Archives an article. Will exit if unsuccessful
|
185
|
+
#
|
186
|
+
# @author Jason Colyer
|
187
|
+
# @since 1.0.0
|
188
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
189
|
+
# @param article [Object] An instance of {Readiness::Zendesk::Articles}
|
190
|
+
# @return [Boolean]
|
191
|
+
# @see https://developer.zendesk.com/api-reference/help_center/help-center-api/articles/#archive-article Zendesk API > Articles > Archive Article
|
192
|
+
# @example
|
193
|
+
# require 'support_readiness'
|
194
|
+
# config = Readiness::Zendesk::Configuration.new
|
195
|
+
# config.username = 'alice@example.com'
|
196
|
+
# config.token = 'test123abc'
|
197
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
198
|
+
# client = Readiness::Zendesk::Client.new(config)
|
199
|
+
# article = Readiness::Zendesk::Articles.find!(client, 35468)
|
200
|
+
# archive = Readiness::Zendesk::Articles.archive!(client, article)
|
201
|
+
# pp archive
|
202
|
+
# # => true
|
203
|
+
def self.archive!(client, article)
|
204
|
+
response = client.connection.delete "help_center/articles/#{article_id}"
|
205
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Archive article', id: article.id, message: Oj.load(response.body)}) unless response.status == 204
|
206
|
+
true
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
end
|
@@ -0,0 +1,304 @@
|
|
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 Automations within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Automations < Readiness::Client
|
13
|
+
attr_accessor :actions, :active, :conditions, :default, :id, :position, :title
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Zendesk::Automations} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @param object [Object] An instance of {Readiness::Zendesk::Automations}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# Readiness::Zendesk::Automations.new
|
24
|
+
def initialize(object = {})
|
25
|
+
@actions = object['actions']
|
26
|
+
@active = object['active']
|
27
|
+
@conditions = object['conditions']
|
28
|
+
@default = object['default']
|
29
|
+
@id = object['id']
|
30
|
+
@position = object['position']
|
31
|
+
@title = object['title']
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Lists automations.
|
36
|
+
#
|
37
|
+
# @author Jason Colyer
|
38
|
+
# @since 1.0.0
|
39
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
40
|
+
# @return [Array]
|
41
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#list-automations Zendesk API > Automations > List Automations
|
42
|
+
# @example
|
43
|
+
# require 'support_readiness'
|
44
|
+
# config = Readiness::Zendesk::Configuration.new
|
45
|
+
# config.username = 'alice@example.com'
|
46
|
+
# config.token = 'test123abc'
|
47
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
48
|
+
# client = Readiness::Zendesk::Client.new(config)
|
49
|
+
# automations = Readiness::Zendesk::Automations.list(client)
|
50
|
+
# pp automations.first.id
|
51
|
+
# # => 25
|
52
|
+
def self.list(client)
|
53
|
+
array = []
|
54
|
+
opts = "page[size]=100"
|
55
|
+
loop do
|
56
|
+
response = client.connection.get("automations?#{opts}")
|
57
|
+
handle_request_error(0, 'Zendesk', response.status) unless response.status == 200
|
58
|
+
body = Oj.load(response.body)
|
59
|
+
array += body['automations'].map { |a| Automations.new(a) }
|
60
|
+
break unless body['meta']['has_more']
|
61
|
+
|
62
|
+
opts = body['links'] ['next'].split('?').last
|
63
|
+
end
|
64
|
+
array
|
65
|
+
end
|
66
|
+
|
67
|
+
##
|
68
|
+
# Locates an automation within Zendesk. This will not exit on error (except Authentication errors)
|
69
|
+
#
|
70
|
+
# @author Jason Colyer
|
71
|
+
# @since 1.0.0
|
72
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
73
|
+
# @param aid [Integer] The automation ID to find
|
74
|
+
# @return [Hash]
|
75
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#show-automation Zendesk API > Automations > Show Automation
|
76
|
+
# @example
|
77
|
+
# require 'support_readiness'
|
78
|
+
# config = Readiness::Zendesk::Configuration.new
|
79
|
+
# config.username = 'alice@example.com'
|
80
|
+
# config.token = 'test123abc'
|
81
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
82
|
+
# client = Readiness::Zendesk::Client.new(config)
|
83
|
+
# automation = Readiness::Zendesk::Automations.find(client, 25)
|
84
|
+
# pp automation.title
|
85
|
+
# # => "Close and Save"
|
86
|
+
def self.find(client, aid)
|
87
|
+
response = client.connection.get("automations/#{aid}")
|
88
|
+
handle_request_error(0, 'Zendesk', response.status, { action: 'get', id: aid }) unless response.status == 200
|
89
|
+
return Automations.new(Oj.load(response.body)['automation']) if response.status == 200
|
90
|
+
|
91
|
+
Oj.load(response.body)
|
92
|
+
end
|
93
|
+
|
94
|
+
##
|
95
|
+
# Locates an automation within Zendesk. This will exit on error
|
96
|
+
#
|
97
|
+
# @author Jason Colyer
|
98
|
+
# @since 1.0.0
|
99
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
100
|
+
# @param aid [Integer] The automation ID to find
|
101
|
+
# @return [Object] An instance of {Readiness::Zendesk::Automations}
|
102
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#show-automation Zendesk API > Automations > Show Automation
|
103
|
+
# @example
|
104
|
+
# require 'support_readiness'
|
105
|
+
# config = Readiness::Zendesk::Configuration.new
|
106
|
+
# config.username = 'alice@example.com'
|
107
|
+
# config.token = 'test123abc'
|
108
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
109
|
+
# client = Readiness::Zendesk::Client.new(config)
|
110
|
+
# automation = Readiness::Zendesk::Automations.find!(client, 25)
|
111
|
+
# pp automation.title
|
112
|
+
# # => "Close and Save"
|
113
|
+
def self.find!(client, aid)
|
114
|
+
response = client.connection.get("automations/#{aid}")
|
115
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Find automation', id: aid }) unless response.status == 200
|
116
|
+
Automations.new(Oj.load(response.body)['automation'])
|
117
|
+
end
|
118
|
+
|
119
|
+
##
|
120
|
+
# Creates an automation. Will exit if unsuccessful
|
121
|
+
#
|
122
|
+
# @author Jason Colyer
|
123
|
+
# @since 1.0.0
|
124
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
125
|
+
# @param automation [Object] An instance of {Readiness::Zendesk::Automations}
|
126
|
+
# @return [Object] An instance of {Readiness::Zendesk::Automations}
|
127
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#create-automation Zendesk API > Automations > Create Automation
|
128
|
+
# @example
|
129
|
+
# require 'support_readiness'
|
130
|
+
# config = Readiness::Zendesk::Configuration.new
|
131
|
+
# config.username = 'alice@example.com'
|
132
|
+
# config.token = 'test123abc'
|
133
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
134
|
+
# client = Readiness::Zendesk::Client.new(config)
|
135
|
+
# automation = Readiness::Zendesk::Automations.new
|
136
|
+
# automation.title = 'Change priority to low for solved tickets'
|
137
|
+
# automation.conditions = {
|
138
|
+
# all: [
|
139
|
+
# {
|
140
|
+
# field: 'status'
|
141
|
+
# operator: 'is'
|
142
|
+
# value: 'solved'
|
143
|
+
# },
|
144
|
+
# {
|
145
|
+
# field: 'priority'
|
146
|
+
# operator: 'is_not'
|
147
|
+
# value: 'low'
|
148
|
+
# }
|
149
|
+
# ]
|
150
|
+
# any: []
|
151
|
+
# }
|
152
|
+
# automation.actions = [
|
153
|
+
# {
|
154
|
+
# field: 'priority'
|
155
|
+
# value: 'low'
|
156
|
+
# }
|
157
|
+
# ]
|
158
|
+
# created = Readiness::Zendesk::Automations.create!(client, automation)
|
159
|
+
# pp created.id
|
160
|
+
# # => 26
|
161
|
+
def self.create!(client, automation)
|
162
|
+
response = client.connection.post 'automations', to_clean_json_with_key(automation, 'automation')
|
163
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Create automation', message: Oj.load(response.body)}) unless response.status == 201
|
164
|
+
Automations.new(Oj.load(response.body)['automation'])
|
165
|
+
end
|
166
|
+
|
167
|
+
##
|
168
|
+
# Updates an automation. Will exit if unsuccessful
|
169
|
+
#
|
170
|
+
# @author Jason Colyer
|
171
|
+
# @since 1.0.0
|
172
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
173
|
+
# @param automation [Object] An instance of {Readiness::Zendesk::Automations}
|
174
|
+
# @return [Object] An instance of {Readiness::Zendesk::Automations}
|
175
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#update-automation Zendesk API > Automations > Update Automation
|
176
|
+
# @example
|
177
|
+
# require 'support_readiness'
|
178
|
+
# config = Readiness::Zendesk::Configuration.new
|
179
|
+
# config.username = 'alice@example.com'
|
180
|
+
# config.token = 'test123abc'
|
181
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
182
|
+
# client = Readiness::Zendesk::Client.new(config)
|
183
|
+
# automation = Readiness::Zendesk::Automations.find!(client, 26)
|
184
|
+
# automation.title = 'Change priority to medium for solved tickets'
|
185
|
+
# automation.conditions = {
|
186
|
+
# all: [
|
187
|
+
# {
|
188
|
+
# field: 'status'
|
189
|
+
# operator: 'is'
|
190
|
+
# value: 'solved'
|
191
|
+
# },
|
192
|
+
# {
|
193
|
+
# field: 'priority'
|
194
|
+
# operator: 'is_not'
|
195
|
+
# value: 'medium'
|
196
|
+
# }
|
197
|
+
# ]
|
198
|
+
# any: []
|
199
|
+
# }
|
200
|
+
# automation.actions = [
|
201
|
+
# {
|
202
|
+
# field: 'priority'
|
203
|
+
# value: 'medium'
|
204
|
+
# }
|
205
|
+
# ]
|
206
|
+
# updated = Readiness::Zendesk::Automations.update!(client, automation)
|
207
|
+
# pp updated.title
|
208
|
+
# # => "Change priority to medium for solved tickets"
|
209
|
+
def self.update!(client, automation)
|
210
|
+
response = client.connection.put "automations/#{automation.id}", to_clean_json_with_key(automation, 'automation')
|
211
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update automation', id: automation.id, message: Oj.load(response.body)}) unless response.status == 200
|
212
|
+
Automations.new(Oj.load(response.body)['automation'])
|
213
|
+
end
|
214
|
+
|
215
|
+
##
|
216
|
+
# Updates multiple automations via a batch job
|
217
|
+
#
|
218
|
+
# @author Jason Colyer
|
219
|
+
# @since 1.0.0
|
220
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
221
|
+
# @param automations [Array] An array of {Readiness::Zendesk::Automations} instances
|
222
|
+
# @return [Array]
|
223
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#update-many-automations Zendesk API > Automations > Update Many Automations
|
224
|
+
# @example
|
225
|
+
# require 'support_readiness'
|
226
|
+
# config = Readiness::Zendesk::Configuration.new
|
227
|
+
# config.username = 'alice@example.com'
|
228
|
+
# config.token = 'test123abc'
|
229
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
230
|
+
# client = Readiness::Zendesk::Client.new(config)
|
231
|
+
# automation1 = Readiness::Zendesk::Automations.find!(client, 1)
|
232
|
+
# automation2 = Readiness::Zendesk::Automations.find!(client, 2)
|
233
|
+
# automation3 = Readiness::Zendesk::Automations.find!(client, 3)
|
234
|
+
# automation1.position = 2
|
235
|
+
# automation2.position = 3
|
236
|
+
# automation3.position = 1
|
237
|
+
# automations = [automation1, automation2, automation3]
|
238
|
+
# updated = Readiness::Zendesk::Automations.update_many!(client, automation)
|
239
|
+
# pp updated.first.position
|
240
|
+
# # => 2
|
241
|
+
def self.update_many(client, automations)
|
242
|
+
data = { automations: automations.map { |t| to_hash(t).compact } }.to_json
|
243
|
+
response = client.connection.put('automations/update_many', data)
|
244
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Update many automations', message: Oj.load(response.body)}) unless response.status == 200
|
245
|
+
Oj.load(response.body).map { |a| Automations.new(a) }
|
246
|
+
end
|
247
|
+
|
248
|
+
##
|
249
|
+
# Deletes an automation. Will exit if unsuccessful
|
250
|
+
#
|
251
|
+
# @author Jason Colyer
|
252
|
+
# @since 1.0.0
|
253
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
254
|
+
# @param automation [Object] An instance of {Readiness::Zendesk::Automations}
|
255
|
+
# @return [Boolean]
|
256
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#delete-automation Zendesk API > Automations > Delete Automation
|
257
|
+
# @example
|
258
|
+
# require 'support_readiness'
|
259
|
+
# config = Readiness::Zendesk::Configuration.new
|
260
|
+
# config.username = 'alice@example.com'
|
261
|
+
# config.token = 'test123abc'
|
262
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
263
|
+
# client = Readiness::Zendesk::Client.new(config)
|
264
|
+
# automation = Readiness::Zendesk::Automations.find!(client, 26)
|
265
|
+
# deleted = Readiness::Zendesk::Automations.delete!(client, automation)
|
266
|
+
# pp deleted
|
267
|
+
# # => true
|
268
|
+
def self.delete!(client, automation)
|
269
|
+
response = client.connection.delete "automations/#{automation.id}"
|
270
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete an automation', id: automation.id, message: Oj.load(response.body)}) unless response.status == 204
|
271
|
+
true
|
272
|
+
end
|
273
|
+
|
274
|
+
##
|
275
|
+
# Deletes multiple automations via a batch job
|
276
|
+
#
|
277
|
+
# @author Jason Colyer
|
278
|
+
# @since 1.0.0
|
279
|
+
# @param client [Object] An instance of {Readiness::Zendesk::Client}
|
280
|
+
# @param aids [Array] An array of automation IDs
|
281
|
+
# @return [Boolean]
|
282
|
+
# @see https://developer.zendesk.com/api-reference/ticketing/business-rules/automations/#bulk-delete-automations Zendesk API > Automations > Bulk Delete Automations
|
283
|
+
# @example
|
284
|
+
# require 'support_readiness'
|
285
|
+
# config = Readiness::Zendesk::Configuration.new
|
286
|
+
# config.username = 'alice@example.com'
|
287
|
+
# config.token = 'test123abc'
|
288
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
289
|
+
# client = Readiness::Zendesk::Client.new(config)
|
290
|
+
# automation1 = Readiness::Zendesk::Automations.find!(client, 1)
|
291
|
+
# automation2 = Readiness::Zendesk::Automations.find!(client, 2)
|
292
|
+
# automation3 = Readiness::Zendesk::Automations.find!(client, 3)
|
293
|
+
# automations = [automation1, automation2, automation3]
|
294
|
+
# deleted = Readiness::Zendesk::Automations.delete_many!(client, automation)
|
295
|
+
# pp deleted
|
296
|
+
# # => true
|
297
|
+
def self.delete_many!(client, aids)
|
298
|
+
response = client.connection.delete("automations/destroy_many?ids=#{aids.join(',')}")
|
299
|
+
handle_request_error(1, 'Zendesk', response.status, { action: 'Delete many automations', message: Oj.load(response.body)}) unless response.status == 204
|
300
|
+
true
|
301
|
+
end
|
302
|
+
end
|
303
|
+
end
|
304
|
+
end
|
@@ -0,0 +1,84 @@
|
|
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 Client within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Client
|
13
|
+
attr_reader :connection, :upload_connection
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Zendesk::Client} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# config = Readiness::Zendesk::Configuration.new
|
24
|
+
# config.username = 'alice@example.com'
|
25
|
+
# config.token = 'test123abc'
|
26
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
27
|
+
# client = Readiness::Zendesk::Client.new(config)
|
28
|
+
def initialize(config = Readiness::Zendesk::Configuration.new)
|
29
|
+
@connection = generate_connection(config)
|
30
|
+
@upload_connection = generate_upload_connection(config)
|
31
|
+
end
|
32
|
+
|
33
|
+
##
|
34
|
+
# Used to generate the retry options passed to Faraday via faraday-retry
|
35
|
+
#
|
36
|
+
# @author Jason Colyer
|
37
|
+
# @since 1.0.0
|
38
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
39
|
+
# @return [Hash]
|
40
|
+
def retry_options(config)
|
41
|
+
{
|
42
|
+
max: config.retry_max,
|
43
|
+
interval: config.retry_interval,
|
44
|
+
interval_randomness: config.retry_randomness,
|
45
|
+
backoff_factor: config.retry_backoff,
|
46
|
+
exceptions: config.retry_exceptions
|
47
|
+
}
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Used to generate a Faraday connection
|
52
|
+
#
|
53
|
+
# @author Jason Colyer
|
54
|
+
# @since 1.0.0
|
55
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
56
|
+
# @return [Object]
|
57
|
+
def generate_connection(config)
|
58
|
+
Faraday.new(config.url) do |c|
|
59
|
+
c.request :retry, retry_options(config)
|
60
|
+
c.adapter Faraday.default_adapter
|
61
|
+
c.headers['Content-Type'] = 'application/json'
|
62
|
+
c.headers['Authorization'] = "Basic " + Base64.encode64("#{config.username}/token:#{config.token}").gsub("\n", '')
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Used to generate a Faraday connection for uploads
|
68
|
+
#
|
69
|
+
# @author Jason Colyer
|
70
|
+
# @since 1.0.0
|
71
|
+
# @param config [Object] An instance of {Readiness::Zendesk::Configuration}
|
72
|
+
# @return [Object]
|
73
|
+
def generate_upload_connection(config)
|
74
|
+
Faraday.new(config.url) do |c|
|
75
|
+
c.request :retry, retry_options(config)
|
76
|
+
c.request :multipart
|
77
|
+
c.request :url_encoded
|
78
|
+
c.adapter Faraday.default_adapter
|
79
|
+
c.headers['Authorization'] = "Basic " + Base64.encode64("#{config.username}/token:#{config.token}").gsub("\n", '')
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,49 @@
|
|
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 Configuration within the module {Readiness::Zendesk}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.0
|
12
|
+
class Configuration
|
13
|
+
attr_accessor :url, :username, :token, :retry_options, :retry_max, :retry_interval, :retry_randomness, :retry_backoff, :retry_exceptions
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Zendesk::Configuration} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.0
|
20
|
+
# @example
|
21
|
+
# require 'support_readiness'
|
22
|
+
# config = Readiness::Zendesk::Configuration.new
|
23
|
+
# config.username = 'alice@example.com'
|
24
|
+
# config.token = 'test123abc'
|
25
|
+
# config.url = 'https://example.zendesk.com/api/v2'
|
26
|
+
# pp config
|
27
|
+
# # => #<Readiness::Zendesk::Configuration:0x00007f352fdd1420
|
28
|
+
# @retry_backoff=2,
|
29
|
+
# @retry_exceptions=
|
30
|
+
# [Errno::ETIMEDOUT, "Timeout::Error", Faraday::TimeoutError, Faraday::RetriableResponse, Faraday::ConnectionFailed],
|
31
|
+
# @retry_interval=1,
|
32
|
+
# @retry_max=5,
|
33
|
+
# @retry_randomness=0.5,
|
34
|
+
# @token="test123abc",
|
35
|
+
# @url="https://example.zendesk.com/api/v2",
|
36
|
+
# @username="alice@example.com">
|
37
|
+
def initialize
|
38
|
+
@url = ''
|
39
|
+
@username = ''
|
40
|
+
@token = ''
|
41
|
+
@retry_max = 5
|
42
|
+
@retry_interval = 1
|
43
|
+
@retry_randomness = 0.5
|
44
|
+
@retry_backoff = 2
|
45
|
+
@retry_exceptions = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|