/
gntp.rb
111 lines (100 loc) · 3.35 KB
/
gntp.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
require "guard/notifiers/base"
module Guard
module Notifier
# System notifications using the
# [ruby_gntp](https://github.com/snaka/ruby_gntp) gem.
#
# This gem is available for OS X, Linux and Windows and sends system
# notifications to the following system notification frameworks through the
#
# [Growl Network Transport
# Protocol](http://www.growlforwindows.com/gfw/help/gntp.aspx):
#
# * [Growl](http://growl.info)
# * [Growl for Windows](http://www.growlforwindows.com)
# * [Growl for Linux](http://mattn.github.com/growl-for-linux)
# * [Snarl](https://sites.google.com/site/snarlapp)
#
# @example Add the `ruby_gntp` gem to your `Gemfile`
# group :development
# gem 'ruby_gntp'
# end
#
# @example Add the `:gntp` notifier to your `Guardfile`
# notification :gntp
#
# @example Add the `:gntp` notifier with configuration options to your
# `Guardfile` notification :gntp, sticky: true, host: '192.168.1.5',
# password: 'secret'
#
class GNTP < Base
# Default options for the ruby gtnp notifications.
DEFAULTS = {
sticky: false
}
# Default options for the ruby gtnp client.
CLIENT_DEFAULTS = {
host: "127.0.0.1",
password: "",
port: 23053
}
def self.supported_hosts
%w(darwin linux freebsd openbsd sunos solaris mswin mingw cygwin)
end
def self.gem_name
"ruby_gntp"
end
def self.available?(opts = {})
super && require_gem_safely(opts)
end
# Shows a system notification.
#
# @param [String] message the notification message body
# @param [Hash] opts additional notification library options
# @option opts [String] type the notification type. Either 'success',
# 'pending', 'failed' or 'notify'
# @option opts [String] title the notification title
# @option opts [String] image the path to the notification image
# @option opts [String] host the hostname or IP address to which to send
# a remote notification
# @option opts [String] password the password used for remote
# notifications
# @option opts [Integer] port the port to send a remote notification
# @option opts [Boolean] sticky make the notification sticky
#
def notify(message, opts = {})
super
self.class.require_gem_safely
opts = DEFAULTS.merge(
name: opts.delete(:type).to_s,
text: message,
icon: opts.delete(:image)
).merge(opts)
_client(opts).notify(opts)
end
private
def _register!(gntp_client)
gntp_client.register(
app_icon: images_path.join("guard.png").to_s,
notifications: [
{ name: "notify", enabled: true },
{ name: "failed", enabled: true },
{ name: "pending", enabled: true },
{ name: "success", enabled: true }
]
)
end
def _client(opts = {})
@_client ||= begin
gntp = ::GNTP.new(
"Guard",
opts.delete(:host) { CLIENT_DEFAULTS[:host] },
opts.delete(:password) { CLIENT_DEFAULTS[:password] },
opts.delete(:port) { CLIENT_DEFAULTS[:port] })
_register!(gntp)
gntp
end
end
end
end
end