gitlab_support_readiness 1.0.11 → 1.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/lib/support_readiness/calendly/client.rb +64 -0
  3. data/lib/support_readiness/calendly/configuration.rb +45 -0
  4. data/lib/support_readiness/calendly/organization_memberships.rb +67 -0
  5. data/lib/support_readiness/calendly/organizations.rb +123 -0
  6. data/lib/support_readiness/calendly/users.rb +105 -0
  7. data/lib/support_readiness/calendly.rb +16 -0
  8. data/lib/support_readiness/client.rb +88 -1
  9. data/lib/support_readiness/dates.rb +90 -0
  10. data/lib/support_readiness/gitlab/configuration.rb +0 -1
  11. data/lib/support_readiness/gitlab/groups.rb +35 -0
  12. data/lib/support_readiness/gitlab/jobs.rb +189 -0
  13. data/lib/support_readiness/gitlab/markdown.rb +37 -0
  14. data/lib/support_readiness/gitlab/merge_requests.rb +127 -0
  15. data/lib/support_readiness/gitlab/namespaces.rb +22 -0
  16. data/lib/support_readiness/gitlab/pipelines.rb +191 -0
  17. data/lib/support_readiness/gitlab/projects.rb +85 -1
  18. data/lib/support_readiness/gitlab/repositories.rb +174 -0
  19. data/lib/support_readiness/gitlab/users.rb +24 -0
  20. data/lib/support_readiness/gitlab.rb +4 -0
  21. data/lib/support_readiness/google_calendar/client.rb +59 -0
  22. data/lib/support_readiness/google_calendar/configuration.rb +39 -0
  23. data/lib/support_readiness/google_calendar/events.rb +169 -0
  24. data/lib/support_readiness/google_calendar.rb +14 -0
  25. data/lib/support_readiness/mailgun/bounces.rb +103 -0
  26. data/lib/support_readiness/mailgun/client.rb +65 -0
  27. data/lib/support_readiness/mailgun/configuration.rb +46 -0
  28. data/lib/support_readiness/mailgun/emails.rb +95 -0
  29. data/lib/support_readiness/mailgun.rb +15 -0
  30. data/lib/support_readiness/pagerduty/escalation_policies.rb +1 -1
  31. data/lib/support_readiness/pagerduty/schedules.rb +27 -3
  32. data/lib/support_readiness/pagerduty/services.rb +1 -1
  33. data/lib/support_readiness/pagerduty/users.rb +197 -0
  34. data/lib/support_readiness/pagerduty.rb +1 -0
  35. data/lib/support_readiness/repos/articles.rb +335 -0
  36. data/lib/support_readiness/repos/automations.rb +247 -0
  37. data/lib/support_readiness/repos/groups.rb +188 -0
  38. data/lib/support_readiness/repos/macros.rb +224 -0
  39. data/lib/support_readiness/repos/organization_fields.rb +193 -0
  40. data/lib/support_readiness/repos/sla_policies.rb +192 -0
  41. data/lib/support_readiness/repos/ticket_fields.rb +200 -0
  42. data/lib/support_readiness/repos/ticket_forms.rb +200 -0
  43. data/lib/support_readiness/repos/triggers.rb +255 -0
  44. data/lib/support_readiness/repos/user_fields.rb +201 -0
  45. data/lib/support_readiness/repos/views.rb +362 -0
  46. data/lib/support_readiness/repos.rb +22 -0
  47. data/lib/support_readiness/salesforce/accounts.rb +109 -0
  48. data/lib/support_readiness/salesforce/cases.rb +109 -0
  49. data/lib/support_readiness/salesforce/client.rb +64 -0
  50. data/lib/support_readiness/salesforce/configuration.rb +49 -0
  51. data/lib/support_readiness/salesforce/queries.rb +62 -0
  52. data/lib/support_readiness/salesforce.rb +16 -0
  53. data/lib/support_readiness/slack/client.rb +63 -0
  54. data/lib/support_readiness/slack/configuration.rb +43 -0
  55. data/lib/support_readiness/slack/messages.rb +37 -0
  56. data/lib/support_readiness/slack.rb +14 -0
  57. data/lib/support_readiness/zendesk/app_job_statuses.rb +140 -0
  58. data/lib/support_readiness/zendesk/apps.rb +209 -0
  59. data/lib/support_readiness/zendesk/automations.rb +1 -2
  60. data/lib/support_readiness/zendesk/macros.rb +1 -3
  61. data/lib/support_readiness/zendesk/organization_fields.rb +1 -1
  62. data/lib/support_readiness/zendesk/theme_job_statuses.rb +136 -0
  63. data/lib/support_readiness/zendesk/themes.rb +303 -0
  64. data/lib/support_readiness/zendesk/ticket_field_options.rb +110 -0
  65. data/lib/support_readiness/zendesk/ticket_fields.rb +85 -16
  66. data/lib/support_readiness/zendesk/ticket_forms.rb +65 -2
  67. data/lib/support_readiness/zendesk/tickets.rb +77 -0
  68. data/lib/support_readiness/zendesk/triggers.rb +1 -2
  69. data/lib/support_readiness/zendesk/user_field_options.rb +110 -0
  70. data/lib/support_readiness/zendesk/user_fields.rb +257 -0
  71. data/lib/support_readiness/zendesk/views.rb +49 -2
  72. data/lib/support_readiness/zendesk.rb +7 -0
  73. data/lib/support_readiness.rb +16 -0
  74. metadata +122 -2
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Mailgun
6
+ module Mailgun
7
+ ##
8
+ # Defines the class Configuration within the module {Readiness::Mailgun}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Configuration
13
+ attr_accessor :domain, :token, :retry_options, :retry_max, :retry_interval, :retry_randomness, :retry_backoff, :retry_exceptions
14
+
15
+ ##
16
+ # Creates a new {Readiness::Mailgun::Configuration} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @example
21
+ # require 'support_readiness'
22
+ # config = Readiness::Mailgun::Configuration.new
23
+ # config.token = 'test123abc'
24
+ # config.domain = 'test.gitlab.com'
25
+ # pp config
26
+ # # => #<Readiness::Mailgun::Configuration:0x00007f352fdd1420
27
+ # @domain="test.gitlab.com"
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
+ def initialize
36
+ @domain = ''
37
+ @token = ''
38
+ @retry_max = 5
39
+ @retry_interval = 1
40
+ @retry_randomness = 0.5
41
+ @retry_backoff = 2
42
+ @retry_exceptions = Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [Faraday::ConnectionFailed]
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Mailgun
6
+ module Mailgun
7
+ ##
8
+ # Defines the class Emails within the module {Readiness::Mailgun}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Emails < Readiness::Client
13
+ attr_accessor :bcc, :cc, :from, :html, :subject, :reply_to, :text, :to
14
+
15
+ ##
16
+ # Creates a new {Readiness::Mailgun::Emails} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param object [Object] An instance of {Readiness::Mailgun::Emails}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Mailgun::Emails.new
24
+ def initialize(object = {})
25
+ @bcc = object['bcc']
26
+ @cc = object['cc']
27
+ @from = object['from']
28
+ @html = object['html']
29
+ @subject = object['subject']
30
+ @reply_to = object['reply_to']
31
+ @text = object['text']
32
+ @to = object['to']
33
+ end
34
+
35
+ ##
36
+ # Sends an email using Mailgun. This will exit on error or if the email values used are invalid
37
+ #
38
+ # @author Jason Colyer
39
+ # @since 1.0.12
40
+ # @param client [Object] An instance of {Readiness::Mailgun::Client}
41
+ # @param email [Object] An instance of {Readiness::Mailgun::Emails}
42
+ # @return [Boolean]
43
+ # @see https://documentation.mailgun.com/docs/mailgun/api-reference/openapi-final/tag/Bounces/#tag/Bounces/operation/api.(*BounceController).Get-fm-20 Mailgun API > Bounces > View single bounce event
44
+ # @example
45
+ # require 'support_readiness'
46
+ # config = Readiness::Mailgun::Configuration.new
47
+ # config.domain = 'test.gitlab.com'
48
+ # config.token = 'abc123'
49
+ # client = Readiness::Mailgun::Client.new(config)
50
+ # email = Readiness::Mailgun::Emails.new
51
+ # email.from = 'techsupport@gitlab.com'
52
+ # email.to = 'jcolyer@gitlab.com'
53
+ # email.subject = 'Test from Jason'
54
+ # email.html = '<p>This is a test</p>'
55
+ # email.text = 'This is a test'
56
+ # pp Readiness::Mailgun::Emails.send!(client, email)
57
+ # # => true
58
+ def self.send!(client, email)
59
+ handle_request_error(1, 'Mailgun', 400, { action: 'Send email', id: email }) unless valid_email?(email)
60
+ response = client.connection.post "#{client.domain}/messages", to_clean_json(email)
61
+ handle_request_error(1, 'Mailgun', response.status, { action: 'Send email', id: email }) unless response.status == 200
62
+ true
63
+ end
64
+
65
+ ##
66
+ # Determines if all required values are present for an email to be sent.
67
+ #
68
+ # @author Jason Colyer
69
+ # @since 1.0.12
70
+ # @param email [Object] An instance of {Readiness::Mailgun::Emails}
71
+ # @return [Boolean]
72
+ # @example
73
+ # require 'support_readiness'
74
+ # email = Readiness::Mailgun::Emails.new
75
+ # email.from = 'techsupport@gitlab.com'
76
+ # email.to = 'jcolyer@gitlab.com'
77
+ # email.subject = 'Test from Jason'
78
+ # email.html = '<p>This is a test</p>'
79
+ # email.text = 'This is a test'
80
+ # pp Readiness::Mailgun::Emails.valid_email?(email)
81
+ # # => true
82
+ # email.subject = nil
83
+ # pp Readiness::Mailgun::Emails.valid_email?(email)
84
+ # # => false
85
+ def self.valid_email?(email)
86
+ return false if email.from.nil?
87
+ return false if email.to.nil?
88
+ return false if email.subject.nil?
89
+ return false if email.html.nil? && email.text.nil?
90
+
91
+ true
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ ##
6
+ # Defines the module Mailgun
7
+ # @author Jason Colyer
8
+ # @since 1.0.12
9
+ module Mailgun
10
+ require "#{__dir__}/mailgun/client"
11
+ require "#{__dir__}/mailgun/configuration"
12
+ require "#{__dir__}/mailgun/bounces"
13
+ require "#{__dir__}/mailgun/emails"
14
+ end
15
+ end
@@ -66,7 +66,7 @@ module Readiness
66
66
  array += body['escalation_policies'].map { |e| EscalationPolicies.new(e) }
