guard 2.10.5 → 2.11.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|