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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 209b3d3d20d2fda90cb9b5e5f75a2d529f48897f
|
4
|
+
data.tar.gz: 8df8704e331f6484c83e004a14c7e885bb1fadd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48954718bc20698fbe55d2dd994f656d358fd34268aa559044cd1e5d00257b6d2a3983ec146cb6b2f3be8e1cb0ae63fc3b9ccc37c662416687a191df39adf216
|
7
|
+
data.tar.gz: cf36a4710fbe3bc24b91f4991f6f80fb046bd143b4fa8304878da13bb979610ca9cb9d435eac945a63e37fa43acbb40bbfb3f91edad138ebb0ba21107e6ad68a
|
data/lib/guard.rb
CHANGED
@@ -133,9 +133,6 @@ module Guard
|
|
133
133
|
evaluator = Guardfile::Evaluator.new(options)
|
134
134
|
evaluator.evaluate
|
135
135
|
|
136
|
-
# TODO: remove this workaround when options are removed
|
137
|
-
state.session.clearing(state.session.options[:clear])
|
138
|
-
|
139
136
|
UI.reset_and_clear
|
140
137
|
|
141
138
|
msg = "No plugins found in Guardfile, please add at least one."
|
data/lib/guard/aruba_adapter.rb
CHANGED
@@ -11,7 +11,7 @@ module Guard
|
|
11
11
|
@kernel = kernel
|
12
12
|
|
13
13
|
if ENV["INSIDE_ARUBA_TEST"] == "1"
|
14
|
-
|
14
|
+
UI.options = UI.options.merge(flush_seconds: 0)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -29,7 +29,7 @@ module Guard
|
|
29
29
|
$stdout = @stdout
|
30
30
|
|
31
31
|
# Run our normal Thor app the way we know and love.
|
32
|
-
|
32
|
+
CLI.start(@argv)
|
33
33
|
|
34
34
|
# Thor::Base#start does not have a return value, assume
|
35
35
|
# success if no exception is raised.
|
@@ -45,10 +45,10 @@ module Guard
|
|
45
45
|
e.status
|
46
46
|
ensure
|
47
47
|
# flush the logger so the output doesn't appear in next CLI invocation
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
Guard.listener.stop if Guard.listener
|
49
|
+
UI.logger.flush
|
50
|
+
UI.logger.close
|
51
|
+
UI.reset_logger
|
52
52
|
|
53
53
|
# ...then we put them back.
|
54
54
|
$stderr = STDERR
|
data/lib/guard/cli.rb
CHANGED
@@ -96,6 +96,11 @@ module Guard
|
|
96
96
|
banner: "Specify a network address to Listen on for "\
|
97
97
|
"file change events (e.g. for use in VMs)"
|
98
98
|
|
99
|
+
def self.help(shell, subcommand = false)
|
100
|
+
super
|
101
|
+
command_help(shell, default_task)
|
102
|
+
end
|
103
|
+
|
99
104
|
# Start Guard by initializing the defined Guard plugins and watch the file
|
100
105
|
# system.
|
101
106
|
#
|
data/lib/guard/commander.rb
CHANGED
data/lib/guard/commands/all.rb
CHANGED
@@ -21,14 +21,14 @@ module Guard
|
|
21
21
|
BANNER
|
22
22
|
|
23
23
|
def process(*entries)
|
24
|
-
scopes, unknown =
|
24
|
+
scopes, unknown = Guard.state.session.convert_scope(entries)
|
25
25
|
|
26
26
|
unless unknown.empty?
|
27
27
|
output.puts "Unknown scopes: #{ unknown.join(", ") }"
|
28
28
|
return
|
29
29
|
end
|
30
30
|
|
31
|
-
|
31
|
+
Guard.async_queue_add([:guard_run_all, scopes])
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
@@ -20,14 +20,14 @@ module Guard
|
|
20
20
|
BANNER
|
21
21
|
|
22
22
|
def process(*entries)
|
23
|
-
scopes, unknown =
|
23
|
+
scopes, unknown = Guard.state.session.convert_scope(entries)
|
24
24
|
|
25
25
|
unless unknown.empty?
|
26
26
|
output.puts "Unknown scopes: #{ unknown.join(", ") }"
|
27
27
|
return
|
28
28
|
end
|
29
29
|
|
30
|
-
|
30
|
+
Guard.async_queue_add([:guard_reload, scopes])
|
31
31
|
end
|
32
32
|
end
|
33
33
|
end
|
data/lib/guard/commands/show.rb
CHANGED
@@ -18,6 +18,9 @@ module Guard
|
|
18
18
|
REEVALUATE_GUARDFILE = <<-EOS.gsub(/^\s*/, "")
|
19
19
|
Starting with Guard 2.8.3 'Guard::Evaluator#reevaluate_guardfile' is
|
20
20
|
deprecated in favor of '#reevaluate'.
|
21
|
+
|
22
|
+
NOTE: this method no longer does anything since it could not be
|
23
|
+
implemented reliably.
|
21
24
|
EOS
|
22
25
|
|
23
26
|
def evaluate_guardfile
|
@@ -30,7 +33,6 @@ module Guard
|
|
30
33
|
# guard's deprecations require us
|
31
34
|
require "guard"
|
32
35
|
UI.deprecation(REEVALUATE_GUARDFILE)
|
33
|
-
::Guard.state.reset_session { evaluate }
|
34
36
|
end
|
35
37
|
end
|
36
38
|
end
|
@@ -30,7 +30,7 @@ module Guard
|
|
30
30
|
|
31
31
|
Please use 'Guard.plugins(filter)' instead.
|
32
32
|
|
33
|
-
|
33
|
+
#{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % "#deprecated-methods"}
|
34
34
|
EOS
|
35
35
|
|
36
36
|
def guards(filter = nil)
|
@@ -192,7 +192,62 @@ module Guard
|
|
192
192
|
|
193
193
|
def options
|
194
194
|
UI.deprecation(OPTIONS)
|
195
|
-
|
195
|
+
|
196
|
+
Class.new(Hash) do
|
197
|
+
def initialize
|
198
|
+
super(to_hash)
|
199
|
+
end
|
200
|
+
|
201
|
+
def to_hash
|
202
|
+
session = ::Guard.state.session
|
203
|
+
{
|
204
|
+
clear: session.clearing?,
|
205
|
+
debug: session.debug?,
|
206
|
+
watchdir: Array(session.watchdirs).map(&:to_s),
|
207
|
+
notify: session.notify_options[:notify],
|
208
|
+
no_interactions: (session.interactor_name == :sleep)
|
209
|
+
}
|
210
|
+
end
|
211
|
+
|
212
|
+
def to_a
|
213
|
+
to_hash.to_a
|
214
|
+
end
|
215
|
+
|
216
|
+
def fetch(key, *args)
|
217
|
+
hash = to_hash
|
218
|
+
verify_key!(hash, key)
|
219
|
+
hash.fetch(key, *args)
|
220
|
+
end
|
221
|
+
|
222
|
+
def []=(key, value)
|
223
|
+
case key
|
224
|
+
when :clear
|
225
|
+
::Guard.state.session.clearing(value)
|
226
|
+
else
|
227
|
+
msg = "Oops! Guard.option[%s]= is unhandled or unsupported." \
|
228
|
+
"Please file an issue if you rely on this option working."
|
229
|
+
fail NotImplementedError, format(msg, key)
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
def keys
|
234
|
+
to_hash.keys
|
235
|
+
end
|
236
|
+
|
237
|
+
def include?(value)
|
238
|
+
keys.include? value
|
239
|
+
end
|
240
|
+
|
241
|
+
private
|
242
|
+
|
243
|
+
def verify_key!(hash, key)
|
244
|
+
return if hash.key?(key)
|
245
|
+
msg = "Oops! Guard.option[%s] is unhandled or unsupported." \
|
246
|
+
"Please file an issue if you rely on this option working."
|
247
|
+
fail NotImplementedError, format(msg, key)
|
248
|
+
end
|
249
|
+
|
250
|
+
end.new
|
196
251
|
end
|
197
252
|
|
198
253
|
ADD_GROUP = <<-EOS.gsub(/^\s*/, "")
|
data/lib/guard/dsl.rb
CHANGED
@@ -72,9 +72,8 @@ module Guard
|
|
72
72
|
#
|
73
73
|
# @see Guard::Notifier for available notifier and its options.
|
74
74
|
#
|
75
|
-
def notification(notifier,
|
76
|
-
|
77
|
-
Notifier.add(notifier.to_sym, options.merge(silent: false))
|
75
|
+
def notification(notifier, opts = {})
|
76
|
+
Guard.state.session.guardfile_notification = { notifier.to_sym => opts }
|
78
77
|
end
|
79
78
|
|
80
79
|
# Sets the interactor options or disable the interactor.
|
data/lib/guard/dsl_describer.rb
CHANGED
@@ -107,22 +107,20 @@ module Guard
|
|
107
107
|
# @see CLI#show
|
108
108
|
#
|
109
109
|
def notifiers
|
110
|
-
supported =
|
111
|
-
Notifier.connect(notify:
|
112
|
-
detected = Notifier.
|
110
|
+
supported = Notifier.supported
|
111
|
+
Notifier.connect(notify: true, silent: true)
|
112
|
+
detected = Notifier.detected
|
113
113
|
Notifier.disconnect
|
114
114
|
|
115
|
-
|
116
|
-
|
115
|
+
detected_names = detected.map { |item| item[:name] }
|
116
|
+
|
117
|
+
final_rows = supported.each_with_object([]) do |(name, _), rows|
|
118
|
+
available = detected_names.include?(name) ? "✔" : "✘"
|
117
119
|
|
118
|
-
name = definition[0]
|
119
|
-
clazz = definition[1]
|
120
|
-
available = clazz.available?(silent: true) ? "✔" : "✘"
|
121
120
|
notifier = detected.detect { |n| n[:name] == name }
|
122
121
|
used = notifier ? "✔" : "✘"
|
123
122
|
|
124
|
-
options =
|
125
|
-
options.delete(:silent)
|
123
|
+
options = notifier ? notifier[:options] : {}
|
126
124
|
|
127
125
|
if options.empty?
|
128
126
|
rows << :split
|
@@ -149,16 +147,6 @@ module Guard
|
|
149
147
|
|
150
148
|
private
|
151
149
|
|
152
|
-
def _merge_options(klass, notifier)
|
153
|
-
notify_options = notifier ? notifier[:options] : {}
|
154
|
-
|
155
|
-
if klass.const_defined?(:DEFAULTS)
|
156
|
-
klass.const_get(:DEFAULTS).merge(notify_options)
|
157
|
-
else
|
158
|
-
notify_options
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
150
|
def _add_row(rows, name, available, used, option, value)
|
163
151
|
rows << {
|
164
152
|
Name: name,
|
@@ -141,7 +141,7 @@ module Guard
|
|
141
141
|
def _instance_eval_guardfile(contents)
|
142
142
|
Dsl.new.evaluate(contents, @guardfile_path || "", 1)
|
143
143
|
rescue => ex
|
144
|
-
|
144
|
+
UI.error "Invalid Guardfile, original error is:\n#{ $! }"
|
145
145
|
raise ex
|
146
146
|
end
|
147
147
|
|
@@ -163,7 +163,7 @@ module Guard
|
|
163
163
|
@source = :inline
|
164
164
|
@guardfile_contents = options[:guardfile_contents]
|
165
165
|
|
166
|
-
|
166
|
+
UI.info "Using inline Guardfile."
|
167
167
|
true
|
168
168
|
end
|
169
169
|
|
@@ -193,9 +193,9 @@ module Guard
|
|
193
193
|
rescue Errno::ENOENT
|
194
194
|
fail
|
195
195
|
rescue SystemCallError => e
|
196
|
-
|
197
|
-
|
198
|
-
|
196
|
+
UI.error "Error reading file #{full_path}:"
|
197
|
+
UI.error e.inspect
|
198
|
+
UI.error e.backtrace
|
199
199
|
abort
|
200
200
|
end
|
201
201
|
|
@@ -64,7 +64,7 @@ module Guard
|
|
64
64
|
def initialize_template(plugin_name)
|
65
65
|
guardfile = Pathname("Guardfile")
|
66
66
|
|
67
|
-
plugin_util =
|
67
|
+
plugin_util = PluginUtil.new(plugin_name)
|
68
68
|
# TODO: change to "valid?" method
|
69
69
|
if plugin_util.plugin_class(fail_gracefully: true)
|
70
70
|
plugin_util.add_to_guardfile
|
@@ -91,13 +91,13 @@ module Guard
|
|
91
91
|
# @see Guard::CLI#init
|
92
92
|
#
|
93
93
|
def initialize_all_templates
|
94
|
-
|
94
|
+
PluginUtil.plugin_names.each { |g| initialize_template(g) }
|
95
95
|
end
|
96
96
|
|
97
97
|
private
|
98
98
|
|
99
99
|
def _ui(*args)
|
100
|
-
|
100
|
+
UI.send(*args)
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
@@ -28,7 +28,7 @@ module Guard
|
|
28
28
|
|
29
29
|
Thread.abort_on_exception = true
|
30
30
|
|
31
|
-
|
31
|
+
UI.level = Logger::DEBUG
|
32
32
|
|
33
33
|
TRACES.each { |mod, meth| _trace(mod, meth, &method(:_notify)) }
|
34
34
|
@traced = true
|
@@ -36,14 +36,14 @@ module Guard
|
|
36
36
|
|
37
37
|
def stop
|
38
38
|
return unless @started ||= false
|
39
|
-
|
39
|
+
UI.level = Logger::INFO
|
40
40
|
_reset
|
41
41
|
end
|
42
42
|
|
43
43
|
private
|
44
44
|
|
45
45
|
def _notify(*args)
|
46
|
-
|
46
|
+
UI.debug "Command execution: #{args.join(" ")}"
|
47
47
|
end
|
48
48
|
|
49
49
|
# reset singleton - called by tests
|
@@ -55,11 +55,11 @@ module Guard
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def _trace(mod, meth, &block)
|
58
|
-
|
58
|
+
Tracing.trace(mod, meth, &block)
|
59
59
|
end
|
60
60
|
|
61
61
|
def _untrace(mod, meth)
|
62
|
-
|
62
|
+
Tracing.untrace(mod, meth)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -9,7 +9,6 @@ module Guard
|
|
9
9
|
# TODO: split into a commandline class and session (plugins, groups)
|
10
10
|
# TODO: swap session and metadata
|
11
11
|
class Session
|
12
|
-
attr_reader :options
|
13
12
|
attr_reader :plugins
|
14
13
|
attr_reader :groups
|
15
14
|
|
@@ -68,6 +67,8 @@ module Guard
|
|
68
67
|
@guardfile_group_scope = []
|
69
68
|
@guardfile_ignore = []
|
70
69
|
@guardfile_ignore_bang = []
|
70
|
+
|
71
|
+
@guardfile_notifier_options = {}
|
71
72
|
end
|
72
73
|
|
73
74
|
def guardfile_scope(scope)
|
@@ -120,12 +121,12 @@ module Guard
|
|
120
121
|
end
|
121
122
|
|
122
123
|
def listener_args
|
123
|
-
if options[:listen_on]
|
124
|
-
[:on, options[:listen_on]]
|
124
|
+
if @options[:listen_on]
|
125
|
+
[:on, @options[:listen_on]]
|
125
126
|
else
|
126
127
|
listener_options = {}
|
127
128
|
[:latency, :force_polling, :wait_for_delay].each do |option|
|
128
|
-
listener_options[option] = options[option] if options[option]
|
129
|
+
listener_options[option] = @options[option] if @options[option]
|
129
130
|
end
|
130
131
|
expanded_watchdirs = watchdirs.map { |dir| File.expand_path dir }
|
131
132
|
[:to, *expanded_watchdirs, listener_options]
|
@@ -133,16 +134,26 @@ module Guard
|
|
133
134
|
end
|
134
135
|
|
135
136
|
def evaluator_options
|
136
|
-
opts = { guardfile: options[:guardfile] }
|
137
|
+
opts = { guardfile: @options[:guardfile] }
|
137
138
|
# TODO: deprecate :guardfile_contents
|
138
|
-
if options[:guardfile_contents]
|
139
|
-
opts[:contents] = options[:guardfile_contents]
|
139
|
+
if @options[:guardfile_contents]
|
140
|
+
opts[:contents] = @options[:guardfile_contents]
|
140
141
|
end
|
141
142
|
opts
|
142
143
|
end
|
143
144
|
|
144
145
|
def notify_options
|
145
|
-
|
146
|
+
names = @guardfile_notifier_options.keys
|
147
|
+
return { notify: false } if names.include?(:off)
|
148
|
+
|
149
|
+
{
|
150
|
+
notify: @options[:notify],
|
151
|
+
notifiers: @guardfile_notifier_options
|
152
|
+
}
|
153
|
+
end
|
154
|
+
|
155
|
+
def guardfile_notification=(config)
|
156
|
+
@guardfile_notifier_options.merge!(config)
|
146
157
|
end
|
147
158
|
|
148
159
|
def interactor_name
|
@@ -20,19 +20,6 @@ module Guard
|
|
20
20
|
|
21
21
|
attr_reader :scope
|
22
22
|
attr_reader :session
|
23
|
-
|
24
|
-
# @private api
|
25
|
-
# TODO: REMOVE!
|
26
|
-
def reset_session(&block)
|
27
|
-
Runner.new.run(:stop)
|
28
|
-
Notifier.disconnect
|
29
|
-
options = @session.options.dup
|
30
|
-
@session = Session.new(options)
|
31
|
-
block.call
|
32
|
-
Runner.new.run(:start)
|
33
|
-
ensure
|
34
|
-
Notifier.connect(session.notify_options)
|
35
|
-
end
|
36
23
|
end
|
37
24
|
end
|
38
25
|
end
|