uniform_notifier 1.13.2 → 1.14.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 +7 -0
- data/README.md +10 -1
- data/lib/uniform_notifier.rb +10 -6
- data/lib/uniform_notifier/airbrake.rb +12 -10
- data/lib/uniform_notifier/appsignal.rb +25 -0
- data/lib/uniform_notifier/base.rb +28 -26
- data/lib/uniform_notifier/bugsnag.rb +12 -10
- data/lib/uniform_notifier/customized_logger.rb +15 -13
- data/lib/uniform_notifier/errors.rb +2 -1
- data/lib/uniform_notifier/growl.rb +52 -50
- data/lib/uniform_notifier/honeybadger.rb +13 -11
- data/lib/uniform_notifier/javascript_alert.rb +11 -9
- data/lib/uniform_notifier/javascript_console.rb +21 -19
- data/lib/uniform_notifier/rails_logger.rb +9 -7
- data/lib/uniform_notifier/raise.rb +12 -10
- data/lib/uniform_notifier/rollbar.rb +12 -10
- data/lib/uniform_notifier/sentry.rb +12 -10
- data/lib/uniform_notifier/slack.rb +2 -2
- data/lib/uniform_notifier/terminal_notifier.rb +15 -13
- data/lib/uniform_notifier/version.rb +1 -1
- data/lib/uniform_notifier/xmpp.rb +42 -40
- data/spec/uniform_notifier/appsignal_spec.rb +76 -0
- data/spec/uniform_notifier/bugsnag_spec.rb +14 -4
- data/spec/uniform_notifier/growl_spec.rb +11 -16
- data/spec/uniform_notifier/javascript_alert_spec.rb +1 -1
- data/spec/uniform_notifier/javascript_console_spec.rb +1 -1
- data/spec/uniform_notifier/sentry_spec.rb +3 -3
- data/spec/uniform_notifier/slack_spec.rb +2 -2
- data/spec/uniform_notifier/xmpp_spec.rb +8 -2
- data/uniform_notifier.gemspec +1 -1
- metadata +11 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9fa5744a54e1bff245ab1f1b03974250a6a0880d63ba05b6594ada564bf4c87
|
4
|
+
data.tar.gz: ae4f6c59d2377f88f50419bcc1abe9215987a9b9c1d549b1323919d9f2d5841a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d739e807172146c2647ab96b122825efc3c033bc27dc3a27cf05c7d7e1c07bc2a273a15df6dd1f8574273663b30143b82cb997756c65a61c69c051c332c81dee
|
7
|
+
data.tar.gz: 785945370f105bacf35cc12b2d769a6d3038d4520df5f376e9d42cf055ea0959777431058c0f9f0f05bd1a2a823dcf2aaa929201d07122ab3aef3128732cda56
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Next Release
|
2
2
|
|
3
|
+
# 1.14.1 (02/28/2021)
|
4
|
+
|
5
|
+
* Fix uninitialized constant ``UniformNotifier::SentryNotifier::Raven`` error
|
6
|
+
|
7
|
+
# 1.14.0 (02/26/2021)
|
8
|
+
|
9
|
+
* Add AppSignal integration
|
3
10
|
* Fix UniformNotifier::Raise.active? when .rails= receives a false value
|
4
11
|
|
5
12
|
## 1.13.0 (10/05/2019)
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
Status](https://secure.travis-ci.org/flyerhzm/uniform_notifier.svg)](http://travis-ci.org/flyerhzm/uniform_notifier)
|
5
5
|
[](https://awesomecode.io/repos/flyerhzm/uniform_notifier)
|
6
6
|
|
7
|
-
uniform_notifier is extracted from [bullet][0], it gives you the ability to send notification through rails logger, customized logger, javascript alert, javascript console, growl, xmpp, airbrake and
|
7
|
+
uniform_notifier is extracted from [bullet][0], it gives you the ability to send notification through rails logger, customized logger, javascript alert, javascript console, growl, xmpp, airbrake, honeybadger and AppSignal.
|
8
8
|
|
9
9
|
## Install
|
10
10
|
|
@@ -40,6 +40,10 @@ if you want to notify by bugsnag, you should install bugsnag first
|
|
40
40
|
|
41
41
|
gem install bugsnag
|
42
42
|
|
43
|
+
if you want to notify by AppSignal, you should install AppSignal first
|
44
|
+
|
45
|
+
gem install appsignal
|
46
|
+
|
43
47
|
if you want to notify by slack, you should install slack-notifier first
|
44
48
|
|
45
49
|
gem install slack-notifier
|
@@ -83,6 +87,11 @@ UniformNotifier.airbrake = true
|
|
83
87
|
# airbrake with options
|
84
88
|
UniformNotifier.airbrake = { :error_class => Exception }
|
85
89
|
|
90
|
+
# AppSignal
|
91
|
+
UniformNotifier.appsignal = true
|
92
|
+
# AppSignal with options
|
93
|
+
UniformNotifier.appsignal = { :namespace => "Background", :tags => { :hostname => "frontend1" } }
|
94
|
+
|
86
95
|
# Honeybadger
|
87
96
|
#
|
88
97
|
# Reporting live data from development is disabled by default. Ensure
|
data/lib/uniform_notifier.rb
CHANGED
@@ -13,6 +13,7 @@ require 'uniform_notifier/airbrake'
|
|
13
13
|
require 'uniform_notifier/sentry'
|
14
14
|
require 'uniform_notifier/rollbar'
|
15
15
|
require 'uniform_notifier/bugsnag'
|
16
|
+
require 'uniform_notifier/appsignal'
|
16
17
|
require 'uniform_notifier/slack'
|
17
18
|
require 'uniform_notifier/raise'
|
18
19
|
require 'uniform_notifier/terminal_notifier'
|
@@ -32,6 +33,7 @@ class UniformNotifier
|
|
32
33
|
slack
|
33
34
|
raise
|
34
35
|
sentry
|
36
|
+
appsignal
|
35
37
|
terminal_notifier
|
36
38
|
].freeze
|
37
39
|
|
@@ -49,10 +51,12 @@ class UniformNotifier
|
|
49
51
|
Raise,
|
50
52
|
Slack,
|
51
53
|
SentryNotifier,
|
54
|
+
AppsignalNotifier,
|
52
55
|
TerminalNotifier
|
53
56
|
].freeze
|
54
57
|
|
55
|
-
class NotificationError < StandardError
|
58
|
+
class NotificationError < StandardError
|
59
|
+
end
|
56
60
|
|
57
61
|
class << self
|
58
62
|
attr_accessor(*AVAILABLE_NOTIFIERS)
|
@@ -61,27 +65,27 @@ class UniformNotifier
|
|
61
65
|
NOTIFIERS.select(&:active?)
|
62
66
|
end
|
63
67
|
|
64
|
-
undef
|
68
|
+
undef growl=
|
65
69
|
def growl=(growl)
|
66
70
|
UniformNotifier::Growl.setup_connection(growl)
|
67
71
|
end
|
68
72
|
|
69
|
-
undef
|
73
|
+
undef xmpp=
|
70
74
|
def xmpp=(xmpp)
|
71
75
|
UniformNotifier::Xmpp.setup_connection(xmpp)
|
72
76
|
end
|
73
77
|
|
74
|
-
undef
|
78
|
+
undef customized_logger=
|
75
79
|
def customized_logger=(logdev)
|
76
80
|
UniformNotifier::CustomizedLogger.setup(logdev)
|
77
81
|
end
|
78
82
|
|
79
|
-
undef
|
83
|
+
undef slack=
|
80
84
|
def slack=(slack)
|
81
85
|
UniformNotifier::Slack.setup_connection(slack)
|
82
86
|
end
|
83
87
|
|
84
|
-
undef
|
88
|
+
undef raise=
|
85
89
|
def raise=(exception_class)
|
86
90
|
UniformNotifier::Raise.setup_connection(exception_class)
|
87
91
|
end
|
@@ -2,20 +2,22 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class AirbrakeNotifier < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.airbrake
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
opt = {}
|
16
|
+
opt = UniformNotifier.airbrake if UniformNotifier.airbrake.is_a?(Hash)
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
exception = Exception.new(message)
|
19
|
+
Airbrake.notify(exception, opt)
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class UniformNotifier
|
4
|
+
class AppsignalNotifier < Base
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.appsignal
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
opt = UniformNotifier.appsignal.is_a?(Hash) ? UniformNotifier.appsignal : {}
|
14
|
+
|
15
|
+
exception = Exception.new(data[:title])
|
16
|
+
exception.set_backtrace(data[:backtrace]) if data[:backtrace]
|
17
|
+
|
18
|
+
tags = opt.fetch(:tags, {}).merge(data.fetch(:tags, {}))
|
19
|
+
namespace = data[:namespace] || opt[:namespace]
|
20
|
+
|
21
|
+
Appsignal.send_error(*[exception, tags, namespace].compact)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -2,43 +2,45 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
false
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
10
|
+
def inline_notify(data)
|
11
|
+
return unless active?
|
11
12
|
|
12
|
-
|
13
|
-
|
13
|
+
# For compatibility to the old protocol
|
14
|
+
data = { title: data } if data.is_a?(String)
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
_inline_notify(data)
|
17
|
+
end
|
17
18
|
|
18
|
-
|
19
|
-
|
19
|
+
def out_of_channel_notify(data)
|
20
|
+
return unless active?
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
# For compatibility to the old protocol
|
23
|
+
data = { title: data } if data.is_a?(String)
|
23
24
|
|
24
|
-
|
25
|
-
|
25
|
+
_out_of_channel_notify(data)
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
+
protected
|
28
29
|
|
29
|
-
|
30
|
+
def _inline_notify(data); end
|
30
31
|
|
31
|
-
|
32
|
+
def _out_of_channel_notify(data); end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
34
|
+
def wrap_js_association(code, attributes = {})
|
35
|
+
attributes = { type: 'text/javascript' }.merge(attributes || {})
|
36
|
+
attributes_string = attributes.map { |k, v| "#{k}=#{v.to_s.inspect}" }.join(' ')
|
36
37
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
<<~CODE
|
39
|
+
<script #{attributes_string}>/*<![CDATA[*/
|
40
|
+
#{code}
|
41
|
+
/*]]>*/</script>
|
42
|
+
CODE
|
43
|
+
end
|
42
44
|
end
|
43
45
|
end
|
44
46
|
end
|
@@ -2,19 +2,21 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class BugsnagNotifier < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.bugsnag
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
opt = {}
|
14
|
+
opt = UniformNotifier.bugsnag if UniformNotifier.bugsnag.is_a?(Hash)
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
exception = Exception.new(data[:title])
|
17
|
+
exception.set_backtrace(data[:backtrace]) if data[:backtrace]
|
18
|
+
Bugsnag.notify(exception, opt.merge(grouping_hash: data[:body] || data[:title], notification: data))
|
19
|
+
end
|
18
20
|
end
|
19
21
|
end
|
20
22
|
end
|
@@ -2,24 +2,26 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class CustomizedLogger < Base
|
5
|
-
|
5
|
+
class << self
|
6
|
+
@logger = nil
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def active?
|
9
|
+
@logger
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
14
|
+
@logger.warn message
|
15
|
+
end
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
def setup(logdev)
|
18
|
+
require 'logger'
|
18
19
|
|
19
|
-
|
20
|
+
@logger = Logger.new(logdev)
|
20
21
|
|
21
|
-
|
22
|
-
|
22
|
+
def @logger.format_message(severity, timestamp, _progname, msg)
|
23
|
+
"#{timestamp.strftime('%Y-%m-%d %H:%M:%S')}[#{severity}] #{msg}"
|
24
|
+
end
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -2,72 +2,74 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class Growl < Base
|
5
|
-
|
5
|
+
class << self
|
6
|
+
@growl = nil
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def active?
|
9
|
+
@growl
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
rescue LoadError
|
14
|
-
begin
|
15
|
-
setup_connection_gntp(growl)
|
12
|
+
def setup_connection(growl)
|
13
|
+
setup_connection_growl(growl)
|
16
14
|
rescue LoadError
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
begin
|
16
|
+
setup_connection_gntp(growl)
|
17
|
+
rescue LoadError
|
18
|
+
@growl = nil
|
19
|
+
raise NotificationError,
|
20
|
+
'You must install the ruby-growl or the ruby_gntp gem to use Growl notification: `gem install ruby-growl` or `gem install ruby_gntp`'
|
21
|
+
end
|
20
22
|
end
|
21
|
-
end
|
22
23
|
|
23
|
-
|
24
|
-
|
24
|
+
def setup_connection_growl(growl)
|
25
|
+
return unless growl
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
require 'ruby-growl'
|
28
|
+
if growl.instance_of?(Hash)
|
29
|
+
@password = growl.include?(:password) ? growl[:password] : nil
|
30
|
+
@host = growl.include?(:host) ? growl[:host] : 'localhost'
|
31
|
+
end
|
32
|
+
@password ||= nil
|
33
|
+
@host ||= 'localhost'
|
34
|
+
@growl = ::Growl.new @host, 'uniform_notifier'
|
35
|
+
@growl.add_notification 'uniform_notifier'
|
36
|
+
@growl.password = @password
|
37
|
+
|
38
|
+
notify 'Uniform Notifier Growl has been turned on' if !growl.instance_of?(Hash) || !growl[:quiet]
|
30
39
|
end
|
31
|
-
@password ||= nil
|
32
|
-
@host ||= 'localhost'
|
33
|
-
@growl = ::Growl.new @host, 'uniform_notifier'
|
34
|
-
@growl.add_notification 'uniform_notifier'
|
35
|
-
@growl.password = @password
|
36
40
|
|
37
|
-
|
38
|
-
|
41
|
+
def setup_connection_gntp(growl)
|
42
|
+
return unless growl
|
39
43
|
|
40
|
-
|
41
|
-
|
44
|
+
require 'ruby_gntp'
|
45
|
+
if growl.instance_of?(Hash)
|
46
|
+
@password = growl.include?(:password) ? growl[:password] : nil
|
47
|
+
@host = growl.include?(:host) ? growl[:host] : 'localhost'
|
48
|
+
end
|
49
|
+
@password ||= nil
|
50
|
+
@host ||= 'localhost'
|
51
|
+
@growl = GNTP.new('uniform_notifier', @host, @password, 23_053)
|
52
|
+
@growl.register(notifications: [{ name: 'uniform_notifier', enabled: true }])
|
42
53
|
|
43
|
-
|
44
|
-
if growl.instance_of?(Hash)
|
45
|
-
@password = growl.include?(:password) ? growl[:password] : nil
|
46
|
-
@host = growl.include?(:host) ? growl[:host] : 'localhost'
|
54
|
+
notify 'Uniform Notifier Growl has been turned on (using GNTP)' if !growl.instance_of?(Hash) || !growl[:quiet]
|
47
55
|
end
|
48
|
-
@password ||= nil
|
49
|
-
@host ||= 'localhost'
|
50
|
-
@growl = GNTP.new('uniform_notifier', @host, @password, 23_053)
|
51
|
-
@growl.register(notifications: [{ name: 'uniform_notifier', enabled: true }])
|
52
56
|
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
protected
|
57
|
+
protected
|
57
58
|
|
58
|
-
|
59
|
-
|
59
|
+
def _out_of_channel_notify(data)
|
60
|
+
message = data.values.compact.join("\n")
|
60
61
|
|
61
|
-
|
62
|
-
|
62
|
+
notify(message)
|
63
|
+
end
|
63
64
|
|
64
|
-
|
65
|
+
private
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
def notify(message)
|
68
|
+
if defined?(::Growl) && @growl.is_a?(::Growl)
|
69
|
+
@growl.notify('uniform_notifier', 'Uniform Notifier', message)
|
70
|
+
elsif defined?(::GNTP) && @growl.is_a?(::GNTP)
|
71
|
+
@growl.notify(name: 'uniform_notifier', title: 'Uniform Notifier', text: message)
|
72
|
+
end
|
71
73
|
end
|
72
74
|
end
|
73
75
|
end
|
@@ -2,21 +2,23 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class HoneybadgerNotifier < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.honeybadger
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
opt = {}
|
16
|
+
opt = UniformNotifier.honeybadger if UniformNotifier.honeybadger.is_a?(Hash)
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
exception = Exception.new(message)
|
19
|
+
honeybadger_class = opt[:honeybadger_class] || Honeybadger
|
20
|
+
honeybadger_class.notify(exception, opt)
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -2,18 +2,20 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class JavascriptAlert < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.alert
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def _inline_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
14
|
+
options = UniformNotifier.alert.is_a?(Hash) ? UniformNotifier.alert : {}
|
15
|
+
script_attributes = options[:attributes] || {}
|
15
16
|
|
16
|
-
|
17
|
+
wrap_js_association "alert( #{message.inspect} );", script_attributes
|
18
|
+
end
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -2,30 +2,32 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class JavascriptConsole < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.console
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
def _inline_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
14
|
+
options = UniformNotifier.console.is_a?(Hash) ? UniformNotifier.console : {}
|
15
|
+
script_attributes = options[:attributes] || {}
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
code = <<~CODE
|
18
|
+
if (typeof(console) !== 'undefined' && console.log) {
|
19
|
+
if (console.groupCollapsed && console.groupEnd) {
|
20
|
+
console.groupCollapsed(#{'Uniform Notifier'.inspect});
|
21
|
+
console.log(#{message.inspect});
|
22
|
+
console.groupEnd();
|
23
|
+
} else {
|
24
|
+
console.log(#{message.inspect});
|
25
|
+
}
|
24
26
|
}
|
25
|
-
|
26
|
-
CODE
|
27
|
+
CODE
|
27
28
|
|
28
|
-
|
29
|
+
wrap_js_association code, script_attributes
|
30
|
+
end
|
29
31
|
end
|
30
32
|
end
|
31
33
|
end
|
@@ -2,16 +2,18 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class RailsLogger < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
UniformNotifier.rails_logger
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
13
14
|
|
14
|
-
|
15
|
+
Rails.logger.warn message
|
16
|
+
end
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -2,20 +2,22 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class Raise < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
defined?(@exception_class) ? @exception_class : false
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def setup_connection(exception_class)
|
11
|
+
@exception_class = exception_class == true ? Exception : exception_class
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
+
protected
|
14
15
|
|
15
|
-
|
16
|
-
|
16
|
+
def _out_of_channel_notify(data)
|
17
|
+
message = data.values.compact.join("\n")
|
17
18
|
|
18
|
-
|
19
|
+
raise @exception_class, message
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -4,20 +4,22 @@ class UniformNotifier
|
|
4
4
|
class RollbarNotifier < Base
|
5
5
|
DEFAULT_LEVEL = 'info'
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
class << self
|
8
|
+
def active?
|
9
|
+
!!UniformNotifier.rollbar
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
+
protected
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
def _out_of_channel_notify(data)
|
15
|
+
message = data.values.compact.join("\n")
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
|
17
|
+
exception = Exception.new(message)
|
18
|
+
level = UniformNotifier.rollbar.fetch(:level, DEFAULT_LEVEL) if UniformNotifier.rollbar.is_a?(Hash)
|
19
|
+
level ||= DEFAULT_LEVEL
|
19
20
|
|
20
|
-
|
21
|
+
Rollbar.log(level, exception)
|
22
|
+
end
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -2,20 +2,22 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class SentryNotifier < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.sentry
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
message = data.values.compact.join("\n")
|
13
14
|
|
14
|
-
|
15
|
-
|
15
|
+
opt = {}
|
16
|
+
opt = UniformNotifier.sentry if UniformNotifier.sentry.is_a?(Hash)
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
exception = Exception.new(message)
|
19
|
+
Sentry.capture_exception(exception, opt)
|
20
|
+
end
|
19
21
|
end
|
20
22
|
end
|
21
23
|
end
|
@@ -2,23 +2,25 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class TerminalNotifier < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
def active?
|
7
|
+
!!UniformNotifier.terminal_notifier
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
+
protected
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
12
|
+
def _out_of_channel_notify(data)
|
13
|
+
unless defined?(::TerminalNotifier)
|
14
|
+
begin
|
15
|
+
require 'terminal-notifier'
|
16
|
+
rescue LoadError
|
17
|
+
raise NotificationError,
|
18
|
+
'You must install the terminal-notifier gem to use terminal_notifier: `gem install terminal-notifier`'
|
19
|
+
end
|
18
20
|
end
|
19
|
-
end
|
20
21
|
|
21
|
-
|
22
|
+
::TerminalNotifier.notify(data[:body], title: data[:title])
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
@@ -2,58 +2,60 @@
|
|
2
2
|
|
3
3
|
class UniformNotifier
|
4
4
|
class Xmpp < Base
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
class << self
|
6
|
+
@receiver = nil
|
7
|
+
@xmpp = nil
|
8
|
+
@password = nil
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
def active?
|
11
|
+
@xmpp
|
12
|
+
end
|
12
13
|
|
13
|
-
|
14
|
-
|
14
|
+
def setup_connection(xmpp_information)
|
15
|
+
return unless xmpp_information
|
15
16
|
|
16
|
-
|
17
|
+
require 'xmpp4r'
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
@xmpp = xmpp_information
|
20
|
+
@receiver = xmpp_information[:receiver]
|
21
|
+
@password = xmpp_information[:password]
|
22
|
+
@account = xmpp_information[:account]
|
23
|
+
@show_online_status = xmpp_information[:show_online_status]
|
24
|
+
@stay_connected = xmpp_information[:stay_connected].nil? ? true : xmpp_information[:stay_connected]
|
24
25
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
connect if @stay_connected
|
27
|
+
rescue LoadError
|
28
|
+
@xmpp = nil
|
29
|
+
raise NotificationError, 'You must install the xmpp4r gem to use XMPP notification: `gem install xmpp4r`'
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
+
protected
|
32
33
|
|
33
|
-
|
34
|
-
|
34
|
+
def _out_of_channel_notify(data)
|
35
|
+
message = data.values.compact.join("\n")
|
35
36
|
|
36
|
-
|
37
|
-
|
37
|
+
notify(message)
|
38
|
+
end
|
38
39
|
|
39
|
-
|
40
|
+
private
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
def connect
|
43
|
+
jid = Jabber::JID.new(@account)
|
44
|
+
@xmpp = Jabber::Client.new(jid)
|
45
|
+
@xmpp.connect
|
46
|
+
@xmpp.auth(@password)
|
47
|
+
@xmpp.send(presence_status) if @show_online_status
|
48
|
+
end
|
48
49
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
50
|
+
def notify(message)
|
51
|
+
connect unless @stay_connected
|
52
|
+
message = Jabber::Message.new(@receiver, message).set_type(:normal).set_subject('Uniform Notifier')
|
53
|
+
@xmpp.send(message)
|
54
|
+
end
|
54
55
|
|
55
|
-
|
56
|
-
|
56
|
+
def presence_status
|
57
|
+
Jabber::Presence.new.set_status("Uniform Notifier started on #{Time.now}")
|
58
|
+
end
|
57
59
|
end
|
58
60
|
end
|
59
61
|
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
class Appsignal
|
6
|
+
# mock AppSignal
|
7
|
+
end
|
8
|
+
|
9
|
+
RSpec.describe UniformNotifier::AppsignalNotifier do
|
10
|
+
it 'should not notify appsignal' do
|
11
|
+
expect(UniformNotifier::AppsignalNotifier.out_of_channel_notify(title: 'notify appsignal')).to be_nil
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'should notify appsignal with keyword title' do
|
15
|
+
expect(Appsignal).to receive(:send_error).with(UniformNotifier::Exception.new('notify appsignal'), {})
|
16
|
+
|
17
|
+
UniformNotifier.appsignal = true
|
18
|
+
expect(UniformNotifier::AppsignalNotifier.out_of_channel_notify(title: 'notify appsignal'))
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should notify appsignal with first argument title' do
|
22
|
+
expect(Appsignal).to receive(:send_error).with(UniformNotifier::Exception.new('notify appsignal'), {})
|
23
|
+
|
24
|
+
UniformNotifier.appsignal = true
|
25
|
+
UniformNotifier::AppsignalNotifier.out_of_channel_notify('notify appsignal')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'should notify appsignal with tags' do
|
29
|
+
expect(Appsignal).to receive(:send_error).with(UniformNotifier::Exception.new('notify appsignal'), { foo: :bar })
|
30
|
+
|
31
|
+
UniformNotifier.appsignal = true
|
32
|
+
UniformNotifier::AppsignalNotifier.out_of_channel_notify(title: 'notify appsignal', tags: { foo: :bar })
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should notify appsignal with default namespace' do
|
36
|
+
expect(Appsignal).to receive(:send_error).with(UniformNotifier::Exception.new('notify appsignal'), {}, 'web')
|
37
|
+
|
38
|
+
UniformNotifier.appsignal = { namespace: 'web' }
|
39
|
+
UniformNotifier::AppsignalNotifier.out_of_channel_notify('notify appsignal')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should notify appsignal with overridden namespace' do
|
43
|
+
expect(Appsignal).to receive(:send_error).with(
|
44
|
+
UniformNotifier::Exception.new('notify appsignal'),
|
45
|
+
{ foo: :bar },
|
46
|
+
'background'
|
47
|
+
)
|
48
|
+
|
49
|
+
UniformNotifier.appsignal = { namespace: 'web' }
|
50
|
+
UniformNotifier::AppsignalNotifier.out_of_channel_notify(
|
51
|
+
title: 'notify appsignal',
|
52
|
+
tags: {
|
53
|
+
foo: :bar
|
54
|
+
},
|
55
|
+
namespace: 'background'
|
56
|
+
)
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'should notify appsignal with merged tags' do
|
60
|
+
expect(Appsignal).to receive(:send_error).with(
|
61
|
+
UniformNotifier::Exception.new('notify appsignal'),
|
62
|
+
{ user: 'Bob', hostname: 'frontend2', site: 'first' },
|
63
|
+
'background'
|
64
|
+
)
|
65
|
+
|
66
|
+
UniformNotifier.appsignal = { namespace: 'web', tags: { hostname: 'frontend1', user: 'Bob' } }
|
67
|
+
UniformNotifier::AppsignalNotifier.out_of_channel_notify(
|
68
|
+
title: 'notify appsignal',
|
69
|
+
tags: {
|
70
|
+
hostname: 'frontend2',
|
71
|
+
site: 'first'
|
72
|
+
},
|
73
|
+
namespace: 'background'
|
74
|
+
)
|
75
|
+
end
|
76
|
+
end
|
@@ -18,7 +18,8 @@ RSpec.describe UniformNotifier::BugsnagNotifier do
|
|
18
18
|
it 'should notify bugsnag' do
|
19
19
|
expect(Bugsnag).to receive(:notify).with(
|
20
20
|
UniformNotifier::Exception.new(notification_data[:title]),
|
21
|
-
grouping_hash: notification_data[:body],
|
21
|
+
grouping_hash: notification_data[:body],
|
22
|
+
notification: notification_data
|
22
23
|
)
|
23
24
|
|
24
25
|
UniformNotifier.bugsnag = true
|
@@ -28,7 +29,9 @@ RSpec.describe UniformNotifier::BugsnagNotifier do
|
|
28
29
|
it 'should notify bugsnag with option' do
|
29
30
|
expect(Bugsnag).to receive(:notify).with(
|
30
31
|
UniformNotifier::Exception.new(notification_data[:title]),
|
31
|
-
foo: :bar,
|
32
|
+
foo: :bar,
|
33
|
+
grouping_hash: notification_data[:body],
|
34
|
+
notification: notification_data
|
32
35
|
)
|
33
36
|
|
34
37
|
UniformNotifier.bugsnag = { foo: :bar }
|
@@ -41,7 +44,10 @@ RSpec.describe UniformNotifier::BugsnagNotifier do
|
|
41
44
|
it 'should notify bugsnag' do
|
42
45
|
expect(Bugsnag).to receive(:notify).with(
|
43
46
|
UniformNotifier::Exception.new('notify bugsnag'),
|
44
|
-
grouping_hash: 'notify bugsnag',
|
47
|
+
grouping_hash: 'notify bugsnag',
|
48
|
+
notification: {
|
49
|
+
title: 'notify bugsnag'
|
50
|
+
}
|
45
51
|
)
|
46
52
|
|
47
53
|
UniformNotifier.bugsnag = true
|
@@ -51,7 +57,11 @@ RSpec.describe UniformNotifier::BugsnagNotifier do
|
|
51
57
|
it 'should notify bugsnag with option' do
|
52
58
|
expect(Bugsnag).to receive(:notify).with(
|
53
59
|
UniformNotifier::Exception.new('notify bugsnag'),
|
54
|
-
foo: :bar,
|
60
|
+
foo: :bar,
|
61
|
+
grouping_hash: 'notify bugsnag',
|
62
|
+
notification: {
|
63
|
+
title: 'notify bugsnag'
|
64
|
+
}
|
55
65
|
)
|
56
66
|
|
57
67
|
UniformNotifier.bugsnag = { foo: :bar }
|
@@ -12,12 +12,11 @@ RSpec.describe UniformNotifier::Growl do
|
|
12
12
|
expect(Growl).to receive(:new).with('localhost', 'uniform_notifier').and_return(growl)
|
13
13
|
expect(growl).to receive(:add_notification).with('uniform_notifier')
|
14
14
|
expect(growl).to receive(:password=).with(nil)
|
15
|
-
expect(growl).to receive(:notify)
|
16
|
-
'uniform_notifier',
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
expect(growl).to receive(:notify).with('uniform_notifier', 'Uniform Notifier', 'notify growl without password')
|
15
|
+
expect(growl).to receive(:notify)
|
16
|
+
.with('uniform_notifier', 'Uniform Notifier', 'Uniform Notifier Growl has been turned on')
|
17
|
+
.ordered
|
18
|
+
expect(growl).to receive(:notify)
|
19
|
+
.with('uniform_notifier', 'Uniform Notifier', 'notify growl without password')
|
21
20
|
.ordered
|
22
21
|
|
23
22
|
UniformNotifier.growl = true
|
@@ -29,11 +28,9 @@ RSpec.describe UniformNotifier::Growl do
|
|
29
28
|
expect(Growl).to receive(:new).with('localhost', 'uniform_notifier').and_return(growl)
|
30
29
|
expect(growl).to receive(:add_notification).with('uniform_notifier')
|
31
30
|
expect(growl).to receive(:password=).with('123456')
|
32
|
-
expect(growl).to receive(:notify)
|
33
|
-
'uniform_notifier',
|
34
|
-
|
35
|
-
'Uniform Notifier Growl has been turned on'
|
36
|
-
).ordered
|
31
|
+
expect(growl).to receive(:notify)
|
32
|
+
.with('uniform_notifier', 'Uniform Notifier', 'Uniform Notifier Growl has been turned on')
|
33
|
+
.ordered
|
37
34
|
expect(growl).to receive(:notify).with('uniform_notifier', 'Uniform Notifier', 'notify growl with password').ordered
|
38
35
|
|
39
36
|
UniformNotifier.growl = { password: '123456' }
|
@@ -45,11 +42,9 @@ RSpec.describe UniformNotifier::Growl do
|
|
45
42
|
expect(Growl).to receive(:new).with('10.10.156.17', 'uniform_notifier').and_return(growl)
|
46
43
|
expect(growl).to receive(:add_notification).with('uniform_notifier')
|
47
44
|
expect(growl).to receive(:password=).with('123456')
|
48
|
-
expect(growl).to receive(:notify)
|
49
|
-
'uniform_notifier',
|
50
|
-
|
51
|
-
'Uniform Notifier Growl has been turned on'
|
52
|
-
).ordered
|
45
|
+
expect(growl).to receive(:notify)
|
46
|
+
.with('uniform_notifier', 'Uniform Notifier', 'Uniform Notifier Growl has been turned on')
|
47
|
+
.ordered
|
53
48
|
expect(growl).to receive(:notify).with('uniform_notifier', 'Uniform Notifier', 'notify growl with password').ordered
|
54
49
|
|
55
50
|
UniformNotifier.growl = { password: '123456', host: '10.10.156.17' }
|
@@ -17,7 +17,7 @@ RSpec.describe UniformNotifier::JavascriptAlert do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it 'should accept custom attributes' do
|
20
|
-
UniformNotifier.alert = { attributes: { nonce
|
20
|
+
UniformNotifier.alert = { attributes: { :nonce => 'my-nonce', 'data-key' => :value } }
|
21
21
|
expect(UniformNotifier::JavascriptAlert.inline_notify(title: 'javascript alert!')).to eq <<~CODE
|
22
22
|
<script type="text/javascript" nonce="my-nonce" data-key="value">/*<![CDATA[*/
|
23
23
|
alert( "javascript alert!" );
|
@@ -26,7 +26,7 @@ RSpec.describe UniformNotifier::JavascriptConsole do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'should accept custom attributes' do
|
29
|
-
UniformNotifier.console = { attributes: { nonce
|
29
|
+
UniformNotifier.console = { attributes: { :nonce => 'my-nonce', 'data-key' => :value } }
|
30
30
|
expect(UniformNotifier::JavascriptConsole.inline_notify(title: 'javascript console!')).to eq <<~CODE
|
31
31
|
<script type="text/javascript" nonce="my-nonce" data-key="value">/*<![CDATA[*/
|
32
32
|
if (typeof(console) !== 'undefined' && console.log) {
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'spec_helper'
|
4
4
|
|
5
|
-
class
|
5
|
+
class Sentry
|
6
6
|
# mock Sentry
|
7
7
|
end
|
8
8
|
|
@@ -12,14 +12,14 @@ RSpec.describe UniformNotifier::SentryNotifier do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'should notify sentry' do
|
15
|
-
expect(
|
15
|
+
expect(Sentry).to receive(:capture_exception).with(UniformNotifier::Exception.new('notify sentry'), {})
|
16
16
|
|
17
17
|
UniformNotifier.sentry = true
|
18
18
|
UniformNotifier::SentryNotifier.out_of_channel_notify(title: 'notify sentry')
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should notify sentry' do
|
22
|
-
expect(
|
22
|
+
expect(Sentry).to receive(:capture_exception).with(UniformNotifier::Exception.new('notify sentry'), foo: :bar)
|
23
23
|
|
24
24
|
UniformNotifier.sentry = { foo: :bar }
|
25
25
|
UniformNotifier::SentryNotifier.out_of_channel_notify('notify sentry')
|
@@ -20,7 +20,6 @@ RSpec.describe UniformNotifier::Slack do
|
|
20
20
|
begin
|
21
21
|
UniformNotifier.slack = {}
|
22
22
|
rescue UniformNotifier::NotificationError
|
23
|
-
|
24
23
|
ensure
|
25
24
|
expect_any_instance_of(Slack::Notifier).to_not receive(:ping)
|
26
25
|
expect(UniformNotifier::Slack.out_of_channel_notify(title: 'notify slack')).to be_nil
|
@@ -35,7 +34,8 @@ RSpec.describe UniformNotifier::Slack do
|
|
35
34
|
end
|
36
35
|
|
37
36
|
it 'should allow username and channel config options' do
|
38
|
-
expect(Slack::Notifier).to receive(:new)
|
37
|
+
expect(Slack::Notifier).to receive(:new)
|
38
|
+
.with('http://some.slack.url', username: 'The Dude', channel: '#carpets')
|
39
39
|
.and_return(true)
|
40
40
|
UniformNotifier.slack = { webhook_url: 'http://some.slack.url', username: 'The Dude', channel: '#carpets' }
|
41
41
|
expect(UniformNotifier::Slack.active?).to eq true
|
@@ -22,7 +22,10 @@ RSpec.describe UniformNotifier::Xmpp do
|
|
22
22
|
expect(xmpp).to receive(:send).with(message)
|
23
23
|
|
24
24
|
UniformNotifier.xmpp = {
|
25
|
-
account: 'from@gmail.com',
|
25
|
+
account: 'from@gmail.com',
|
26
|
+
password: '123456',
|
27
|
+
receiver: 'to@gmail.com',
|
28
|
+
show_online_status: false
|
26
29
|
}
|
27
30
|
UniformNotifier::Xmpp.out_of_channel_notify(title: 'notify xmpp')
|
28
31
|
end
|
@@ -49,7 +52,10 @@ RSpec.describe UniformNotifier::Xmpp do
|
|
49
52
|
expect(xmpp).to receive(:send).with(message)
|
50
53
|
|
51
54
|
UniformNotifier.xmpp = {
|
52
|
-
account: 'from@gmail.com',
|
55
|
+
account: 'from@gmail.com',
|
56
|
+
password: '123456',
|
57
|
+
receiver: 'to@gmail.com',
|
58
|
+
show_online_status: true
|
53
59
|
}
|
54
60
|
UniformNotifier::Xmpp.out_of_channel_notify(title: 'notify xmpp')
|
55
61
|
end
|
data/uniform_notifier.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.required_ruby_version = '>= 2.3'
|
18
18
|
|
19
19
|
s.add_development_dependency 'rspec', ['> 0']
|
20
|
-
s.add_development_dependency 'ruby-growl', ['= 4.0']
|
21
20
|
s.add_development_dependency 'ruby_gntp', ['= 0.3.4']
|
21
|
+
s.add_development_dependency 'ruby-growl', ['= 4.0']
|
22
22
|
s.add_development_dependency 'slack-notifier', ['>= 1.0']
|
23
23
|
s.add_development_dependency 'xmpp4r', ['= 0.5']
|
24
24
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: uniform_notifier
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -25,33 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: ruby_gntp
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.3.4
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.3.4
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: ruby-growl
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0
|
47
|
+
version: '4.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0
|
54
|
+
version: '4.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: slack-notifier
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- Rakefile
|
98
98
|
- lib/uniform_notifier.rb
|
99
99
|
- lib/uniform_notifier/airbrake.rb
|
100
|
+
- lib/uniform_notifier/appsignal.rb
|
100
101
|
- lib/uniform_notifier/base.rb
|
101
102
|
- lib/uniform_notifier/bugsnag.rb
|
102
103
|
- lib/uniform_notifier/customized_logger.rb
|
@@ -115,6 +116,7 @@ files:
|
|
115
116
|
- lib/uniform_notifier/xmpp.rb
|
116
117
|
- spec/spec_helper.rb
|
117
118
|
- spec/uniform_notifier/airbrake_spec.rb
|
119
|
+
- spec/uniform_notifier/appsignal_spec.rb
|
118
120
|
- spec/uniform_notifier/base_spec.rb
|
119
121
|
- spec/uniform_notifier/bugsnag_spec.rb
|
120
122
|
- spec/uniform_notifier/customized_logger_spec.rb
|
@@ -160,6 +162,7 @@ summary: uniform notifier for rails logger, customized logger, javascript alert,
|
|
160
162
|
test_files:
|
161
163
|
- spec/spec_helper.rb
|
162
164
|
- spec/uniform_notifier/airbrake_spec.rb
|
165
|
+
- spec/uniform_notifier/appsignal_spec.rb
|
163
166
|
- spec/uniform_notifier/base_spec.rb
|
164
167
|
- spec/uniform_notifier/bugsnag_spec.rb
|
165
168
|
- spec/uniform_notifier/customized_logger_spec.rb
|