67
67
  break unless body['more']
68
68
 
69
- offset += 1
69
+ offset += 100
70
70
  end
71
71
  array
72
72
  end
@@ -10,7 +10,6 @@ module Readiness
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
12
  # @todo Create a schedule
13
- # @todo Update a scehdule
14
13
  # @todo List audit records for a schedule
15
14
  # @todo List users on call
16
15
  # @todo Preview a schedule
@@ -69,9 +68,9 @@ module Readiness
69
68
  array += body['schedules'].map { |e| Schedules.new(e) }
70
69
  break unless body['more']
71
70
 
72
- offset += 1
71
+ offset += 100
73
72
  end
74
- array
73
+ array.uniq
75
74
  end
76
75
 
77
76
  ##
@@ -218,6 +217,31 @@ module Readiness
218
217
  handle_request_error(1, 'Pagerduty', response.status, { action: 'Delete an override', id: schedule.id }) unless [200, 204].include?(response.status)
219
218
  true
220
219
  end
220
+
221
+ ##
222
+ # Updates a schedule within Pagerduty. This will exit on error
223
+ #
224
+ # @author Jason Colyer
225
+ # @since 1.0.12
226
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
227
+ # @param schedule [Object] A {Readiness::Pagerduty::Schedules} instance
228
+ # @return [Object] A {Readiness::Pagerduty::Schedules} instance
229
+ # @see https://developer.pagerduty.com/api-reference/7aff39ee95bfc-update-a-schedule Pagerduty API > Schedules > Update a schedule
230
+ # @example
231
+ # require 'support_readiness'
232
+ # config = Readiness::Pagerduty::Configuration.new
233
+ # config.token = 'test123abc'
234
+ # client = Readiness::Pagerduty::Client.new(config)
235
+ # schedule = Readiness::Pagerduty::Schedules.find(client, 'PI7DH85')
236
+ # schedule.name = 'Updated name'
237
+ # update = Readiness::Pagerduty::Schedules.update!(client, schedule)
238
+ # pp update.name
239
+ # # => "Updated name"
240
+ def self.update!(client, schedule)
241
+ response = client.connection.put "schedules/#{schedule.id}", to_clean_json_with_key(schedule, 'schedule')
242
+ handle_request_error(1, 'Pagerduty', response.status, { action: 'Update schedule', id: schedule.id, message: Oj.load(response.body)}) unless response.status == 200
243
+ Schedules.new(Oj.load(response.body)['schedule'])
244
+ end
221
245
  end
