/
notifier.rb
71 lines (60 loc) · 1.7 KB
/
notifier.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
require "notiffany/notifier"
require "guard/ui"
module Guard
class Notifier
def self.connect(options = {})
@notifier ||= nil
fail "Already connected!" if @notifier
begin
opts = options.merge(namespace: "guard", logger: UI)
@notifier = Notiffany.connect(opts)
rescue Notiffany::Notifier::Detected::UnknownNotifier => e
UI.error "Failed to setup notification: #{e.message}"
fail
end
end
def self.disconnect
@notifier.disconnect
@notifier = nil
end
DEPRECATED_IMPLICIT_CONNECT = "Calling Notiffany::Notifier.notify()"\
" without a prior Notifier.connect() is"\
" deprecated"
def self.notify(message, options = {})
unless @notifier
# TODO: reenable again?
# UI.deprecation(DEPRECTED_IMPLICIT_CONNECT)
connect(notify: true)
end
@notifier.notify(message, options)
rescue RuntimeError => e
UI.error "Notification failed for #{@notifier.class.name}: #{e.message}"
UI.debug e.backtrace.join("\n")
end
def self.turn_on
@notifier.turn_on
end
def self.toggle
unless @notifier.enabled?
UI.error NOTIFICATIONS_DISABLED
return
end
if @notifier.active?
UI.info "Turn off notifications"
@notifier.turn_off
return
end
@notifier.turn_on
end
# Used by dsl describer
def self.supported
Notiffany::Notifier::SUPPORTED.inject(:merge)
end
# Used by dsl describer
def self.detected
@notifier.available.map do |mod|
{ name: mod.name.to_sym, options: mod.options }
end
end
end
end