guard 2.10.5 → 2.11.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.
- checksums.yaml +4 -4
- data/lib/guard.rb +0 -3
- data/lib/guard/aruba_adapter.rb +6 -6
- data/lib/guard/cli.rb +5 -0
- data/lib/guard/commander.rb +1 -1
- data/lib/guard/commands/all.rb +2 -2
- data/lib/guard/commands/notification.rb +1 -1
- data/lib/guard/commands/reload.rb +2 -2
- data/lib/guard/commands/show.rb +1 -1
- data/lib/guard/deprecated/evaluator.rb +3 -1
- data/lib/guard/deprecated/guard.rb +57 -2
- data/lib/guard/dsl.rb +2 -3
- data/lib/guard/dsl_describer.rb +8 -20
- data/lib/guard/guardfile/evaluator.rb +5 -5
- data/lib/guard/guardfile/generator.rb +3 -3
- data/lib/guard/internals/debugging.rb +5 -5
- data/lib/guard/internals/session.rb +19 -8
- data/lib/guard/internals/state.rb +0 -13
- data/lib/guard/jobs/pry_wrapper.rb +5 -5
- data/lib/guard/notifier.rb +43 -219
- data/lib/guard/plugin_util.rb +1 -1
- data/lib/guard/terminal.rb +3 -2
- data/lib/guard/ui.rb +7 -2
- data/lib/guard/version.rb +1 -1
- data/lib/guard/watcher.rb +3 -3
- metadata +30 -15
- data/lib/guard/notifier/detected.rb +0 -87
- data/lib/guard/notifiers/base.rb +0 -221
- data/lib/guard/notifiers/emacs.rb +0 -99
- data/lib/guard/notifiers/file_notifier.rb +0 -54
- data/lib/guard/notifiers/gntp.rb +0 -111
- data/lib/guard/notifiers/growl.rb +0 -104
- data/lib/guard/notifiers/libnotify.rb +0 -86
- data/lib/guard/notifiers/notifysend.rb +0 -110
- data/lib/guard/notifiers/rb_notifu.rb +0 -100
- data/lib/guard/notifiers/terminal_notifier.rb +0 -90
- data/lib/guard/notifiers/terminal_title.rb +0 -31
- data/lib/guard/notifiers/tmux.rb +0 -335
- data/lib/guard/sheller.rb +0 -143
@@ -5,7 +5,7 @@ require "guard/commands/pause"
|
|
5
5
|
require "guard/commands/reload"
|
6
6
|
require "guard/commands/scope"
|
7
7
|
require "guard/commands/show"
|
8
|
-
require "
|
8
|
+
require "shellany/sheller"
|
9
9
|
|
10
10
|
require "guard/jobs/base"
|
11
11
|
|
@@ -14,22 +14,22 @@ module Guard
|
|
14
14
|
class TerminalSettings
|
15
15
|
def initialize
|
16
16
|
@settings = nil
|
17
|
-
@works = Sheller.run("hash", "stty") || false
|
17
|
+
@works = Shellany::Sheller.run("hash", "stty") || false
|
18
18
|
end
|
19
19
|
|
20
20
|
def restore
|
21
21
|
return unless configurable? && @settings
|
22
|
-
Sheller.run("stty #{ @setting } 2>#{IO::NULL}")
|
22
|
+
Shellany::Sheller.run("stty #{ @setting } 2>#{IO::NULL}")
|
23
23
|
end
|
24
24
|
|
25
25
|
def save
|
26
26
|
return unless configurable?
|
27
|
-
@settings = Sheller.stdout("stty -g 2>#{IO::NULL}").chomp
|
27
|
+
@settings = Shellany::Sheller.stdout("stty -g 2>#{IO::NULL}").chomp
|
28
28
|
end
|
29
29
|
|
30
30
|
def echo
|
31
31
|
return unless configurable?
|
32
|
-
Sheller.run("stty echo 2>#{IO::NULL}")
|
32
|
+
Shellany::Sheller.run("stty echo 2>#{IO::NULL}")
|
33
33
|
end
|
34
34
|
|
35
35
|
def configurable?
|
data/lib/guard/notifier.rb
CHANGED
@@ -1,246 +1,70 @@
|
|
1
|
-
require "
|
2
|
-
require "
|
3
|
-
require "pathname"
|
4
|
-
require "nenv"
|
5
|
-
|
6
|
-
require_relative "notifier/detected"
|
7
|
-
|
8
|
-
require_relative "ui"
|
1
|
+
require "notiffany/notifier"
|
2
|
+
require "guard/ui"
|
9
3
|
|
10
4
|
module Guard
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
# * Tmux
|
22
|
-
#
|
23
|
-
# Please see the documentation of each notifier for more information about
|
24
|
-
# the requirements
|
25
|
-
# and configuration possibilities.
|
26
|
-
#
|
27
|
-
# Guard knows four different notification types:
|
28
|
-
#
|
29
|
-
# * success
|
30
|
-
# * pending
|
31
|
-
# * failed
|
32
|
-
# * notify
|
33
|
-
#
|
34
|
-
# The notification type selection is based on the image option that is
|
35
|
-
# sent to {#notify}. Each image type has its own notification type, and
|
36
|
-
# notifications with custom images goes all sent as type `notify`. The
|
37
|
-
# `gntp` notifier is able to register these types
|
38
|
-
# at Growl and allows customization of each notification type.
|
39
|
-
#
|
40
|
-
# Guard can be configured to make use of more than one notifier at once.
|
41
|
-
#
|
42
|
-
# @see Guard::Dsl
|
43
|
-
#
|
44
|
-
# TODO: rename to plural
|
45
|
-
module Notifier
|
46
|
-
extend self
|
47
|
-
|
48
|
-
NOTIFICATIONS_DISABLED = "Notifications disabled by GUARD_NOTIFY" +
|
49
|
-
" environment variable"
|
50
|
-
|
51
|
-
USING_NOTIFIER = "Guard is using %s to send notifications."
|
52
|
-
|
53
|
-
ONLY_NOTIFY = "Only notify() is available from a child process"
|
54
|
-
|
55
|
-
DEPRECTED_IMPLICIT_CONNECT = "Calling Guard::Notifier.notify()" +
|
56
|
-
" without a prior Notifier.connect() is deprecated"
|
57
|
-
|
58
|
-
# List of available notifiers, grouped by functionality
|
59
|
-
SUPPORTED = [
|
60
|
-
{
|
61
|
-
gntp: GNTP,
|
62
|
-
growl: Growl,
|
63
|
-
terminal_notifier: TerminalNotifier,
|
64
|
-
libnotify: Libnotify,
|
65
|
-
notifysend: NotifySend,
|
66
|
-
notifu: Notifu
|
67
|
-
},
|
68
|
-
{ emacs: Emacs },
|
69
|
-
{ tmux: Tmux },
|
70
|
-
{ terminal_title: TerminalTitle },
|
71
|
-
{ file: FileNotifier }
|
72
|
-
]
|
73
|
-
|
74
|
-
Env = Nenv::Builder.build do
|
75
|
-
create_method(:notify?) { |data| data != "false" }
|
76
|
-
create_method(:notify_pid) { |data| data && Integer(data) }
|
77
|
-
create_method(:notify_pid=)
|
78
|
-
create_method(:notify_active?)
|
79
|
-
create_method(:notify_active=)
|
80
|
-
end
|
81
|
-
|
82
|
-
class NotServer < RuntimeError
|
83
|
-
end
|
84
|
-
|
85
|
-
def connect(options = {})
|
86
|
-
@detected = Detected.new(SUPPORTED)
|
87
|
-
return if _client?
|
88
|
-
|
89
|
-
_env.notify_pid = $$
|
90
|
-
|
91
|
-
fail "Already connected" if active?
|
92
|
-
|
93
|
-
return unless enabled? && options[:notify]
|
94
|
-
|
95
|
-
@detected.detect
|
96
|
-
|
97
|
-
turn_on
|
98
|
-
rescue Detected::NoneAvailableError => e
|
99
|
-
::Guard::UI.info e.to_s
|
100
|
-
end
|
101
|
-
|
102
|
-
def disconnect
|
103
|
-
if _client?
|
104
|
-
@detected = nil
|
105
|
-
return
|
5
|
+
class Notifier
|
6
|
+
def self.connect(options = {})
|
7
|
+
@notifier ||= nil
|
8
|
+
fail "Already connected!" if @notifier
|
9
|
+
begin
|
10
|
+
opts = options.merge(namespace: "guard", logger: UI)
|
11
|
+
@notifier = Notiffany.connect(opts)
|
12
|
+
rescue Notiffany::Notifier::Detected::UnknownNotifier => e
|
13
|
+
UI.error "Failed to setup notification: #{e.message}"
|
14
|
+
fail
|
106
15
|
end
|
107
|
-
|
108
|
-
turn_off if active?
|
109
|
-
@detected.reset unless @detected.nil?
|
110
|
-
_env.notify_pid = nil
|
111
|
-
@detected = nil
|
112
16
|
end
|
113
17
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
#
|
119
|
-
def turn_on(options = {})
|
120
|
-
_check_server!
|
121
|
-
return unless enabled?
|
122
|
-
|
123
|
-
fail "Already active!" if active?
|
18
|
+
def self.disconnect
|
19
|
+
@notifier.disconnect
|
20
|
+
@notifier = nil
|
21
|
+
end
|
124
22
|
|
125
|
-
|
23
|
+
DEPRECATED_IMPLICIT_CONNECT = "Calling Notiffany::Notifier.notify()" +
|
24
|
+
" without a prior Notifier.connect() is deprecated"
|
126
25
|
|
127
|
-
|
128
|
-
|
129
|
-
|
26
|
+
def self.notify(message, options)
|
27
|
+
unless @notifier
|
28
|
+
# TODO: reenable again?
|
29
|
+
# UI.deprecation(DEPRECTED_IMPLICIT_CONNECT)
|
30
|
+
connect(notify: true)
|
130
31
|
end
|
131
32
|
|
132
|
-
|
33
|
+
@notifier.notify(message, options)
|
34
|
+
rescue RuntimeError => e
|
35
|
+
UI.error "Notification failed for #{notifier.name}: #{e.message}"
|
36
|
+
UI.debug e.backtrace.join("\n")
|
133
37
|
end
|
134
38
|
|
135
|
-
|
136
|
-
|
137
|
-
_check_server!
|
138
|
-
|
139
|
-
fail "Not active!" unless active?
|
140
|
-
|
141
|
-
@detected.available.each do |klass, _|
|
142
|
-
klass.turn_off if klass.respond_to?(:turn_off)
|
143
|
-
end
|
144
|
-
|
145
|
-
_env.notify_active = false
|
39
|
+
def self.turn_on
|
40
|
+
@notifier.turn_on
|
146
41
|
end
|
147
42
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
::Guard::UI.error NOTIFICATIONS_DISABLED
|
43
|
+
def self.toggle
|
44
|
+
unless @notifier.enabled?
|
45
|
+
UI.error NOTIFICATIONS_DISABLED
|
152
46
|
return
|
153
47
|
end
|
154
48
|
|
155
|
-
if active?
|
156
|
-
|
157
|
-
turn_off
|
49
|
+
if @notifier.active?
|
50
|
+
UI.info "Turn off notifications"
|
51
|
+
@notifier.turn_off
|
158
52
|
return
|
159
53
|
end
|
160
54
|
|
161
|
-
turn_on
|
162
|
-
end
|
163
|
-
|
164
|
-
# Test if the notifications can be enabled based on ENV['GUARD_NOTIFY']
|
165
|
-
def enabled?
|
166
|
-
_env.notify?
|
167
|
-
end
|
168
|
-
|
169
|
-
# Test if notifiers are currently turned on
|
170
|
-
def active?
|
171
|
-
_env.notify_active?
|
172
|
-
end
|
173
|
-
|
174
|
-
# Add a notification library to be used.
|
175
|
-
#
|
176
|
-
# @param [Symbol] name the name of the notifier to use
|
177
|
-
# @param [Hash] options the notifier options
|
178
|
-
# @option options [String] silent disable any error message
|
179
|
-
# @return [Boolean] if the notification could be added
|
180
|
-
#
|
181
|
-
def add(name, options = {})
|
182
|
-
_check_server!
|
183
|
-
|
184
|
-
return false unless enabled?
|
185
|
-
|
186
|
-
if name == :off && active?
|
187
|
-
turn_off
|
188
|
-
return false
|
189
|
-
end
|
190
|
-
|
191
|
-
# ok to pass new instance when called without connect (e.g. evaluator)
|
192
|
-
(@detected || Detected.new(SUPPORTED)).add(name, options)
|
193
|
-
end
|
194
|
-
|
195
|
-
# TODO: deprecate/remove
|
196
|
-
alias :add_notifier :add
|
197
|
-
|
198
|
-
# Show a system notification with all configured notifiers.
|
199
|
-
#
|
200
|
-
# @param [String] message the message to show
|
201
|
-
# @option opts [Symbol, String] image the image symbol or path to an image
|
202
|
-
# @option opts [String] title the notification title
|
203
|
-
#
|
204
|
-
def notify(message, message_opts = {})
|
205
|
-
if _client?
|
206
|
-
# TODO: reenable again?
|
207
|
-
# UI.deprecation(DEPRECTED_IMPLICIT_CONNECT)
|
208
|
-
return unless enabled?
|
209
|
-
connect(notify: true)
|
210
|
-
else
|
211
|
-
return unless active?
|
212
|
-
end
|
213
|
-
|
214
|
-
@detected.available.each do |klass, options|
|
215
|
-
_notify(klass, options, message, message_opts)
|
216
|
-
end
|
55
|
+
@notifier.turn_on
|
217
56
|
end
|
218
57
|
|
219
58
|
# Used by dsl describer
|
220
|
-
def
|
221
|
-
|
222
|
-
end
|
223
|
-
|
224
|
-
private
|
225
|
-
|
226
|
-
def _env
|
227
|
-
@environment ||= Env.new("guard")
|
59
|
+
def self.supported
|
60
|
+
Notiffany::Notifier::SUPPORTED.inject(:merge)
|
228
61
|
end
|
229
62
|
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
(pid = _env.notify_pid) && (pid != $$)
|
236
|
-
end
|
237
|
-
|
238
|
-
def _notify(klass, options, message, message_options)
|
239
|
-
notifier = klass.new(options)
|
240
|
-
notifier.notify(message, message_options.dup)
|
241
|
-
rescue RuntimeError => e
|
242
|
-
::Guard::UI.error "Notification failed for #{notifier.name}: #{e.message}"
|
243
|
-
::Guard::UI.debug e.backtrace.join("\n")
|
63
|
+
# Used by dsl describer
|
64
|
+
def self.detected
|
65
|
+
@notifier.available.map do |mod|
|
66
|
+
{ name: mod.name.to_sym, options: mod.options }
|
67
|
+
end
|
244
68
|
end
|
245
69
|
end
|
246
70
|
end
|
data/lib/guard/plugin_util.rb
CHANGED
@@ -73,7 +73,7 @@ module Guard
|
|
73
73
|
def plugin_location
|
74
74
|
@plugin_location ||= _full_gem_path("guard-#{name}")
|
75
75
|
rescue Gem::LoadError
|
76
|
-
|
76
|
+
UI.error "Could not find 'guard-#{ name }' gem path."
|
77
77
|
end
|
78
78
|
|
79
79
|
# Tries to load the Guard plugin main class. This transforms the supplied
|
data/lib/guard/terminal.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
-
require "
|
1
|
+
require "shellany/sheller"
|
2
|
+
|
2
3
|
module Guard
|
3
4
|
class Terminal
|
4
5
|
class << self
|
5
6
|
def clear
|
6
7
|
cmd = Gem.win_platform? ? "cls" : "clear;"
|
7
|
-
exit_code, _, stderr = ::
|
8
|
+
exit_code, _, stderr = Shellany::Sheller.system(cmd)
|
8
9
|
fail Errno::ENOENT, stderr unless exit_code == 0
|
9
10
|
end
|
10
11
|
end
|
data/lib/guard/ui.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
require "guard/ui/colors"
|
2
2
|
|
3
3
|
require "guard/terminal"
|
4
|
+
require "guard/options"
|
5
|
+
|
6
|
+
# TODO: rework this class from the bottom-up
|
7
|
+
# - remove dependency on Session and Scope
|
8
|
+
# - extract into a separate gem
|
4
9
|
|
5
10
|
module Guard
|
6
11
|
# The UI class helps to format messages for the user. Everything that is
|
@@ -37,7 +42,7 @@ module Guard
|
|
37
42
|
# @return [Hash] the logger options
|
38
43
|
#
|
39
44
|
def options
|
40
|
-
@options ||=
|
45
|
+
@options ||= Options.new(
|
41
46
|
level: :info,
|
42
47
|
template: ":time - :severity - :message",
|
43
48
|
time_format: "%H:%M:%S")
|
@@ -52,7 +57,7 @@ module Guard
|
|
52
57
|
#
|
53
58
|
# TODO: deprecate?
|
54
59
|
def options=(options)
|
55
|
-
@options =
|
60
|
+
@options = Options.new(options)
|
56
61
|
end
|
57
62
|
|
58
63
|
# Assigns a log level
|
data/lib/guard/version.rb
CHANGED
data/lib/guard/watcher.rb
CHANGED
@@ -29,8 +29,8 @@ module Guard
|
|
29
29
|
return unless @pattern.is_a?(String) && @pattern =~ regexp
|
30
30
|
|
31
31
|
unless @@warning_printed
|
32
|
-
|
33
|
-
|
32
|
+
UI.info "*" * 20 + "\nDEPRECATION WARNING!\n" + "*" * 20
|
33
|
+
UI.info <<-MSG
|
34
34
|
You have a string in your Guardfile watch patterns that seem to
|
35
35
|
represent a Regexp.
|
36
36
|
|
@@ -43,7 +43,7 @@ module Guard
|
|
43
43
|
end
|
44
44
|
|
45
45
|
new_regexp = Regexp.new(@pattern).inspect
|
46
|
-
|
46
|
+
UI.info "\"#{@pattern}\" has been converted to #{ new_regexp }\n"
|
47
47
|
@pattern = Regexp.new(@pattern)
|
48
48
|
end
|
49
49
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thibaud Guillaume-Gentil
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -94,6 +94,34 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: shellany
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: notiffany
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.0'
|
97
125
|
description: Guard is a command line tool to easily handle events on file system modifications.
|
98
126
|
email:
|
99
127
|
- thibaud@thibaud.gg
|
@@ -151,24 +179,11 @@ files:
|
|
151
179
|
- lib/guard/jobs/pry_wrapper.rb
|
152
180
|
- lib/guard/jobs/sleep.rb
|
153
181
|
- lib/guard/notifier.rb
|
154
|
-
- lib/guard/notifier/detected.rb
|
155
|
-
- lib/guard/notifiers/base.rb
|
156
|
-
- lib/guard/notifiers/emacs.rb
|
157
|
-
- lib/guard/notifiers/file_notifier.rb
|
158
|
-
- lib/guard/notifiers/gntp.rb
|
159
|
-
- lib/guard/notifiers/growl.rb
|
160
|
-
- lib/guard/notifiers/libnotify.rb
|
161
|
-
- lib/guard/notifiers/notifysend.rb
|
162
|
-
- lib/guard/notifiers/rb_notifu.rb
|
163
|
-
- lib/guard/notifiers/terminal_notifier.rb
|
164
|
-
- lib/guard/notifiers/terminal_title.rb
|
165
|
-
- lib/guard/notifiers/tmux.rb
|
166
182
|
- lib/guard/options.rb
|
167
183
|
- lib/guard/plugin.rb
|
168
184
|
- lib/guard/plugin_util.rb
|
169
185
|
- lib/guard/rake_task.rb
|
170
186
|
- lib/guard/runner.rb
|
171
|
-
- lib/guard/sheller.rb
|
172
187
|
- lib/guard/templates/Guardfile
|
173
188
|
- lib/guard/terminal.rb
|
174
189
|
- lib/guard/ui.rb
|