guard 0.8.8 → 0.9.0
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.
- data/CHANGELOG.md +16 -1
- data/README.md +665 -293
- data/bin/fsevent_watch_guard +0 -0
- data/lib/guard.rb +66 -31
- data/lib/guard/cli.rb +9 -3
- data/lib/guard/dsl.rb +32 -5
- data/lib/guard/dsl_describer.rb +3 -2
- data/lib/guard/guard.rb +2 -2
- data/lib/guard/interactor.rb +179 -48
- data/lib/guard/listener.rb +32 -17
- data/lib/guard/listeners/darwin.rb +5 -9
- data/lib/guard/listeners/linux.rb +6 -10
- data/lib/guard/listeners/windows.rb +4 -2
- data/lib/guard/notifier.rb +171 -258
- data/lib/guard/notifiers/gntp.rb +114 -0
- data/lib/guard/notifiers/growl.rb +98 -0
- data/lib/guard/notifiers/growl_notify.rb +91 -0
- data/lib/guard/notifiers/libnotify.rb +96 -0
- data/lib/guard/notifiers/rb_notifu.rb +101 -0
- data/lib/guard/ui.rb +2 -2
- data/lib/guard/version.rb +1 -1
- data/lib/guard/watcher.rb +1 -1
- data/lib/vendor/darwin/Gemfile +6 -0
- data/lib/vendor/darwin/Guardfile +8 -0
- data/lib/vendor/darwin/LICENSE +20 -0
- data/lib/vendor/darwin/README.rdoc +254 -0
- data/lib/vendor/darwin/Rakefile +21 -0
- data/lib/vendor/darwin/ext/extconf.rb +61 -0
- data/lib/vendor/darwin/ext/fsevent/fsevent_watch.c +226 -0
- data/lib/vendor/darwin/lib/rb-fsevent.rb +2 -0
- data/lib/vendor/darwin/lib/rb-fsevent/fsevent.rb +105 -0
- data/lib/vendor/darwin/lib/rb-fsevent/version.rb +3 -0
- data/lib/vendor/darwin/rb-fsevent.gemspec +24 -0
- data/lib/vendor/darwin/spec/fixtures/folder1/file1.txt +0 -0
- data/lib/vendor/darwin/spec/fixtures/folder1/folder2/file2.txt +0 -0
- data/lib/vendor/darwin/spec/rb-fsevent/fsevent_spec.rb +75 -0
- data/lib/vendor/darwin/spec/spec_helper.rb +24 -0
- data/lib/vendor/linux/MIT-LICENSE +20 -0
- data/lib/vendor/linux/README.md +66 -0
- data/lib/vendor/linux/Rakefile +54 -0
- data/lib/vendor/linux/VERSION +1 -0
- data/lib/vendor/linux/lib/rb-inotify.rb +17 -0
- data/lib/vendor/linux/lib/rb-inotify/event.rb +139 -0
- data/lib/vendor/linux/lib/rb-inotify/native.rb +31 -0
- data/lib/vendor/linux/lib/rb-inotify/native/flags.rb +89 -0
- data/lib/vendor/linux/lib/rb-inotify/notifier.rb +308 -0
- data/lib/vendor/linux/lib/rb-inotify/watcher.rb +83 -0
- data/lib/vendor/linux/rb-inotify.gemspec +53 -0
- data/lib/vendor/windows/Gemfile +4 -0
- data/lib/vendor/windows/README.md +34 -0
- data/lib/vendor/windows/Rakefile +18 -0
- data/lib/vendor/windows/lib/rb-fchange.rb +14 -0
- data/lib/vendor/windows/lib/rb-fchange/event.rb +29 -0
- data/lib/vendor/windows/lib/rb-fchange/native.rb +45 -0
- data/lib/vendor/windows/lib/rb-fchange/native/flags.rb +78 -0
- data/lib/vendor/windows/lib/rb-fchange/notifier.rb +149 -0
- data/lib/vendor/windows/lib/rb-fchange/version.rb +3 -0
- data/lib/vendor/windows/lib/rb-fchange/watcher.rb +99 -0
- data/lib/vendor/windows/rb-fchange.gemspec +34 -0
- data/lib/vendor/windows/spec/fixtures/folder1/file1.txt +0 -0
- data/lib/vendor/windows/spec/fixtures/folder1/folder2/file2.txt +0 -0
- data/lib/vendor/windows/spec/rb-fchange/fchange_spec.rb +119 -0
- data/lib/vendor/windows/spec/spec_helper.rb +21 -0
- metadata +87 -22
- data/lib/guard/version.rbc +0 -180
@@ -0,0 +1,114 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Notifier
|
5
|
+
|
6
|
+
# System notifications using the [ruby_gntp](https://github.com/snaka/ruby_gntp) gem.
|
7
|
+
#
|
8
|
+
# This gem is available for OS X, Linux and Windows and sends system notifications to
|
9
|
+
# the following system notification frameworks through the
|
10
|
+
# [Growl Network Transport Protocol](http://www.growlforwindows.com/gfw/help/gntp.aspx):
|
11
|
+
#
|
12
|
+
# * [Growl](http://growl.info)
|
13
|
+
# * [Growl for Windows](http://www.growlforwindows.com)
|
14
|
+
# * [Growl for Linux](http://mattn.github.com/growl-for-linux)
|
15
|
+
# * [Snarl](https://sites.google.com/site/snarlapp/)
|
16
|
+
#
|
17
|
+
# @example Add the `ruby_gntp` gem to your `Gemfile`
|
18
|
+
# group :development
|
19
|
+
# gem 'ruby_gntp'
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# @example Add the `:gntp` notifier to your `Guardfile`
|
23
|
+
# notification :gntp
|
24
|
+
#
|
25
|
+
# @example Add the `:gntp` notifier with configuration options to your `Guardfile`
|
26
|
+
# notification :gntp, :sticky => true, :host => '192.168.1.5', :password => 'secret'
|
27
|
+
#
|
28
|
+
module GNTP
|
29
|
+
extend self
|
30
|
+
|
31
|
+
# Default options for the ruby gtnp gem
|
32
|
+
DEFAULTS = {
|
33
|
+
:sticky => false,
|
34
|
+
:host => 'localhost',
|
35
|
+
:password => '',
|
36
|
+
:port => 23053
|
37
|
+
}
|
38
|
+
|
39
|
+
# Is this notifier already registered
|
40
|
+
#
|
41
|
+
# @return [Boolean] registration status
|
42
|
+
#
|
43
|
+
def registered?
|
44
|
+
@registered ||= false
|
45
|
+
end
|
46
|
+
|
47
|
+
# Mark the notifier as registered.
|
48
|
+
#
|
49
|
+
def registered!
|
50
|
+
@registered = true
|
51
|
+
end
|
52
|
+
|
53
|
+
# Test if the notification library is available.
|
54
|
+
#
|
55
|
+
# @param [Boolean] silent true if no error messages should be shown
|
56
|
+
# @return [Boolean] the availability status
|
57
|
+
#
|
58
|
+
def available?(silent = false)
|
59
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin|linux|freebsd|openbsd|sunos|solaris|mswin|mingw/
|
60
|
+
require 'ruby_gntp'
|
61
|
+
true
|
62
|
+
|
63
|
+
else
|
64
|
+
::Guard::UI.error 'The :gntp notifier runs only on Mac OS X, Linux, FreeBSD, OpenBSD, Solaris and Windows.' unless silent
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
rescue LoadError
|
69
|
+
::Guard::UI.error "Please add \"gem 'ruby_gntp'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
|
70
|
+
false
|
71
|
+
end
|
72
|
+
|
73
|
+
# Show a system notification.
|
74
|
+
#
|
75
|
+
# @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
|
76
|
+
# @param [String] title the notification title
|
77
|
+
# @param [String] message the notification message body
|
78
|
+
# @param [String] image the path to the notification image
|
79
|
+
# @param [Hash] options additional notification library options
|
80
|
+
# @option options [String] host the hostname or IP address to which to send a remote notification
|
81
|
+
# @option options [String] password the password used for remote notifications
|
82
|
+
# @option options [Integer] port the port to send a remote notification
|
83
|
+
# @option options [Boolean] sticky make the notification sticky
|
84
|
+
#
|
85
|
+
def notify(type, title, message, image, options = { })
|
86
|
+
require 'ruby_gntp'
|
87
|
+
|
88
|
+
options = DEFAULTS.merge(options)
|
89
|
+
|
90
|
+
gntp = ::GNTP.new('Guard', options.delete(:host), options.delete(:password), options.delete(:port))
|
91
|
+
|
92
|
+
unless registered?
|
93
|
+
gntp.register(:notifications => [
|
94
|
+
{ :name => 'notify', :enabled => true },
|
95
|
+
{ :name => 'failed', :enabled => true },
|
96
|
+
{ :name => 'pending', :enabled => true },
|
97
|
+
{ :name => 'success', :enabled => true }
|
98
|
+
])
|
99
|
+
|
100
|
+
registered!
|
101
|
+
end
|
102
|
+
|
103
|
+
gntp.notify(options.merge({
|
104
|
+
:name => type,
|
105
|
+
:title => title,
|
106
|
+
:text => message,
|
107
|
+
:icon => "file://#{ image }"
|
108
|
+
}))
|
109
|
+
end
|
110
|
+
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Notifier
|
5
|
+
|
6
|
+
# System notifications using the [growl](https://github.com/visionmedia/growl) gem.
|
7
|
+
#
|
8
|
+
# This gem is available for OS X and sends system notifications to
|
9
|
+
# [Growl](http://growl.info) through the [GrowlNotify](http://growl.info/downloads)
|
10
|
+
# executable.
|
11
|
+
#
|
12
|
+
# The `growlnotify` executable must be installed manually or by using
|
13
|
+
# [Homebrew](http://mxcl.github.com/homebrew/).
|
14
|
+
#
|
15
|
+
# Sending notifications with this notifier will not show the different
|
16
|
+
# Guard notifications in the Growl preferences. Use the :gntp or :growl_notify
|
17
|
+
# notifiers if you want to customize each notification type in Growl.
|
18
|
+
#
|
19
|
+
# @example Install `growlnotify` with Homebrew
|
20
|
+
# brew install growlnotify
|
21
|
+
#
|
22
|
+
# @example Add the `growl` gem to your `Gemfile`
|
23
|
+
# group :development
|
24
|
+
# gem 'growl'
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# @example Add the `:growl` notifier to your `Guardfile`
|
28
|
+
# notification :growl
|
29
|
+
#
|
30
|
+
# @example Add the `:growl_notify` notifier with configuration options to your `Guardfile`
|
31
|
+
# notification :growl, :sticky => true, :host => '192.168.1.5', :password => 'secret'
|
32
|
+
#
|
33
|
+
module Growl
|
34
|
+
extend self
|
35
|
+
|
36
|
+
# Default options for growl gem
|
37
|
+
DEFAULTS = {
|
38
|
+
:sticky => false,
|
39
|
+
:priority => 0
|
40
|
+
}
|
41
|
+
|
42
|
+
# Test if the notification library is available.
|
43
|
+
#
|
44
|
+
# @param [Boolean] silent true if no error messages should be shown
|
45
|
+
# @return [Boolean] the availability status
|
46
|
+
#
|
47
|
+
def available?(silent = false)
|
48
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
49
|
+
require 'growl'
|
50
|
+
|
51
|
+
if ::Growl.installed?
|
52
|
+
true
|
53
|
+
else
|
54
|
+
::Guard::UI.error "Please install the 'growlnotify' executable." unless silent
|
55
|
+
false
|
56
|
+
end
|
57
|
+
|
58
|
+
else
|
59
|
+
::Guard::UI.error 'The :growl notifier runs only on Mac OS X.' unless silent
|
60
|
+
false
|
61
|
+
end
|
62
|
+
|
63
|
+
rescue LoadError, NameError
|
64
|
+
::Guard::UI.error "Please add \"gem 'growl'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
# Show a system notification.
|
69
|
+
#
|
70
|
+
# The documented options are for GrowlNotify 1.3, but the older options are
|
71
|
+
# also supported. Please see `growlnotify --help`.
|
72
|
+
#
|
73
|
+
# Priority can be one of the following named keys: `Very Low`, `Moderate`, `Normal`,
|
74
|
+
# `High`, `Emergency`. It can also be an int between -2 and 2.
|
75
|
+
#
|
76
|
+
# @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
|
77
|
+
# @param [String] title the notification title
|
78
|
+
# @param [String] message the notification message body
|
79
|
+
# @param [String] image the path to the notification image
|
80
|
+
# @param [Hash] options additional notification library options
|
81
|
+
# @option options [Boolean] sticky make the notification sticky
|
82
|
+
# @option options [String, Integer] priority specify an int or named key (default is 0)
|
83
|
+
# @option options [String] host the hostname or IP address to which to send a remote notification
|
84
|
+
# @option options [String] password the password used for remote notifications
|
85
|
+
#
|
86
|
+
def notify(type, title, message, image, options = { })
|
87
|
+
require 'growl'
|
88
|
+
|
89
|
+
::Growl.notify(message, DEFAULTS.merge(options).merge({
|
90
|
+
:name => 'Guard',
|
91
|
+
:title => title,
|
92
|
+
:image => image
|
93
|
+
}))
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Notifier
|
5
|
+
|
6
|
+
# System notifications using the [GrowlNotify](https://github.com/scottdavis/growl_notify) gem.
|
7
|
+
#
|
8
|
+
# This gem is available for OS X and sends system notifications to
|
9
|
+
# [Growl](http://growl.info) through AppleScript.
|
10
|
+
#
|
11
|
+
# @example Add the `growl_notify` gem to your `Gemfile`
|
12
|
+
# group :development
|
13
|
+
# gem 'growl_notify'
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# @example Add the `:growl_notify` notifier to your `Guardfile`
|
17
|
+
# notification :growl_notify
|
18
|
+
#
|
19
|
+
# @example Add the `:growl_notify` notifier with configuration options to your `Guardfile`
|
20
|
+
# notification :growl_notify, :sticky => true
|
21
|
+
#
|
22
|
+
module GrowlNotify
|
23
|
+
extend self
|
24
|
+
|
25
|
+
# Default options for growl_notify gem
|
26
|
+
DEFAULTS = {
|
27
|
+
:sticky => false,
|
28
|
+
:priority => 0
|
29
|
+
}
|
30
|
+
|
31
|
+
# Test if the notification library is available.
|
32
|
+
#
|
33
|
+
# @param [Boolean] silent true if no error messages should be shown
|
34
|
+
# @return [Boolean] the availability status
|
35
|
+
#
|
36
|
+
def available?(silent = false)
|
37
|
+
if RbConfig::CONFIG['host_os'] =~ /darwin/
|
38
|
+
require 'growl_notify'
|
39
|
+
|
40
|
+
begin
|
41
|
+
if ::GrowlNotify.application_name != 'Guard'
|
42
|
+
::GrowlNotify.config do |c|
|
43
|
+
c.notifications = ['success', 'pending', 'failed', 'notify']
|
44
|
+
c.default_notifications = 'notify'
|
45
|
+
c.application_name = 'Guard'
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
true
|
50
|
+
|
51
|
+
rescue ::GrowlNotify::GrowlNotFound
|
52
|
+
::Guard::UI.error 'Please install Growl from http://growl.info' unless silent
|
53
|
+
false
|
54
|
+
end
|
55
|
+
|
56
|
+
else
|
57
|
+
::Guard::UI.error 'The :growl_notify notifier runs only on Mac OS X.' unless silent
|
58
|
+
false
|
59
|
+
end
|
60
|
+
|
61
|
+
rescue LoadError
|
62
|
+
::Guard::UI.error "Please add \"gem 'growl_notify'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
|
63
|
+
false
|
64
|
+
end
|
65
|
+
|
66
|
+
# Show a system notification.
|
67
|
+
#
|
68
|
+
# @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
|
69
|
+
# @param [String] title the notification title
|
70
|
+
# @param [String] message the notification message body
|
71
|
+
# @param [String] image the path to the notification image
|
72
|
+
# @param [Hash] options additional notification library options
|
73
|
+
# @option options [Boolean] sticky if the message should stick to the screen
|
74
|
+
# @option options [Integer] priority the importance of message from -2 (very low) to 2 (emergency)
|
75
|
+
#
|
76
|
+
def notify(type, title, message, image, options = { })
|
77
|
+
require 'growl_notify'
|
78
|
+
|
79
|
+
::GrowlNotify.send_notification(DEFAULTS.merge(options).merge({
|
80
|
+
:application_name => 'Guard',
|
81
|
+
:with_name => type,
|
82
|
+
:title => title,
|
83
|
+
:description => message,
|
84
|
+
:icon => image
|
85
|
+
}))
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
@@ -0,0 +1,96 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Notifier
|
5
|
+
|
6
|
+
# System notifications using the [libnotify](https://github.com/splattael/libnotify) gem.
|
7
|
+
#
|
8
|
+
# This gem is available for Linux, FreeBSD, OpenBSD and Solaris and sends system notifications to
|
9
|
+
# Gnome [libnotify](http://developer.gnome.org/libnotify):
|
10
|
+
#
|
11
|
+
# @example Add the `libnotify` gem to your `Gemfile`
|
12
|
+
# group :development
|
13
|
+
# gem 'libnotify'
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# @example Add the `:libnotify` notifier to your `Guardfile`
|
17
|
+
# notification :libnotify
|
18
|
+
#
|
19
|
+
# @example Add the `:libnotify` notifier with configuration options to your `Guardfile`
|
20
|
+
# notification :libnotify, :timeout => 5, :transient => true, :append => false
|
21
|
+
#
|
22
|
+
module Libnotify
|
23
|
+
extend self
|
24
|
+
|
25
|
+
# Default options for libnotify gem
|
26
|
+
DEFAULTS = {
|
27
|
+
:transient => false,
|
28
|
+
:append => true,
|
29
|
+
:timeout => 3
|
30
|
+
}
|
31
|
+
|
32
|
+
# Test if the notification library is available.
|
33
|
+
#
|
34
|
+
# @param [Boolean] silent true if no error messages should be shown
|
35
|
+
# @return [Boolean] the availability status
|
36
|
+
#
|
37
|
+
def available?(silent = false)
|
38
|
+
if RbConfig::CONFIG['host_os'] =~ /linux|freebsd|openbsd|sunos|solaris/
|
39
|
+
require 'libnotify'
|
40
|
+
|
41
|
+
true
|
42
|
+
|
43
|
+
else
|
44
|
+
::Guard::UI.error 'The :libnotify notifier runs only on Linux, FreeBSD, OpenBSD and Solaris.' unless silent
|
45
|
+
false
|
46
|
+
end
|
47
|
+
|
48
|
+
rescue LoadError
|
49
|
+
::Guard::UI.error "Please add \"gem 'libnotify'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
|
50
|
+
false
|
51
|
+
end
|
52
|
+
|
53
|
+
# Show a system notification.
|
54
|
+
#
|
55
|
+
# @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
|
56
|
+
# @param [String] title the notification title
|
57
|
+
# @param [String] message the notification message body
|
58
|
+
# @param [String] image the path to the notification image
|
59
|
+
# @param [Hash] options additional notification library options
|
60
|
+
# @option options [Boolean] transient keep the notifications around after display
|
61
|
+
# @option options [Boolean] append append onto existing notification
|
62
|
+
# @option options [Number, Boolean] timeout the number of seconds to display (1.5 (s), 1000 (ms), false)
|
63
|
+
#
|
64
|
+
def notify(type, title, message, image, options = { })
|
65
|
+
require 'libnotify'
|
66
|
+
|
67
|
+
::Libnotify.show(DEFAULTS.merge(options).merge({
|
68
|
+
:urgency => libnotify_urgency(type),
|
69
|
+
:summary => title,
|
70
|
+
:body => message,
|
71
|
+
:icon_path => image
|
72
|
+
}))
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
# Convert Guards notification type to the best matching
|
78
|
+
# libnotify urgency.
|
79
|
+
#
|
80
|
+
# @param [String] type the Guard notification type
|
81
|
+
# @return [Symbol] the libnotify urgency
|
82
|
+
#
|
83
|
+
def libnotify_urgency(type)
|
84
|
+
case type
|
85
|
+
when 'failed'
|
86
|
+
:critical
|
87
|
+
when 'pending'
|
88
|
+
:normal
|
89
|
+
else
|
90
|
+
:low
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'rbconfig'
|
2
|
+
|
3
|
+
module Guard
|
4
|
+
module Notifier
|
5
|
+
|
6
|
+
# System notifications using the [rb-notifu](https://github.com/stereobooster/rb-notifu) gem.
|
7
|
+
#
|
8
|
+
# This gem is available for Windows and sends system notifications to
|
9
|
+
# [Notifu](http://www.paralint.com/projects/notifu/index.html):
|
10
|
+
#
|
11
|
+
# @example Add the `rb-notifu` gem to your `Gemfile`
|
12
|
+
# group :development
|
13
|
+
# gem 'rb-notifu'
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# @example Add the `:notifu` notifier to your `Guardfile`
|
17
|
+
# notification :notifu
|
18
|
+
#
|
19
|
+
# @example Add the `:notifu` notifier with configuration options to your `Guardfile`
|
20
|
+
# notification :notifu, :time => 5, :nosound => true, :xp => true
|
21
|
+
#
|
22
|
+
module Notifu
|
23
|
+
extend self
|
24
|
+
|
25
|
+
# Default options for rb-notifu gem
|
26
|
+
DEFAULTS = {
|
27
|
+
:time => 3,
|
28
|
+
:icon => false,
|
29
|
+
:baloon => false,
|
30
|
+
:nosound => false,
|
31
|
+
:noquiet => false,
|
32
|
+
:xp => false
|
33
|
+
}
|
34
|
+
|
35
|
+
# Test if the notification library is available.
|
36
|
+
#
|
37
|
+
# @param [Boolean] silent true if no error messages should be shown
|
38
|
+
# @return [Boolean] the availability status
|
39
|
+
#
|
40
|
+
def available?(silent = false)
|
41
|
+
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
42
|
+
require 'rb-notifu'
|
43
|
+
|
44
|
+
true
|
45
|
+
|
46
|
+
else
|
47
|
+
::Guard::UI.error 'The :notifu notifier runs only on Windows.' unless silent
|
48
|
+
false
|
49
|
+
end
|
50
|
+
|
51
|
+
rescue LoadError
|
52
|
+
::Guard::UI.error "Please add \"gem 'rb-notifu'\" to your Gemfile and run Guard with \"bundle exec\"." unless silent
|
53
|
+
false
|
54
|
+
end
|
55
|
+
|
56
|
+
# Show a system notification.
|
57
|
+
#
|
58
|
+
# @param [String] type the notification type. Either 'success', 'pending', 'failed' or 'notify'
|
59
|
+
# @param [String] title the notification title
|
60
|
+
# @param [String] message the notification message body
|
61
|
+
# @param [String] image the path to the notification image
|
62
|
+
# @param [Hash] options additional notification library options
|
63
|
+
# @option options [Number] time the number of seconds to display (0 for infinit)
|
64
|
+
# @option options [Boolean] icon specify an icon to use ("parent" uses the icon of the parent process)
|
65
|
+
# @option options [Boolean] baloon enable ballon tips in the registry (for this user only)
|
66
|
+
# @option options [Boolean] nosound do not play a sound when the tooltip is displayed
|
67
|
+
# @option options [Boolean] noquiet show the tooltip even if the user is in the quiet period that follows his very first login (Windows 7 and up)
|
68
|
+
# @option options [Boolean] xp use IUserNotification interface event when IUserNotification2 is available
|
69
|
+
#
|
70
|
+
def notify(type, title, message, image, options = { })
|
71
|
+
require 'rb-notifu'
|
72
|
+
|
73
|
+
::Notifu.show(DEFAULTS.merge(options).merge({
|
74
|
+
:type => notifu_type(type),
|
75
|
+
:title => title,
|
76
|
+
:message => message
|
77
|
+
}))
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
# Convert Guards notification type to the best matching
|
83
|
+
# Notifu type.
|
84
|
+
#
|
85
|
+
# @param [String] type the Guard notification type
|
86
|
+
# @return [Symbol] the Notify notification type
|
87
|
+
#
|
88
|
+
def notifu_type(type)
|
89
|
+
case type
|
90
|
+
when 'failed'
|
91
|
+
:error
|
92
|
+
when 'pending'
|
93
|
+
:warn
|
94
|
+
else
|
95
|
+
:info
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|