gitlab_support_readiness 1.0.11 → 1.0.12
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 +4 -4
- data/lib/support_readiness/calendly/client.rb +64 -0
- data/lib/support_readiness/calendly/configuration.rb +45 -0
- data/lib/support_readiness/calendly/organization_memberships.rb +67 -0
- data/lib/support_readiness/calendly/organizations.rb +123 -0
- data/lib/support_readiness/calendly/users.rb +105 -0
- data/lib/support_readiness/calendly.rb +16 -0
- data/lib/support_readiness/client.rb +88 -1
- data/lib/support_readiness/dates.rb +90 -0
- data/lib/support_readiness/gitlab/configuration.rb +0 -1
- data/lib/support_readiness/gitlab/groups.rb +35 -0
- data/lib/support_readiness/gitlab/markdown.rb +37 -0
- data/lib/support_readiness/gitlab/merge_requests.rb +127 -0
- data/lib/support_readiness/gitlab/namespaces.rb +22 -0
- data/lib/support_readiness/gitlab/projects.rb +36 -1
- data/lib/support_readiness/gitlab/repositories.rb +174 -0
- data/lib/support_readiness/gitlab/users.rb +24 -0
- data/lib/support_readiness/gitlab.rb +2 -0
- data/lib/support_readiness/google_calendar/client.rb +59 -0
- data/lib/support_readiness/google_calendar/configuration.rb +39 -0
- data/lib/support_readiness/google_calendar/events.rb +169 -0
- data/lib/support_readiness/google_calendar.rb +14 -0
- data/lib/support_readiness/mailgun/bounces.rb +103 -0
- data/lib/support_readiness/mailgun/client.rb +65 -0
- data/lib/support_readiness/mailgun/configuration.rb +46 -0
- data/lib/support_readiness/mailgun/emails.rb +95 -0
- data/lib/support_readiness/mailgun.rb +15 -0
- data/lib/support_readiness/pagerduty/escalation_policies.rb +1 -1
- data/lib/support_readiness/pagerduty/schedules.rb +27 -3
- data/lib/support_readiness/pagerduty/services.rb +1 -1
- data/lib/support_readiness/pagerduty/users.rb +197 -0
- data/lib/support_readiness/pagerduty.rb +1 -0
- data/lib/support_readiness/repos/articles.rb +335 -0
- data/lib/support_readiness/repos/automations.rb +247 -0
- data/lib/support_readiness/repos/groups.rb +188 -0
- data/lib/support_readiness/repos/macros.rb +224 -0
- data/lib/support_readiness/repos/organization_fields.rb +193 -0
- data/lib/support_readiness/repos/sla_policies.rb +192 -0
- data/lib/support_readiness/repos/ticket_fields.rb +200 -0
- data/lib/support_readiness/repos/ticket_forms.rb +200 -0
- data/lib/support_readiness/repos/triggers.rb +255 -0
- data/lib/support_readiness/repos/user_fields.rb +201 -0
- data/lib/support_readiness/repos/views.rb +362 -0
- data/lib/support_readiness/repos.rb +22 -0
- data/lib/support_readiness/salesforce/accounts.rb +109 -0
- data/lib/support_readiness/salesforce/cases.rb +109 -0
- data/lib/support_readiness/salesforce/client.rb +64 -0
- data/lib/support_readiness/salesforce/configuration.rb +49 -0
- data/lib/support_readiness/salesforce/queries.rb +62 -0
- data/lib/support_readiness/salesforce.rb +16 -0
- data/lib/support_readiness/slack/client.rb +63 -0
- data/lib/support_readiness/slack/configuration.rb +43 -0
- data/lib/support_readiness/slack/messages.rb +37 -0
- data/lib/support_readiness/slack.rb +14 -0
- data/lib/support_readiness/zendesk/app_job_statuses.rb +140 -0
- data/lib/support_readiness/zendesk/apps.rb +209 -0
- data/lib/support_readiness/zendesk/automations.rb +1 -2
- data/lib/support_readiness/zendesk/macros.rb +1 -3
- data/lib/support_readiness/zendesk/organization_fields.rb +1 -1
- data/lib/support_readiness/zendesk/theme_job_statuses.rb +136 -0
- data/lib/support_readiness/zendesk/themes.rb +303 -0
- data/lib/support_readiness/zendesk/ticket_field_options.rb +110 -0
- data/lib/support_readiness/zendesk/ticket_fields.rb +85 -16
- data/lib/support_readiness/zendesk/ticket_forms.rb +65 -2
- data/lib/support_readiness/zendesk/tickets.rb +77 -0
- data/lib/support_readiness/zendesk/triggers.rb +1 -2
- data/lib/support_readiness/zendesk/user_field_options.rb +110 -0
- data/lib/support_readiness/zendesk/user_fields.rb +257 -0
- data/lib/support_readiness/zendesk/views.rb +49 -2
- data/lib/support_readiness/zendesk.rb +7 -0
- data/lib/support_readiness.rb +16 -0
- metadata +120 -2
@@ -0,0 +1,169 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
##
|
6
|
+
# Defines the module GoogleCalendar
|
7
|
+
module GoogleCalendar
|
8
|
+
##
|
9
|
+
# Defines the class Events within the module {Readiness::GoogleCalendar}.
|
10
|
+
#
|
11
|
+
# @author Jason Colyer
|
12
|
+
# @since 1.0.12
|
13
|
+
class Events < Readiness::Client
|
14
|
+
attr_accessor :attachments, :attendees, :created, :creator, :description, :id, :location, :summary, :updated
|
15
|
+
##
|
16
|
+
# The time to use for the start of the event. When creating an event, you need to pass a Time/DateTime object for this.
|
17
|
+
# @return [Object] a Time or DateTime object
|
18
|
+
# @example
|
19
|
+
# require 'support_readiness'
|
20
|
+
# event = Readiness::GoogleCalendar::Events.new
|
21
|
+
# event.start = Time.parse('2024-12-18 20:45')
|
22
|
+
# @example
|
23
|
+
# require 'support_readiness'
|
24
|
+
# event = Readiness::GoogleCalendar::Events.new
|
25
|
+
# event.start = DateTime.now
|
26
|
+
attr_accessor :start
|
27
|
+
##
|
28
|
+
# The time to use for the end of the event. When creating an event, you need to pass a Time/DateTime object for this.
|
29
|
+
# @return [Object] a Time or DateTime object
|
30
|
+
# @example
|
31
|
+
# require 'support_readiness'
|
32
|
+
# event = Readiness::GoogleCalendar::Events.new
|
33
|
+
# event.end = Time.parse('2024-12-18 20:45')
|
34
|
+
# @example
|
35
|
+
# require 'support_readiness'
|
36
|
+
# event = Readiness::GoogleCalendar::Events.new
|
37
|
+
# event.end = DateTime.now
|
38
|
+
attr_accessor :end
|
39
|
+
|
40
|
+
##
|
41
|
+
# Creates a new {Readiness::GoogleCalendar::Events} instance
|
42
|
+
#
|
43
|
+
# @author Jason Colyer
|
44
|
+
# @since 1.0.12
|
45
|
+
# @param object [Object] An instance of {Readiness::GoogleCalendar::Events}
|
46
|
+
# @example
|
47
|
+
# require 'support_readiness'
|
48
|
+
# Readiness::GoogleCalendar::Events.new
|
49
|
+
def initialize(object = {})
|
50
|
+
@attachments = object['attachments']
|
51
|
+
@attendees = object['attendees']
|
52
|
+
@created = object['created']
|
53
|
+
@creator = object['creator']
|
54
|
+
@description = object['description']
|
55
|
+
@end = object['end']
|
56
|
+
@id = object['id']
|
57
|
+
@location = object['location']
|
58
|
+
@start = object['start']
|
59
|
+
@summary = object['summary']
|
60
|
+
@updated = object['updated']
|
61
|
+
end
|
62
|
+
|
63
|
+
##
|
64
|
+
# Lists all events on a calendar within specified time range
|
65
|
+
#
|
66
|
+
# @author Jason Colyer
|
67
|
+
# @since 1.0.12
|
68
|
+
# @param client [Object] An instance of {Readiness::GoogleCalendar::Client}
|
69
|
+
# @param start_time [Object] A Time or DateTime object
|
70
|
+
# @param end_time [Object] A Time or DateTime object
|
71
|
+
# @param max [Integer] The max number of results per page
|
72
|
+
# @return [Array]
|
73
|
+
# @example
|
74
|
+
# config = Readiness::GoogleCalendar::Configuration.new
|
75
|
+
# config.calendar_id = 'test@example.com'
|
76
|
+
# config.filepath = 'temp.json'
|
77
|
+
# client = Readiness::GoogleCalendar::Client.new(config)
|
78
|
+
# events = Readiness::GoogleCalendar::Events.list(client, DateTime.now, (DateTime.now + 5.hours))
|
79
|
+
# pp events.count
|
80
|
+
# # => 6
|
81
|
+
def self.list(client, start_time, end_time, max = 1000)
|
82
|
+
items = []
|
83
|
+
page_token = nil
|
84
|
+
loop do
|
85
|
+
response = client.service.list_events(
|
86
|
+
client.calendar_id,
|
87
|
+
max_results: max,
|
88
|
+
single_events: true,
|
89
|
+
order_by: 'startTime',
|
90
|
+
page_token: page_token,
|
91
|
+
time_min: start_time.rfc3339,
|
92
|
+
time_max: end_time.rfc3339
|
93
|
+
)
|
94
|
+
items += response.items
|
95
|
+
break if response.next_page_token.nil?
|
96
|
+
|
97
|
+
page_token = response.next_page_token
|
98
|
+
end
|
99
|
+
items
|
100
|
+
end
|
101
|
+
|
102
|
+
##
|
103
|
+
# Creates an event on a calendar
|
104
|
+
#
|
105
|
+
# @author Jason Colyer
|
106
|
+
# @since 1.0.12
|
107
|
+
# @param client [Object] An instance of {Readiness::GoogleCalendar::Client}
|
108
|
+
# @param event [Object] An instance of {Readiness::GoogleCalendar::Events}
|
109
|
+
# @return [Object] An instance of {Google::Apis::CalendarV3::Event}
|
110
|
+
# @example
|
111
|
+
# config = Readiness::GoogleCalendar::Configuration.new
|
112
|
+
# config.calendar_id = 'test@example.com'
|
113
|
+
# config.filepath = 'temp.json'
|
114
|
+
# client = Readiness::GoogleCalendar::Client.new(config)
|
115
|
+
# event = Readiness::GoogleCalendar::Events.new
|
116
|
+
# event.description = 'Test from Jason'
|
117
|
+
# event.end = Time.parse('2024-10-04 11:00')
|
118
|
+
# event.start = DateTime.parse('2024-10-04 10:00')
|
119
|
+
# event.summary = 'Jason Test'
|
120
|
+
# create = Readiness::GoogleCalendar::Events.create!(client, event)
|
121
|
+
# pp create.id
|
122
|
+
# # => "um4es01mlbn6nqh3gn25phtlvk"
|
123
|
+
def self.create!(client, event)
|
124
|
+
google_event = to_google_event(event)
|
125
|
+
client.service.insert_event(client.calendar_id, google_event)
|
126
|
+
end
|
127
|
+
|
128
|
+
##
|
129
|
+
# Deletes an event on a calendar
|
130
|
+
#
|
131
|
+
# @author Jason Colyer
|
132
|
+
# @since 1.0.12
|
133
|
+
# @param client [Object] An instance of {Readiness::GoogleCalendar::Client}
|
134
|
+
# @param event [Object] An instance of {Readiness::GoogleCalendar::Events} or {Google::Apis::CalendarV3::Event}
|
135
|
+
# @return [Boolean]
|
136
|
+
# @example
|
137
|
+
# config = Readiness::GoogleCalendar::Configuration.new
|
138
|
+
# config.calendar_id = 'test@example.com'
|
139
|
+
# config.filepath = 'temp.json'
|
140
|
+
# client = Readiness::GoogleCalendar::Client.new(config)
|
141
|
+
# event = Readiness::GoogleCalendar::Events.new
|
142
|
+
# event.id = 'um4es01mlbn6nqh3gn25phtlvk'
|
143
|
+
# delete = Readiness::GoogleCalendar::Events.delete!(client, event)
|
144
|
+
# pp delete
|
145
|
+
# # => true
|
146
|
+
def self.delete!(client, event)
|
147
|
+
client.service.delete_event(client.calendar_id, event.id)
|
148
|
+
true
|
149
|
+
end
|
150
|
+
|
151
|
+
##
|
152
|
+
# Converts an instance of {Readiness::GoogleCalendar::Events} to {Google::Apis::CalendarV3::Event}
|
153
|
+
#
|
154
|
+
# @author Jason Colyer
|
155
|
+
# @since 1.0.12
|
156
|
+
# @param event [Object] An instance of {Readiness::GoogleCalendar::Events}
|
157
|
+
# @return [Object] An instance of {Google::Apis::CalendarV3::Event}
|
158
|
+
def self.to_google_event(event)
|
159
|
+
Google::Apis::CalendarV3::Event.new(
|
160
|
+
description: event.description,
|
161
|
+
end: Google::Apis::CalendarV3::EventDateTime.new(date_time: event.end.rfc3339),
|
162
|
+
location: event.location,
|
163
|
+
start: Google::Apis::CalendarV3::EventDateTime.new(date_time: event.start.rfc3339),
|
164
|
+
summary: event.summary
|
165
|
+
)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Defines the module Readiness.
|
4
|
+
module Readiness
|
5
|
+
##
|
6
|
+
# Defines the module GoogleCalendar
|
7
|
+
# @author Jason Colyer
|
8
|
+
# @since 1.0.12
|
9
|
+
module GoogleCalendar
|
10
|
+
require "#{__dir__}/google_calendar/client"
|
11
|
+
require "#{__dir__}/google_calendar/configuration"
|
12
|
+
require "#{__dir__}/google_calendar/events"
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,103 @@
|
|
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 Bounces within the module {Readiness::Mailgun}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.12
|
12
|
+
class Bounces < Readiness::Client
|
13
|
+
attr_accessor :address, :code, :error, :created_at
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Mailgun::Bounces} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.12
|
20
|
+
# @param object [Object] An instance of {Readiness::Mailgun::Bounces}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# Readiness::Mailgun::Bounces.new
|
24
|
+
def initialize(object = {})
|
25
|
+
@address = object['address']
|
26
|
+
@code = object['code']
|
27
|
+
@error = object['error']
|
28
|
+
@created_at = object['created_at']
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# Locates a suppression within Mailgun. This will not exit on error (except Authentication errors)
|
33
|
+
#
|
34
|
+
# @author Jason Colyer
|
35
|
+
# @since 1.0.12
|
36
|
+
# @param client [Object] An instance of {Readiness::Mailgun::Client}
|
37
|
+
# @param email [String] The email to look for
|
38
|
+
# @return [Object] An instance of {Readiness::Mailgun::Bounces}
|
39
|
+
# @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
|
40
|
+
# @example
|
41
|
+
# require 'support_readiness'
|
42
|
+
# config = Readiness::Mailgun::Configuration.new
|
43
|
+
# config.domain = 'test.gitlab.com'
|
44
|
+
# config.token = 'abc123'
|
45
|
+
# client = Readiness::Mailgun::Client.new(config)
|
46
|
+
# bounce = Readiness::Mailgun::Bounces.find(client, 'test@example.com')
|
47
|
+
# pp bounce.code
|
48
|
+
# # => "550"
|
49
|
+
def self.find(client, email)
|
50
|
+
response = client.connection.get "#{client.domain}/bounces/#{CGI.escape(email)}"
|
51
|
+
handle_request_error(0, 'Mailgun', response.status, { action: 'get', id: "#{client.domain}/bounces/#{CGI.escape(email)}" }) unless response.status == 200
|
52
|
+
Bounces.new Oj.load(response.body)
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Locates a suppression within Mailgun. This will exit on error
|
57
|
+
#
|
58
|
+
# @author Jason Colyer
|
59
|
+
# @since 1.0.12
|
60
|
+
# @param client [Object] An instance of {Readiness::Mailgun::Client}
|
61
|
+
# @param email [String] The email to look for
|
62
|
+
# @return [Object] An instance of {Readiness::Mailgun::Bounces}
|
63
|
+
# @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
|
64
|
+
# @example
|
65
|
+
# require 'support_readiness'
|
66
|
+
# config = Readiness::Mailgun::Configuration.new
|
67
|
+
# config.domain = 'test.gitlab.com'
|
68
|
+
# config.token = 'abc123'
|
69
|
+
# client = Readiness::Mailgun::Client.new(config)
|
70
|
+
# bounce = Readiness::Mailgun::Bounces.find!(client, 'test@example.com')
|
71
|
+
# pp bounce.code
|
72
|
+
# # => "550"
|
73
|
+
def self.find!(client, email)
|
74
|
+
response = client.connection.get "#{client.domain}/bounces/#{CGI.escape(email)}"
|
75
|
+
handle_request_error(1, 'Mailgun', response.status, { action: 'get', id: "#{client.domain}/bounces/#{CGI.escape(email)}" }) unless response.status == 200
|
76
|
+
Bounces.new Oj.load(response.body)
|
77
|
+
end
|
78
|
+
|
79
|
+
# Deletes a suppression within Mailgun. This will exit on error
|
80
|
+
#
|
81
|
+
# @author Jason Colyer
|
82
|
+
# @since 1.0.12
|
83
|
+
# @param client [Object] An instance of {Readiness::Mailgun::Client}
|
84
|
+
# @param bounce [Object] An instance of {Readiness::Mailgun::Bounces}
|
85
|
+
# @return [Boolean]
|
86
|
+
# @see https://documentation.mailgun.com/docs/mailgun/api-reference/openapi-final/tag/Bounces/#tag/Bounces/operation/api.(*BounceController).Delete-fm-25 Mailgun API > Bounces > Clear a single bounce
|
87
|
+
# @example
|
88
|
+
# require 'support_readiness'
|
89
|
+
# config = Readiness::Mailgun::Configuration.new
|
90
|
+
# config.domain = 'test.gitlab.com'
|
91
|
+
# config.token = 'abc123'
|
92
|
+
# client = Readiness::Mailgun::Client.new(config)
|
93
|
+
# bounce = Readiness::Mailgun::Bounces.find!(client, 'test@example.com')
|
94
|
+
# pp Readiness::Mailgun::Bounces.delete!(client, bounce)
|
95
|
+
# # => true
|
96
|
+
def self.delete!(client, bounce)
|
97
|
+
response = client.connection.delete "#{client.domain}/bounces/#{CGI.escape(bounce.address)}"
|
98
|
+
handle_request_error(1, 'Mailgun', response.status, { action: 'delete', id: "#{client.domain}/bounces/#{CGI.escape(email)}" }) unless response.status == 200
|
99
|
+
true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,65 @@
|
|
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 Client within the module {Readiness::Mailgun}.
|
9
|
+
#
|
10
|
+
# @author Jason Colyer
|
11
|
+
# @since 1.0.12
|
12
|
+
class Client
|
13
|
+
attr_reader :connection, :domain
|
14
|
+
|
15
|
+
##
|
16
|
+
# Creates a new {Readiness::Mailgun::Client} instance
|
17
|
+
#
|
18
|
+
# @author Jason Colyer
|
19
|
+
# @since 1.0.12
|
20
|
+
# @param config [Object] An instance of {Readiness::Mailgun::Configuration}
|
21
|
+
# @example
|
22
|
+
# require 'support_readiness'
|
23
|
+
# config = Readiness::Mailgun::Configuration.new
|
24
|
+
# config.token = 'test123abc'
|
25
|
+
# config.domain = 'test.gitlab.com'
|
26
|
+
# client = Readiness::Mailgun::Client.new(config)
|
27
|
+
def initialize(config = Readiness::Mailgun::Configuration.new)
|
28
|
+
@connection = generate_connection(config)
|
29
|
+
@domain = config.domain
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Used to generate the retry options passed to Faraday via faraday-retry
|
34
|
+
#
|
35
|
+
# @author Jason Colyer
|
36
|
+
# @since 1.0.12
|
37
|
+
# @param config [Object] An instance of {Readiness::Mailgun::Configuration}
|
38
|
+
# @return [Hash]
|
39
|
+
def retry_options(config)
|
40
|
+
{
|
41
|
+
max: config.retry_max,
|
42
|
+
interval: config.retry_interval,
|
43
|
+
interval_randomness: config.retry_randomness,
|
44
|
+
backoff_factor: config.retry_backoff,
|
45
|
+
exceptions: config.retry_exceptions
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Used to generate a Faraday connection
|
51
|
+
#
|
52
|
+
# @author Jason Colyer
|
53
|
+
# @since 1.0.0
|
54
|
+
# @param config [Object] An instance of {Readiness::Mailgun::Configuration}
|
55
|
+
# @return [Object]
|
56
|
+
def generate_connection(config)
|
57
|
+
Faraday.new("https://api:#{config.token}@api.mailgun.net/v3") do |c|
|
58
|
+
c.request :retry, retry_options(config)
|
59
|
+
c.adapter Faraday.default_adapter
|
60
|
+
c.headers['Content-Type'] = 'application/json'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -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
|
@@ -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 +=
|
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
|