guard 1.4.0 → 2.18.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.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -677
  3. data/LICENSE +4 -2
  4. data/README.md +91 -753
  5. data/bin/_guard-core +11 -0
  6. data/bin/guard +108 -3
  7. data/lib/guard/aruba_adapter.rb +59 -0
  8. data/lib/guard/cli/environments/bundler.rb +22 -0
  9. data/lib/guard/cli/environments/evaluate_only.rb +35 -0
  10. data/lib/guard/cli/environments/valid.rb +69 -0
  11. data/lib/guard/cli.rb +129 -128
  12. data/lib/guard/commander.rb +104 -0
  13. data/lib/guard/commands/all.rb +37 -0
  14. data/lib/guard/commands/change.rb +31 -0
  15. data/lib/guard/commands/notification.rb +26 -0
  16. data/lib/guard/commands/pause.rb +29 -0
  17. data/lib/guard/commands/reload.rb +36 -0
  18. data/lib/guard/commands/scope.rb +38 -0
  19. data/lib/guard/commands/show.rb +24 -0
  20. data/lib/guard/config.rb +18 -0
  21. data/lib/guard/deprecated/dsl.rb +45 -0
  22. data/lib/guard/deprecated/evaluator.rb +39 -0
  23. data/lib/guard/deprecated/guard.rb +328 -0
  24. data/lib/guard/deprecated/guardfile.rb +84 -0
  25. data/lib/guard/deprecated/watcher.rb +27 -0
  26. data/lib/guard/dsl.rb +332 -363
  27. data/lib/guard/dsl_describer.rb +132 -122
  28. data/lib/guard/dsl_reader.rb +51 -0
  29. data/lib/guard/group.rb +34 -14
  30. data/lib/guard/guardfile/evaluator.rb +232 -0
  31. data/lib/guard/guardfile/generator.rb +128 -0
  32. data/lib/guard/guardfile.rb +24 -60
  33. data/lib/guard/interactor.rb +31 -255
  34. data/lib/guard/internals/debugging.rb +68 -0
  35. data/lib/guard/internals/groups.rb +40 -0
  36. data/lib/guard/internals/helpers.rb +13 -0
  37. data/lib/guard/internals/plugins.rb +53 -0
  38. data/lib/guard/internals/queue.rb +51 -0
  39. data/lib/guard/internals/scope.rb +121 -0
  40. data/lib/guard/internals/session.rb +180 -0
  41. data/lib/guard/internals/state.rb +25 -0
  42. data/lib/guard/internals/tracing.rb +33 -0
  43. data/lib/guard/internals/traps.rb +10 -0
  44. data/lib/guard/jobs/base.rb +21 -0
  45. data/lib/guard/jobs/pry_wrapper.rb +336 -0
  46. data/lib/guard/jobs/sleep.rb +26 -0
  47. data/lib/guard/notifier.rb +46 -212
  48. data/lib/guard/options.rb +22 -0
  49. data/lib/guard/plugin.rb +303 -0
  50. data/lib/guard/plugin_util.rb +191 -0
  51. data/lib/guard/rake_task.rb +42 -0
  52. data/lib/guard/runner.rb +80 -140
  53. data/lib/guard/templates/Guardfile +14 -0
  54. data/lib/guard/terminal.rb +13 -0
  55. data/lib/guard/ui/colors.rb +56 -0
  56. data/lib/guard/ui/config.rb +70 -0
  57. data/lib/guard/ui/logger.rb +30 -0
  58. data/lib/guard/ui.rb +163 -128
  59. data/lib/guard/version.rb +1 -2
  60. data/lib/guard/watcher/pattern/deprecated_regexp.rb +45 -0
  61. data/lib/guard/watcher/pattern/match_result.rb +18 -0
  62. data/lib/guard/watcher/pattern/matcher.rb +33 -0
  63. data/lib/guard/watcher/pattern/pathname_path.rb +15 -0
  64. data/lib/guard/watcher/pattern/simple_path.rb +23 -0
  65. data/lib/guard/watcher/pattern.rb +24 -0
  66. data/lib/guard/watcher.rb +52 -95
  67. data/lib/guard.rb +108 -376
  68. data/lib/tasks/releaser.rb +116 -0
  69. data/man/guard.1 +12 -9
  70. data/man/guard.1.html +18 -12
  71. metadata +148 -77
  72. data/images/guard.png +0 -0
  73. data/lib/guard/guard.rb +0 -156
  74. data/lib/guard/hook.rb +0 -120
  75. data/lib/guard/interactors/coolline.rb +0 -64
  76. data/lib/guard/interactors/helpers/completion.rb +0 -32
  77. data/lib/guard/interactors/helpers/terminal.rb +0 -46
  78. data/lib/guard/interactors/readline.rb +0 -94
  79. data/lib/guard/interactors/simple.rb +0 -19
  80. data/lib/guard/notifiers/emacs.rb +0 -69
  81. data/lib/guard/notifiers/gntp.rb +0 -118
  82. data/lib/guard/notifiers/growl.rb +0 -99
  83. data/lib/guard/notifiers/growl_notify.rb +0 -92
  84. data/lib/guard/notifiers/libnotify.rb +0 -96
  85. data/lib/guard/notifiers/notifysend.rb +0 -84
  86. data/lib/guard/notifiers/rb_notifu.rb +0 -102
  87. data/lib/guard/notifiers/terminal_notifier.rb +0 -66
  88. data/lib/guard/notifiers/tmux.rb +0 -69
  89. data/lib/guard/version.rbc +0 -130
