gitlab_support_readiness 1.0.11 → 1.0.13

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