222
246
  end
223
247
  end
@@ -75,7 +75,7 @@ module Readiness
75
75
  array += body['services'].map { |e| Services.new(e) }
76
76
  break unless body['more']
77
77
 
78
- offset += 1
78
+ offset += 100
79
79
  end
80
80
  array
81
81
  end
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module Pagerduty
6
+ module Pagerduty
7
+ ##
8
+ # Defines the class Users within the module {Readiness::Pagerduty}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.12
12
+ class Users < Readiness::Client
13
+ attr_accessor :avatar_url, :color, :contact_methods, :description, :email, :html_url, :id, :invitation_sent, :job_title, :license, :name, :notification_rules, :role, :self, :summary, :teams, :time_zone, :type
14
+
15
+ ##
16
+ # Creates a new {Readiness::Pagerduty::Users} instance
17
+ #
18
+ # @author Jason Colyer
19
+ # @since 1.0.12
20
+ # @param object [Object] An instance of {Readiness::Pagerduty::Users}
21
+ # @example
22
+ # require 'support_readiness'
23
+ # Readiness::Pagerduty::Users.new
24
+ def initialize(object = {})
25
+ @avatar_url = object['avatar_url']
26
+ @color = object['color']
27
+ @contact_methods = object['contact_methods']
28
+ @description = object['description']
29
+ @email = object['email']
30
+ @html_url = object['html_url']
31
+ @id = object['id']
32
+ @invitation_sent = object['invitation_sent']
33
+ @job_title = object['job_title']
34
+ @license = object['license']
35
+ @name = object['name']
36
+ @notification_rules = object['notification_rules']
37
+ @role = object['role']
38
+ @self = object['self']
39
+ @summary = object['summary']
40
+ @teams = object['teams']
41
+ @time_zone = object['time_zone']
42
+ @type = object['type']
43
+ end
44
+
45
+ ##
46
+ # Lists users within Pagerduty
47
+ #
48
+ # @author Jason Colyer
49
+ # @since 1.0.12
50
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
51
+ # @return [Array]
52
+ # @see https://developer.pagerduty.com/api-reference/c96e889522dd6-list-users Pagerduty API > Users > List users
53
+ # @example
54
+ # require 'support_readiness'
55
+ # config = Readiness::Pagerduty::Configuration.new
56
+ # config.token = 'abc123'
57
+ # client = Readiness::Pagerduty::Client.new(config)
58
+ # users = Readiness::Pagerduty::Users.list(client)
59
+ # pp users.count
60
+ # # => 436
61
+ def self.list(client)
62
+ array = []
63
+ offset = 0
64
+ loop do
65
+ response = client.connection.get "users?limit=100&offset=#{offset}"
66
+ body = Oj.load(response.body)
67
+ array += body['users'].map { |u| Users.new(u) }
68
+ break unless body['more']
69
+
70
+ offset += 100
71
+ end
72
+ array.uniq
73
+ end
74
+
75
+ ##
76
+ # Shows info of a Pagerduty user. This will not exit on error (except for Auth errors)
77
+ #
78
+ # @author Jason Colyer
79
+ # @since 1.0.12
80
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
81
+ # @see https://developer.pagerduty.com/api-reference/2395ca1feb25e-get-a-user Pagerduty API > Users > Get a user
82
+ # @param uid [String] The user ID to look for
83
+ # @return [Hash]
84
+ # @example
85
+ # require 'support_readiness'
86
+ # config = Readiness::Pagerduty::Configuration.new
87
+ # config.token = 'abc123'
88
+ # client = Readiness::Pagerduty::Client.new(config)
89
+ # user = Readiness::Pagerduty::Users.find(client, 'ABC123')
90
+ # pp user.name
91
+ # # => "Alice Example"
92
+ def self.find(client, uid)
93
+ response = client.connection.get("users/#{uid}")
94
+ handle_request_error(0, 'Pagerduty', response.status, { action: 'get', id: uid }) unless response.status == 200
95
+ return Users.new(Oj.load(response.body)['user']) if response.status == 200
96
+
97
+ Oj.load(response.body)
98
+ end
99
+
100
+ ##
101
+ # Shows info of a Pagerduty user. This will exit on error
102
+ #
103
+ # @author Jason Colyer
104
+ # @since 1.0.12
105
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
106
+ # @param uid [String] The user ID to look for
107
+ # @return [Object] An instance of {Readiness::Pagerduty::Users}
108
+ # @see https://developer.pagerduty.com/api-reference/2395ca1feb25e-get-a-user Pagerduty API > Users > Get a user
109
+ # @example
110
+ # require 'support_readiness'
111
+ # config = Readiness::Pagerduty::Configuration.new
112
+ # config.token = 'abc123'
113
+ # client = Readiness::Pagerduty::Client.new(config)
114
+ # user = Readiness::Pagerduty::Users.find!(client, 'ABC123')
115
+ # pp user.name
116
+ # # => "Alice Example"
117
+ def self.find!(client, uid)
118
+ response = client.connection.get("users/#{uid}")
119
+ handle_request_error(1, 'Pagerduty', response.status, { action: 'Find user', id: uid }) unless response.status == 200
120
+ Users.new(Oj.load(response.body)['user'])
121
+ end
122
+
123
+ ##
124
+ # Shows info of a Pagerduty user using their email to find them. This will not exit on error (except Auth errors)
125
+ #
126
+ # @author Jason Colyer
127
+ # @since 1.0.12
128
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
129
+ # @param email [String] The email to look for
130
+ # @return [Object] An instance of {Readiness::Pagerduty::Users}
131
+ # @example
132
+ # require 'support_readiness'
133
+ # config = Readiness::Pagerduty::Configuration.new
134
+ # config.token = 'abc123'
135
+ # client = Readiness::Pagerduty::Client.new(config)
136
+ # user = Readiness::Pagerduty::Users.find_by_email(client, 'alice@example.com')
137
+ # pp user.name
138
+ # # => "Alice Example"
139
+ def self.find_by_email(client, email)
140
+ list(client).detect { |u| u.email == email }
141
+ end
142
+
143
+ ##
144
+ # Shows info of a Pagerduty user using their email to find them. This will exit on error
145
+ #
146
+ # @author Jason Colyer
147
+ # @since 1.0.12
148
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
149
+ # @param email [String] The email to look for
150
+ # @return [Object] An instance of {Readiness::Pagerduty::Users}
151
+ # @example
152
+ # require 'support_readiness'
153
+ # config = Readiness::Pagerduty::Configuration.new
154
+ # config.token = 'abc123'
155
+ # client = Readiness::Pagerduty::Client.new(config)
156
+ # user = Readiness::Pagerduty::Users.find_by_email!(client, 'alice@example.com')
157
+ # pp user.name
158
+ # # => "Alice Example"
159
+ def self.find_by_email!(client, email)
160
+ response = list(client).detect { |u| u.email == email }
161
+ handle_request_error(1, 'Pagerduty', 404, { action: 'Find user by email', id: email }) if response.nil?
162
+
163
+ response
164
+ end
165
+
166
+ ##
167
+ # Creates a user within Pagerduty. This will exit on error
168
+ #
169
+ # @author Jason Colyer
170
+ # @since 1.0.12
171
+ # @param client [Object] An instance of {Readiness::Pagerduty::Client}
172
+ # @param user [Object] An instance of {Readiness::Pagerduty::Users}
173
+ # @return [Object] An instance of {Readiness::Pagerduty::Users}
174
+ # @see https://developer.pagerduty.com/api-reference/4cb4fd0f5444a-create-a-user Pagerduty API > Users > Create a user
175
+ # @example
176
+ # require 'support_readiness'
177
+ # config = Readiness::Pagerduty::Configuration.new
178
+ # config.token = 'abc123'
179
+ # client = Readiness::Pagerduty::Client.new(config)
180
+ # user = Readiness::Pagerduty::Users.new
181
+ # user.name = 'Alice Example'
182
+ # user.email = 'alice@example.com'
183
+ # user.license = {
184
+ # id: 'P1C3FWI',
185
+ # type: 'license_reference'
186
+ # }
187
+ # create = Readiness::Pagerduty::Users.create!(client, user)
188
+ # pp create.id
189
+ # # => "ABC123"
190
+ def self.create!(client, user)
191
+ response = client.connection.post 'users', to_clean_json_with_key(user, 'user')
192
+ handle_request_error(1, 'Pagerduty', response.status, { action: 'Create user', id: user.email }) unless response.status == 201
193
+ Users.new(Oj.load(response.body)['user'])
194
+ end
195
+ end
196
+ end
197
+ end
@@ -12,5 +12,6 @@ module Readiness
12
12
  require "#{__dir__}/pagerduty/escalation_policies"
13
13
  require "#{__dir__}/pagerduty/schedules"
14
14
  require "#{__dir__}/pagerduty/services"
15
+ require "#{__dir__}/pagerduty/users"
15
16
  end
16
17
  end