@@ -0,0 +1,328 @@
1
+ require "guard/config"
2
+ fail "Deprecations disabled (strict mode)" if Guard::Config.new.strict?
3
+
4
+ require "forwardable"
5
+
6
+ require "guard/ui"
7
+ require "guard/internals/session"
8
+ require "guard/internals/state"
9
+ require "guard/guardfile/evaluator"
10
+
11
+ module Guard
12
+ # @deprecated Every method in this module is deprecated
13
+ module Deprecated
14
+ module Guard
15
+ def self.add_deprecated(klass)
16
+ klass.send(:extend, ClassMethods)
17
+ end
18
+
19
+ module ClassMethods
20
+ MORE_INFO_ON_UPGRADING_TO_GUARD_2 = <<-EOS.gsub(/^\s*/, "")
21
+ For more information on how to upgrade for Guard 2.0, please head
22
+ over to: https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0%s
23
+ EOS
24
+
25
+ # @deprecated Use `Guard.plugins(filter)` instead.
26
+ #
27
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
28
+ # upgrade for Guard 2.0
29
+ #
30
+ GUARDS = <<-EOS.gsub(/^\s*/, "")
31
+ Starting with Guard 2.0 'Guard.guards(filter)' is deprecated.
32
+
33
+ Please use 'Guard.plugins(filter)' instead.
34
+
35
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
36
+ EOS
37
+
38
+ def guards(filter = nil)
39
+ ::Guard::UI.deprecation(GUARDS)
40
+ ::Guard.state.session.plugins.all(filter)
41
+ end
42
+
43
+ # @deprecated Use `Guard.add_plugin(name, options = {})` instead.
44
+ #
45
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
46
+ # upgrade for Guard 2.0
47
+ #
48
+ ADD_GUARD = <<-EOS.gsub(/^\s*/, "")
49
+ Starting with Guard 2.0 'Guard.add_guard(name, options = {})' is
50
+ deprecated.
51
+
52
+ Please use 'Guard.add_plugin(name, options = {})' instead.
53
+
54
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
55
+ EOS
56
+
57
+ def add_guard(*args)
58
+ ::Guard::UI.deprecation(ADD_GUARD)
59
+ add_plugin(*args)
60
+ end
61
+
62
+ # @deprecated Use
63
+ # `Guard::PluginUtil.new(name).plugin_class(fail_gracefully:
64
+ # fail_gracefully)` instead.
65
+ #
66
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
67
+ # upgrade for Guard 2.0
68
+ #
69
+ GET_GUARD_CLASS = <<-EOS.gsub(/^\s*/, "")
70
+ Starting with Guard 2.0 'Guard.get_guard_class(name, fail_gracefully
71
+ = false)' is deprecated and is now always on.
72
+
73
+ Please use 'Guard::PluginUtil.new(name).plugin_class(fail_gracefully:
74
+ fail_gracefully)' instead.
75
+
76
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
77
+ EOS
78
+
79
+ def get_guard_class(name, fail_gracefully = false)
80
+ UI.deprecation(GET_GUARD_CLASS)
81
+ PluginUtil.new(name).plugin_class(fail_gracefully: fail_gracefully)
82
+ end
83
+
84
+ # @deprecated Use `Guard::PluginUtil.new(name).plugin_location` instead.
85
+ #
86
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
87
+ # upgrade for Guard 2.0
88
+ #
89
+ LOCATE_GUARD = <<-EOS.gsub(/^\s*/, "")
90
+ Starting with Guard 2.0 'Guard.locate_guard(name)' is deprecated.
91
+
92
+ Please use 'Guard::PluginUtil.new(name).plugin_location' instead.
93
+
94
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
95
+ EOS
96
+
97
+ def locate_guard(name)
98
+ UI.deprecation(LOCATE_GUARD)
99
+ PluginUtil.new(name).plugin_location
100
+ end
101
+
102
+ # @deprecated Use `Guard::PluginUtil.plugin_names` instead.
103
+ #
104
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
105
+ # upgrade for Guard 2.0
106
+ #
107
+ # Deprecator message for the `Guard.guard_gem_names` method
108
+ GUARD_GEM_NAMES = <<-EOS.gsub(/^\s*/, "")
109
+ Starting with Guard 2.0 'Guard.guard_gem_names' is deprecated.
110
+
111
+ Please use 'Guard::PluginUtil.plugin_names' instead.
112
+
113
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods'}
114
+ EOS
115
+
116
+ def guard_gem_names
117
+ UI.deprecation(GUARD_GEM_NAMES)
118
+ PluginUtil.plugin_names
119
+ end
120
+
121
+ RUNNING = <<-EOS.gsub(/^\s*/, "")
122
+ Starting with Guard 2.7.1 it was discovered that Guard.running was
123
+ never initialized or used internally.
124
+ EOS
125
+
126
+ def running
127
+ UI.deprecation(RUNNING)
128
+ nil
129
+ end
130
+
131
+ LOCK = <<-EOS.gsub(/^\s*/, "")
132
+ Starting with Guard 2.7.1 it was discovered that this accessor was
133
+ never initialized or used internally.
134
+ EOS
135
+ def lock
136
+ UI.deprecation(LOCK)
137
+ end
138
+
139
+ LISTENER_ASSIGN = <<-EOS.gsub(/^\s*/, "")
140
+ listener= should not be used
141
+ EOS
142
+
143
+ def listener=(_)
144
+ UI.deprecation(LISTENER_ASSIGN)
145
+ ::Guard.listener
146
+ end
147
+
148
+ EVALUATOR = <<-EOS.gsub(/^\s*/, "")
149
+ Starting with Guard 2.8.2 this method shouldn't be used
150
+ EOS
151
+
152
+ def evaluator
153
+ UI.deprecation(EVALUATOR)
154
+ options = ::Guard.state.session.evaluator_options
155
+ ::Guard::Guardfile::Evaluator.new(options)
156
+ end
157
+
158
+ RESET_EVALUATOR = <<-EOS.gsub(/^\s*/, "")
159
+ Starting with Guard 2.8.2 this method shouldn't be used
160
+ EOS
161
+
162
+ def reset_evaluator(_options)
163
+ UI.deprecation(RESET_EVALUATOR)
164
+ end
165
+
166
+ RUNNER = <<-EOS.gsub(/^\s*/, "")
167
+ Starting with Guard 2.8.2 this method shouldn't be used
168
+ EOS
169
+
170
+ def runner
171
+ UI.deprecation(RUNNER)
172
+ ::Guard::Runner.new
173
+ end
174
+
175
+ EVALUATE_GUARDFILE = <<-EOS.gsub(/^\s*/, "")
176
+ Starting with Guard 2.8.2 this method shouldn't be used
177
+ EOS
178
+
179
+ def evaluate_guardfile
180
+ UI.deprecation(EVALUATE_GUARDFILE)
181
+ options = ::Guard.state.session.evaluator_options
182
+ evaluator = ::Guard::Guardfile::Evaluator.new(options)
183
+ evaluator.evaluate
184
+ msg = "No plugins found in Guardfile, please add at least one."
185
+ ::Guard::UI.error msg if _pluginless_guardfile?
186
+ end
187
+
188
+ OPTIONS = <<-EOS.gsub(/^\s*/, "")
189
+ Starting with Guard 2.9.0 Guard.options is deprecated and ideally you
190
+ should be able to set specific options through an API or a DSL
191
+ method. Feel free to add feature requests if there's something
192
+ missing.
193
+ EOS
194
+
195
+ def options
196
+ UI.deprecation(OPTIONS)
197
+
198
+ Class.new(Hash) do
199
+ def initialize
200
+ super(to_hash)
201
+ end
202
+
203
+ def to_hash
204
+ session = ::Guard.state.session
205
+ {
206
+ clear: session.clearing?,
207
+ debug: session.debug?,
208
+ watchdir: Array(session.watchdirs).map(&:to_s),
209
+ notify: session.notify_options[:notify],
210
+ no_interactions: (session.interactor_name == :sleep)
211
+ }
212
+ end
213
+
214
+ extend Forwardable
215
+ delegate [:to_a, :keys] => :to_hash
216
+ delegate [:include?] => :keys
217
+
218
+ def fetch(key, *args)
219
+ hash = to_hash
220
+ verify_key!(hash, key)
221
+ hash.fetch(key, *args)
222
+ end
223
+
224
+ def []=(key, value)
225
+ case key
226
+ when :clear
227
+ ::Guard.state.session.clearing(value)
228
+ else
229
+ msg = "Oops! Guard.option[%s]= is unhandled or unsupported." \
230
+ "Please file an issue if you rely on this option working."
231
+ fail NotImplementedError, format(msg, key)
232
+ end
233
+ end
234
+
235
+ private
236
+
237
+ def verify_key!(hash, key)
238
+ return if hash.key?(key)
239
+ msg = "Oops! Guard.option[%s] is unhandled or unsupported." \
240
+ "Please file an issue if you rely on this option working."
241
+ fail NotImplementedError, format(msg, key)
242
+ end
243
+ end.new
244
+ end
245
+
246
+ ADD_GROUP = <<-EOS.gsub(/^\s*/, "")
247
+ add_group is deprecated since 2.10.0 in favor of
248
+ Guard.state.session.groups.add
249
+ EOS
250
+
251
+ def add_group(name, options = {})
252
+ UI.deprecation(ADD_GROUP)
253
+ ::Guard.state.session.groups.add(name, options)
254
+ end
255
+
256
+ ADD_PLUGIN = <<-EOS.gsub(/^\s*/, "")
257
+ add_plugin is deprecated since 2.10.0 in favor of
258
+ Guard.state.session.plugins.add
259
+ EOS
260
+
261
+ def add_plugin(name, options = {})
262
+ UI.deprecation(ADD_PLUGIN)
263
+ ::Guard.state.session.plugins.add(name, options)
264
+ end
265
+
266
+ GROUP = <<-EOS.gsub(/^\s*/, "")
267
+ group is deprecated since 2.10.0 in favor of
268
+ Guard.state.session.group.add(filter).first
269
+ EOS
270
+
271
+ def group(filter)
272
+ UI.deprecation(GROUP)
273
+ ::Guard.state.session.groups.all(filter).first
274
+ end
275
+
276
+ PLUGIN = <<-EOS.gsub(/^\s*/, "")
277
+ plugin is deprecated since 2.10.0 in favor of
278
+ Guard.state.session.group.add(filter).first
279
+ EOS
280
+
281
+ def plugin(filter)
282
+ UI.deprecation(PLUGIN)
283
+ ::Guard.state.session.plugins.all(filter).first
284
+ end
285
+
286
+ GROUPS = <<-EOS.gsub(/^\s*/, "")
287
+ group is deprecated since 2.10.0 in favor of
288
+ Guard.state.session.groups.all(filter)
289
+ EOS
290
+
291
+ def groups(filter)
292
+ UI.deprecation(GROUPS)
293
+ ::Guard.state.session.groups.all(filter)
294
+ end
295
+
296
+ PLUGINS = <<-EOS.gsub(/^\s*/, "")
297
+ plugins is deprecated since 2.10.0 in favor of
298
+ Guard.state.session.plugins.all(filter)
299
+ EOS
300
+
301
+ def plugins(filter)
302
+ UI.deprecation(PLUGINS)
303
+ ::Guard.state.session.plugins.all(filter)
304
+ end
305
+
306
+ SCOPE = <<-EOS.gsub(/^\s*/, "")
307
+ scope is deprecated since 2.10.0 in favor of
308
+ Guard.state.scope.to_hash
309
+ EOS
310
+
311
+ def scope
312
+ UI.deprecation(SCOPE)
313
+ ::Guard.state.scope.to_hash
314
+ end
315
+
316
+ SCOPE_ASSIGN = <<-EOS.gsub(/^\s*/, "")
317
+ scope= is deprecated since 2.10.0 in favor of
318
+ Guard.state.scope.to_hash
319
+ EOS
320
+
321
+ def scope=(scope)
322
+ UI.deprecation(SCOPE_ASSIGN)
323
+ ::Guard.state.scope.from_interactor(scope)
324
+ end
325
+ end
326
+ end
327
+ end
328
+ end
@@ -0,0 +1,84 @@
1
+ require "guard/config"
2
+ fail "Deprecations disabled (strict mode)" if Guard::Config.new.strict?
3
+
4
+ require "guard/guardfile/generator"
5
+
6
+ module Guard
7
+ module Deprecated
8
+ module Guardfile
9
+ def self.add_deprecated(dsl_klass)
10
+ dsl_klass.send(:extend, ClassMethods)
11
+ end
12
+
13
+ module ClassMethods
14
+ MORE_INFO_ON_UPGRADING_TO_GUARD_2 = <<-EOS.gsub(/^\s*/, "")
15
+ For more information on how to upgrade for Guard 2.0, please head
16
+ over to: https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0%s
17
+ EOS
18
+ # @deprecated Use {Guardfile::Generator#create_guardfile} instead.
19
+ #
20
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
21
+ # upgrade for Guard 2.0
22
+ #
23
+ CREATE_GUARDFILE = <<-EOS.gsub(/^\s*/, "")
24
+ Starting with Guard 2.0 'Guard::Guardfile.create_guardfile(options)'
25
+ is deprecated.
26
+
27
+ Please use 'Guard::Guardfile::Generator.new(options).create_guardfile'
28
+ instead.
29
+
30
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
31
+ EOS
32
+
33
+ def create_guardfile(options = {})
34
+ UI.deprecation(CREATE_GUARDFILE)
35
+ ::Guard::Guardfile::Generator.new(options).create_guardfile
36
+ end
37
+
38
+ # @deprecated Use {Guardfile::Generator#initialize_template} instead.
39
+ #
40
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
41
+ # upgrade for Guard 2.0
42
+ #
43
+ # Deprecator message for the `Guardfile.initialize_template` method
44
+ INITIALIZE_TEMPLATE = <<-EOS.gsub(/^\s*/, "")
45
+ Starting with Guard 2.0
46
+ 'Guard::Guardfile.initialize_template(plugin_name)' is deprecated.
47
+
48
+ Please use
49
+ 'Guard::Guardfile::Generator.new.initialize_template(plugin_name)'
50
+ instead.
51
+
52
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
53
+ EOS
54
+
55
+ def initialize_template(plugin_name)
56
+ UI.deprecation(INITIALIZE_TEMPLATE)
57
+ ::Guard::Guardfile::Generator.new.initialize_template(plugin_name)
58
+ end
59
+
60
+ # @deprecated Use {Guardfile::Generator#initialize_all_templates}
61
+ # instead.
62
+ #
63
+ # @see https://github.com/guard/guard/wiki/Upgrading-to-Guard-2.0 How to
64
+ # upgrade for Guard 2.0
65
+ #
66
+ # Deprecator message for the `Guardfile.initialize_all_templates` method
67
+ INITIALIZE_ALL_TEMPLATES = <<-EOS.gsub(/^\s*/, "")
68
+ Starting with Guard 2.0 'Guard::Guardfile.initialize_all_templates'
69
+ is deprecated.
70
+
71
+ Please use 'Guard::Guardfile::Generator.new.initialize_all_templates'
72
+ instead.
73
+
74
+ #{MORE_INFO_ON_UPGRADING_TO_GUARD_2 % '#deprecated-methods-2'}
75
+ EOS
76
+
77
+ def initialize_all_templates
78
+ UI.deprecation(INITIALIZE_ALL_TEMPLATES)
79
+ ::Guard::Guardfile::Generator.new.initialize_all_templates
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,27 @@
1
+ require "guard/config"
2
+ fail "Deprecations disabled (strict mode)" if Guard::Config.new.strict?
3
+
4
+ module Guard
5
+ module Deprecated
6
+ module Watcher
7
+ def self.add_deprecated(klass)
8
+ klass.send(:extend, ClassMethods)
9
+ end
10
+
11
+ module ClassMethods
12
+ MATCH_GUARDFILE = <<-EOS.gsub(/^\s*/, "")
13
+ Starting with Guard 2.8.3 this method is deprecated.
14
+ EOS
15
+
16
+ def match_guardfile?(files)
17
+ require "guard/guardfile/evaluator"
18
+ UI.deprecation(MATCH_GUARDFILE)
19
+ options = ::Guard.state.session.evaluator_options
20
+ evaluator = ::Guard::Guardfile::Evaluator.new(options)
21
+ path = evaluator.guardfile_path
22
+ files.any? { |file| File.expand_path(file) == path }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end