exception_handling 2.6.0 → 2.7.0.pre.1
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/CHANGELOG.md +13 -1
- data/Gemfile.lock +2 -2
- data/lib/exception_handling.rb +2 -2
- data/lib/exception_handling/exception_info.rb +3 -6
- data/lib/exception_handling/logging_methods.rb +33 -0
- data/lib/exception_handling/methods.rb +6 -53
- data/lib/exception_handling/testing.rb +20 -10
- data/lib/exception_handling/version.rb +1 -1
- data/test/unit/exception_handling/exception_info_test.rb +22 -1
- data/test/unit/exception_handling/logging_methods_test.rb +37 -0
- data/test/unit/exception_handling/methods_test.rb +29 -8
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3794611262e09346bab80e7a683f4ce1d78d6ba04b46fa15fa4bc84ac087e41e
|
4
|
+
data.tar.gz: 36f96bed7f2b3375df4730d35ee5ec96cdf70e7c07f4ba589e187c75275c1736
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d1dad10749b867696c0f4dcacedcfb4af466ba792fa0c98ae307ee4bbeda10657f172fc95ff3c9b0162d1787d39c3c2a15a220fa6c6f4a7f7b10d857dad5eec
|
7
|
+
data.tar.gz: 8b28f2829a1e34787d7de51fdee4d0fe5a39356584d6d910c106edac2fe5d8ebcf0f3f5f1e9e1b7e4e7b0c36dd62035885214248072e47a7fdec7d1e4a854f94
|
data/CHANGELOG.md
CHANGED
@@ -4,7 +4,17 @@ Inspired by [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
4
4
|
|
5
5
|
Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
6
6
|
|
7
|
-
## [2.
|
7
|
+
## [2.7.0] - Unreleased
|
8
|
+
### Added
|
9
|
+
- Added `LoggingMethods` as a replacement for `Methods` without setting controller or checking for long controller action.
|
10
|
+
### Deprecated
|
11
|
+
- Deprecated `Methods` in favor of `LoggingMethods`.
|
12
|
+
|
13
|
+
## [2.6.1] - Unreleased
|
14
|
+
### Fixed
|
15
|
+
- Fixed honeybadger_context_data to always merge `current_context_for_thread`, even if `log_context:` is passed as `nil`.
|
16
|
+
|
17
|
+
## [2.6.0] - 2020-08-26
|
8
18
|
### Changed
|
9
19
|
- Calling `log_warning` will now log with Severity::WARNING rather than FATAL.
|
10
20
|
- Reordered the logging to put the exception class next to the message.
|
@@ -42,6 +52,8 @@ Note: this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0
|
|
42
52
|
### Changed
|
43
53
|
- No longer depends on hobo_support. Uses invoca-utils 0.3 instead.
|
44
54
|
|
55
|
+
[2.7.0]: https://github.com/Invoca/exception_handling/compare/v2.6.1...v2.7.0
|
56
|
+
[2.6.1]: https://github.com/Invoca/exception_handling/compare/v2.6.0...v2.6.1
|
45
57
|
[2.6.0]: https://github.com/Invoca/exception_handling/compare/v2.5.0...v2.6.0
|
46
58
|
[2.5.0]: https://github.com/Invoca/exception_handling/compare/v2.4.4...v2.5.0
|
47
59
|
[2.4.4]: https://github.com/Invoca/exception_handling/compare/v2.4.3...v2.4.4
|
data/Gemfile.lock
CHANGED
@@ -8,7 +8,7 @@ GIT
|
|
8
8
|
PATH
|
9
9
|
remote: .
|
10
10
|
specs:
|
11
|
-
exception_handling (2.
|
11
|
+
exception_handling (2.7.0.pre.1)
|
12
12
|
actionmailer (>= 4.2, < 7.0)
|
13
13
|
actionpack (>= 4.2, < 7.0)
|
14
14
|
activesupport (>= 4.2, < 7.0)
|
@@ -55,7 +55,7 @@ GEM
|
|
55
55
|
builder (3.2.3)
|
56
56
|
coderay (1.1.2)
|
57
57
|
concurrent-ruby (1.1.5)
|
58
|
-
contextual_logger (0.
|
58
|
+
contextual_logger (0.11.0)
|
59
59
|
activesupport
|
60
60
|
json
|
61
61
|
crass (1.0.6)
|
data/lib/exception_handling.rb
CHANGED
@@ -29,6 +29,8 @@ module ExceptionHandling # never included
|
|
29
29
|
AUTHENTICATION_HEADERS = ['HTTP_AUTHORIZATION', 'X-HTTP_AUTHORIZATION', 'X_HTTP_AUTHORIZATION', 'REDIRECT_X_HTTP_AUTHORIZATION'].freeze
|
30
30
|
HONEYBADGER_STATUSES = [:success, :failure, :skipped].freeze
|
31
31
|
|
32
|
+
Deprecation3_0 = ActiveSupport::Deprecation.new('3.0', 'exception_handling')
|
33
|
+
|
32
34
|
class << self
|
33
35
|
|
34
36
|
#
|
@@ -54,8 +56,6 @@ module ExceptionHandling # never included
|
|
54
56
|
@logger or raise ArgumentError, "You must assign a value to #{name}.logger"
|
55
57
|
end
|
56
58
|
|
57
|
-
Deprecation3_0 = ActiveSupport::Deprecation.new('3.0', 'exception_handling')
|
58
|
-
|
59
59
|
def logger=(logger)
|
60
60
|
@logger = if logger.nil? || logger.is_a?(ContextualLogger::LoggerMixin)
|
61
61
|
logger
|
@@ -57,9 +57,8 @@ module ExceptionHandling
|
|
57
57
|
@timestamp = timestamp
|
58
58
|
@controller = controller || controller_from_context(exception_context)
|
59
59
|
@data_callback = data_callback
|
60
|
-
|
61
|
-
|
62
|
-
end
|
60
|
+
# merge into the surrounding context just like ContextualLogger does when logging
|
61
|
+
@merged_log_context = ExceptionHandling.logger.current_context_for_thread.deep_merge(log_context || {})
|
63
62
|
end
|
64
63
|
|
65
64
|
def data
|
@@ -273,13 +272,11 @@ module ExceptionHandling
|
|
273
272
|
data[:exception_context] = deep_clean_hash(@exception_context) if @exception_context.present?
|
274
273
|
data[:log_context] = @merged_log_context
|
275
274
|
unstringify_sections(data)
|
276
|
-
|
275
|
+
HONEYBADGER_CONTEXT_SECTIONS.each_with_object({}) do |section, context|
|
277
276
|
if data[section].present?
|
278
277
|
context[section] = data[section]
|
279
278
|
end
|
280
|
-
context
|
281
279
|
end
|
282
|
-
context_data
|
283
280
|
end
|
284
281
|
end
|
285
282
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_support/concern'
|
4
|
+
require 'active_support/core_ext/module/delegation.rb'
|
5
|
+
|
6
|
+
module ExceptionHandling
|
7
|
+
module LoggingMethods # included on models and controllers
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
delegate :log_error_rack, :log_warning, :log_info, :log_debug, :escalate_error, :escalate_warning, :ensure_escalation, :alert_warning, to: ExceptionHandling
|
13
|
+
|
14
|
+
# TODO: delegate log_error as well
|
15
|
+
def log_error(exception_or_string, exception_context = '')
|
16
|
+
controller = self if respond_to?(:request) && respond_to?(:session)
|
17
|
+
ExceptionHandling.log_error(exception_or_string, exception_context, controller)
|
18
|
+
end
|
19
|
+
|
20
|
+
def ensure_safe(exception_context = "")
|
21
|
+
yield
|
22
|
+
rescue => ex
|
23
|
+
log_error ex, exception_context
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def ensure_alert(*args)
|
28
|
+
ExceptionHandling.ensure_alert(*args) do
|
29
|
+
yield
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,65 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'active_support/concern'
|
4
|
+
require_relative 'logging_methods'
|
4
5
|
|
5
6
|
module ExceptionHandling
|
6
7
|
module Methods # included on models and controllers
|
7
8
|
extend ActiveSupport::Concern
|
9
|
+
include ExceptionHandling::LoggingMethods
|
8
10
|
|
9
11
|
protected
|
10
12
|
|
11
|
-
def log_error(exception_or_string, exception_context = '')
|
12
|
-
controller = self if respond_to?(:request) && respond_to?(:session)
|
13
|
-
ExceptionHandling.log_error(exception_or_string, exception_context, controller)
|
14
|
-
end
|
15
|
-
|
16
|
-
def log_error_rack(exception_or_string, exception_context = '', rack_filter = '')
|
17
|
-
ExceptionHandling.log_error_rack(exception_or_string, exception_context, rack_filter)
|
18
|
-
end
|
19
|
-
|
20
|
-
def log_warning(message)
|
21
|
-
ExceptionHandling.log_warning(message)
|
22
|
-
end
|
23
|
-
|
24
|
-
def log_info(message)
|
25
|
-
ExceptionHandling.logger.info(message)
|
26
|
-
end
|
27
|
-
|
28
|
-
def log_debug(message)
|
29
|
-
ExceptionHandling.logger.debug(message)
|
30
|
-
end
|
31
|
-
|
32
|
-
def ensure_safe(exception_context = "")
|
33
|
-
yield
|
34
|
-
rescue => ex
|
35
|
-
log_error ex, exception_context
|
36
|
-
nil
|
37
|
-
end
|
38
|
-
|
39
|
-
def escalate_error(exception_or_string, email_subject)
|
40
|
-
ExceptionHandling.escalate_error(exception_or_string, email_subject)
|
41
|
-
end
|
42
|
-
|
43
|
-
def escalate_warning(message, email_subject)
|
44
|
-
ExceptionHandling.escalate_warning(message, email_subject)
|
45
|
-
end
|
46
|
-
|
47
|
-
def ensure_escalation(*args)
|
48
|
-
ExceptionHandling.ensure_escalation(*args) do
|
49
|
-
yield
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def alert_warning(*args)
|
54
|
-
ExceptionHandling.alert_warning(*args)
|
55
|
-
end
|
56
|
-
|
57
|
-
def ensure_alert(*args)
|
58
|
-
ExceptionHandling.ensure_alert(*args) do
|
59
|
-
yield
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
13
|
def long_controller_action_timeout
|
64
14
|
if defined?(Rails) && Rails.respond_to?(:env) && Rails.env == 'test'
|
65
15
|
300
|
@@ -88,7 +38,10 @@ module ExceptionHandling
|
|
88
38
|
end
|
89
39
|
|
90
40
|
included do
|
91
|
-
around_filter
|
41
|
+
Deprecation3_0.deprecation_warning('ExceptionHandling::Methods', 'include LoggingMethods; in controllers, set your own around_filter to set logging context')
|
42
|
+
if respond_to? :around_filter
|
43
|
+
around_filter :set_current_controller
|
44
|
+
end
|
92
45
|
end
|
93
46
|
|
94
47
|
class_methods do
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
module ExceptionHandling
|
6
6
|
module Testing
|
7
|
-
class
|
7
|
+
class ControllerStubBase
|
8
8
|
|
9
9
|
class Request
|
10
10
|
attr_accessor :parameters, :protocol, :host, :request_uri, :env, :session_options
|
@@ -25,7 +25,7 @@ module ExceptionHandling
|
|
25
25
|
attr_accessor :around_filter_method
|
26
26
|
|
27
27
|
def around_filter(method)
|
28
|
-
|
28
|
+
self.around_filter_method = method
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -44,14 +44,6 @@ module ExceptionHandling
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
-
def simulate_around_filter(&block)
|
48
|
-
set_current_controller(&block)
|
49
|
-
end
|
50
|
-
|
51
|
-
def controller_name
|
52
|
-
"ControllerStub"
|
53
|
-
end
|
54
|
-
|
55
47
|
def action_name
|
56
48
|
"test_action"
|
57
49
|
end
|
@@ -59,9 +51,27 @@ module ExceptionHandling
|
|
59
51
|
def complete_request_uri
|
60
52
|
"#{@request.protocol}#{@request.host}#{@request.request_uri}"
|
61
53
|
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class LoggingMethodsControllerStub < ControllerStubBase
|
57
|
+
include ExceptionHandling::LoggingMethods
|
58
|
+
|
59
|
+
def controller_name
|
60
|
+
"LoggingMethodsControllerStub"
|
61
|
+
end
|
62
|
+
end
|
62
63
|
|
64
|
+
class MethodsControllerStub < ControllerStubBase
|
63
65
|
include ExceptionHandling::Methods
|
64
66
|
set_long_controller_action_timeout 2
|
67
|
+
|
68
|
+
def simulate_around_filter(&block)
|
69
|
+
set_current_controller(&block)
|
70
|
+
end
|
71
|
+
|
72
|
+
def controller_name
|
73
|
+
"MethodsControllerStub"
|
74
|
+
end
|
65
75
|
end
|
66
76
|
end
|
67
77
|
end
|
@@ -417,6 +417,26 @@ module ExceptionHandling
|
|
417
417
|
end
|
418
418
|
|
419
419
|
context "honeybadger_context_data" do
|
420
|
+
setup do
|
421
|
+
stub(ExceptionHandling.logger).current_context_for_thread { { cuid: 'ABCD' } }
|
422
|
+
end
|
423
|
+
|
424
|
+
should "include thread_context when log_context: is nil" do
|
425
|
+
exception_with_nil_message = RuntimeError.new(nil)
|
426
|
+
stub(exception_with_nil_message).message { nil }
|
427
|
+
exception_info = ExceptionInfo.new(exception_with_nil_message, @exception_context, @timestamp)
|
428
|
+
honeybadger_context_data = exception_info.honeybadger_context_data
|
429
|
+
assert_equal({ "cuid" => 'ABCD' }, honeybadger_context_data[:log_context])
|
430
|
+
end
|
431
|
+
|
432
|
+
should "include thread context merged with log_context:" do
|
433
|
+
exception_with_nil_message = RuntimeError.new(nil)
|
434
|
+
stub(exception_with_nil_message).message { nil }
|
435
|
+
exception_info = ExceptionInfo.new(exception_with_nil_message, @exception_context, @timestamp, log_context: { url: 'http://example.com' })
|
436
|
+
honeybadger_context_data = exception_info.honeybadger_context_data
|
437
|
+
assert_equal({ "cuid" => 'ABCD', "url" => 'http://example.com' }, honeybadger_context_data[:log_context])
|
438
|
+
end
|
439
|
+
|
420
440
|
should "return the error details and relevant context data to be used as honeybadger notification context while filtering sensitive data" do
|
421
441
|
env = { server: "fe98" }
|
422
442
|
parameters = { advertiser_id: 435 }
|
@@ -464,7 +484,8 @@ module ExceptionHandling
|
|
464
484
|
"test/unit/exception_handling_test.rb:847:in `exception_1'",
|
465
485
|
"test/unit/exception_handling_test.rb:455:in `block (4 levels) in <class:ExceptionHandlingTest>'"
|
466
486
|
],
|
467
|
-
event_response: "Event successfully received"
|
487
|
+
event_response: "Event successfully received",
|
488
|
+
log_context: { "cuid" => "ABCD" }
|
468
489
|
}
|
469
490
|
assert_equal_with_diff expected_data, exception_info.honeybadger_context_data
|
470
491
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../test_helper'
|
4
|
+
require_relative '../../helpers/exception_helpers'
|
5
|
+
|
6
|
+
require "exception_handling/testing"
|
7
|
+
|
8
|
+
module ExceptionHandling
|
9
|
+
class LoggingMethodsTest < ActiveSupport::TestCase
|
10
|
+
include ExceptionHelpers
|
11
|
+
|
12
|
+
def dont_stub_log_error
|
13
|
+
true
|
14
|
+
end
|
15
|
+
|
16
|
+
context "ExceptionHandling::LoggingMethods" do
|
17
|
+
setup do
|
18
|
+
@controller = Testing::LoggingMethodsControllerStub.new
|
19
|
+
ExceptionHandling.stub_handler = nil
|
20
|
+
end
|
21
|
+
|
22
|
+
context "#log_warning" do
|
23
|
+
should "be available to the controller" do
|
24
|
+
klass = Class.new
|
25
|
+
klass.include ExceptionHandling::LoggingMethods
|
26
|
+
instance = klass.new
|
27
|
+
assert instance.methods.include?(:log_warning)
|
28
|
+
end
|
29
|
+
|
30
|
+
should "call ExceptionHandling#log_warning" do
|
31
|
+
mock(ExceptionHandling).log_warning("Hi mom")
|
32
|
+
@controller.send(:log_warning, "Hi mom")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative '../../test_helper'
|
4
|
+
require_relative '../../helpers/exception_helpers'
|
4
5
|
|
5
6
|
require "exception_handling/testing"
|
6
7
|
|
@@ -12,14 +13,14 @@ module ExceptionHandling
|
|
12
13
|
true
|
13
14
|
end
|
14
15
|
|
15
|
-
context "ExceptionHandling
|
16
|
+
context "ExceptionHandling::Methods" do
|
16
17
|
setup do
|
17
|
-
@controller = Testing::
|
18
|
+
@controller = Testing::MethodsControllerStub.new
|
18
19
|
ExceptionHandling.stub_handler = nil
|
19
20
|
end
|
20
21
|
|
21
22
|
should "set the around filter" do
|
22
|
-
assert_equal :set_current_controller, Testing::
|
23
|
+
assert_equal :set_current_controller, Testing::MethodsControllerStub.around_filter_method
|
23
24
|
assert_nil ExceptionHandling.current_controller
|
24
25
|
@controller.simulate_around_filter do
|
25
26
|
assert_equal @controller, ExceptionHandling.current_controller
|
@@ -70,15 +71,35 @@ module ExceptionHandling
|
|
70
71
|
|
71
72
|
context "#log_warning" do
|
72
73
|
should "be available to the controller" do
|
73
|
-
|
74
|
+
assert @controller.methods.include?(:log_warning)
|
74
75
|
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context "included deprecation" do
|
80
|
+
setup do
|
81
|
+
mock_deprecation_3_0
|
82
|
+
end
|
75
83
|
|
76
|
-
|
77
|
-
|
78
|
-
|
84
|
+
should "deprecate when no around_filter in included hook" do
|
85
|
+
k = Class.new
|
86
|
+
k.include ExceptionHandling::Methods
|
87
|
+
end
|
88
|
+
|
89
|
+
should "deprecate controller around_filter in included hook" do
|
90
|
+
controller = Class.new
|
91
|
+
class << controller
|
92
|
+
def around_filter(*)
|
93
|
+
end
|
79
94
|
end
|
95
|
+
controller.include ExceptionHandling::Methods
|
80
96
|
end
|
81
97
|
end
|
82
98
|
|
99
|
+
private
|
100
|
+
|
101
|
+
def mock_deprecation_3_0
|
102
|
+
mock(STDERR).puts(/DEPRECATION WARNING: ExceptionHandling::Methods is deprecated and will be removed from exception_handling 3\.0/)
|
103
|
+
end
|
83
104
|
end
|
84
105
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exception_handling
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.7.0.pre.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Invoca
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionmailer
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/exception_handling/exception_info.rb
|
144
144
|
- lib/exception_handling/honeybadger_callbacks.rb
|
145
145
|
- lib/exception_handling/log_stub_error.rb
|
146
|
+
- lib/exception_handling/logging_methods.rb
|
146
147
|
- lib/exception_handling/mailer.rb
|
147
148
|
- lib/exception_handling/methods.rb
|
148
149
|
- lib/exception_handling/sensu.rb
|
@@ -157,6 +158,7 @@ files:
|
|
157
158
|
- test/unit/exception_handling/exception_info_test.rb
|
158
159
|
- test/unit/exception_handling/honeybadger_callbacks_test.rb
|
159
160
|
- test/unit/exception_handling/log_error_stub_test.rb
|
161
|
+
- test/unit/exception_handling/logging_methods_test.rb
|
160
162
|
- test/unit/exception_handling/mailer_test.rb
|
161
163
|
- test/unit/exception_handling/methods_test.rb
|
162
164
|
- test/unit/exception_handling/sensu_test.rb
|
@@ -169,7 +171,7 @@ licenses: []
|
|
169
171
|
metadata:
|
170
172
|
source_code_uri: https://github.com/Invoca/exception_handling
|
171
173
|
allowed_push_host: https://rubygems.org
|
172
|
-
post_install_message:
|
174
|
+
post_install_message:
|
173
175
|
rdoc_options: []
|
174
176
|
require_paths:
|
175
177
|
- lib
|
@@ -180,12 +182,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
182
|
version: '0'
|
181
183
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
184
|
requirements:
|
183
|
-
- - "
|
185
|
+
- - ">"
|
184
186
|
- !ruby/object:Gem::Version
|
185
|
-
version:
|
187
|
+
version: 1.3.1
|
186
188
|
requirements: []
|
187
189
|
rubygems_version: 3.0.3
|
188
|
-
signing_key:
|
190
|
+
signing_key:
|
189
191
|
specification_version: 4
|
190
192
|
summary: Invoca's exception handling logger/emailer layer, based on exception_notifier.
|
191
193
|
Works with Rails or EventMachine or EventMachine+Synchrony.
|
@@ -199,6 +201,7 @@ test_files:
|
|
199
201
|
- test/unit/exception_handling/exception_info_test.rb
|
200
202
|
- test/unit/exception_handling/honeybadger_callbacks_test.rb
|
201
203
|
- test/unit/exception_handling/log_error_stub_test.rb
|
204
|
+
- test/unit/exception_handling/logging_methods_test.rb
|
202
205
|
- test/unit/exception_handling/mailer_test.rb
|
203
206
|
- test/unit/exception_handling/methods_test.rb
|
204
207
|
- test/unit/exception_handling/sensu_test.rb
|