guard 2.6.1 → 2.7.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/README.md +73 -58
- data/bin/guard +2 -2
- data/lib/guard.rb +64 -59
- data/lib/guard/cli.rb +66 -60
- data/lib/guard/cli.rb.orig +215 -0
- data/lib/guard/commander.rb +45 -69
- data/lib/guard/commands/all.rb +21 -19
- data/lib/guard/commands/change.rb +17 -22
- data/lib/guard/commands/notification.rb +15 -16
- data/lib/guard/commands/pause.rb +14 -15
- data/lib/guard/commands/reload.rb +19 -20
- data/lib/guard/commands/scope.rb +23 -19
- data/lib/guard/commands/show.rb +13 -16
- data/lib/guard/deprecated_methods.rb +6 -10
- data/lib/guard/deprecator.rb +52 -37
- data/lib/guard/dsl.rb +55 -33
- data/lib/guard/dsl_describer.rb +83 -31
- data/lib/guard/dsl_describer.rb.orig +184 -0
- data/lib/guard/group.rb +7 -6
- data/lib/guard/guard.rb +4 -4
- data/lib/guard/guard.rb.orig +42 -0
- data/lib/guard/guardfile.rb +12 -13
- data/lib/guard/guardfile/evaluator.rb +77 -55
- data/lib/guard/guardfile/evaluator.rb.orig +275 -0
- data/lib/guard/guardfile/generator.rb +25 -20
- data/lib/guard/interactor.rb +52 -293
- data/lib/guard/interactor.rb.orig +85 -0
- data/lib/guard/jobs/base.rb +21 -0
- data/lib/guard/jobs/pry_wrapper.rb +290 -0
- data/lib/guard/jobs/pry_wrapper.rb.orig +293 -0
- data/lib/guard/jobs/sleep.rb +25 -0
- data/lib/guard/notifier.rb +42 -39
- data/lib/guard/notifiers/base.rb +25 -24
- data/lib/guard/notifiers/emacs.rb +30 -24
- data/lib/guard/notifiers/file_notifier.rb +3 -7
- data/lib/guard/notifiers/gntp.rb +22 -22
- data/lib/guard/notifiers/growl.rb +16 -15
- data/lib/guard/notifiers/libnotify.rb +7 -10
- data/lib/guard/notifiers/notifysend.rb +15 -14
- data/lib/guard/notifiers/rb_notifu.rb +8 -10
- data/lib/guard/notifiers/terminal_notifier.rb +15 -11
- data/lib/guard/notifiers/terminal_title.rb +4 -8
- data/lib/guard/notifiers/tmux.rb +104 -71
- data/lib/guard/options.rb +1 -5
- data/lib/guard/plugin.rb +1 -3
- data/lib/guard/plugin/base.rb +12 -9
- data/lib/guard/plugin/hooker.rb +1 -5
- data/lib/guard/plugin_util.rb +46 -25
- data/lib/guard/plugin_util.rb.orig +178 -0
- data/lib/guard/rake_task.rb +4 -7
- data/lib/guard/reevaluator.rb +13 -0
- data/lib/guard/runner.rb +50 -78
- data/lib/guard/runner.rb.orig +200 -0
- data/lib/guard/setuper.rb +199 -130
- data/lib/guard/setuper.rb.orig +348 -0
- data/lib/guard/sheller.rb +107 -0
- data/lib/guard/tags +367 -0
- data/lib/guard/ui.rb +50 -38
- data/lib/guard/ui.rb.orig +254 -0
- data/lib/guard/ui/colors.rb +17 -21
- data/lib/guard/version.rb +1 -1
- data/lib/guard/version.rb.orig +3 -0
- data/lib/guard/watcher.rb +49 -62
- metadata +21 -4
- data/lib/guard/notifiers/growl_notify.rb +0 -93
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f713c5e30ef7f2814a804f5fafdb58979caa6619
|
|
4
|
+
data.tar.gz: ce94c3678722ee2d4d6ddfca527d5d598fffa069
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3fdcb3cad5b86d6b36d570c4c534742ad9613e164c660c6de608a38771afd5f776a6cbc2e2a81bbc43330058175a9ee73c86a8b76766cdb6918df3b60f434cc2
|
|
7
|
+
data.tar.gz: 9ff385cce046e434c8a2b577915e58453793dce6b6aa08fccc20bf293421ba862872d7df0c80e37737c5e7bceed972ea4e26c87c11c2f2a80086c6c95a01fc8c
|
data/README.md
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
+
### :warning: Guard is [looking for new maintainers](https://groups.google.com/forum/#!topic/guard-dev/2Td0QTvTIsE). Please [contact me](mailto:thibaud@thibaud.gg) if you're interested.
|
|
2
|
+
|
|
1
3
|
Guard
|
|
2
4
|
=====
|
|
3
5
|
|
|
4
|
-
[](http://badge.fury.io/rb/guard) [](https://travis-ci.org/guard/guard) [](https://gemnasium.com/guard/guard) [](https://codeclimate.com/github/guard/guard) [](https://coveralls.io/r/guard/guard) [](http://badge.fury.io/rb/guard) [](https://travis-ci.org/guard/guard) [](https://gemnasium.com/guard/guard) [](https://codeclimate.com/github/guard/guard) [](https://coveralls.io/r/guard/guard) [](http://inch-ci.org/github/guard/guard)
|
|
5
7
|
|
|
6
8
|
<img src="http://cl.ly/image/1k3o1r2Z3a0J/guard-Icon.png" alt="Guard Icon" align="right" />
|
|
7
9
|
Guard is a command line tool to easily handle events on file system modifications.
|
|
8
10
|
|
|
9
|
-
|
|
11
|
+
Guard has many very handy features, so read this document through at least once
|
|
12
|
+
to be aware of them - or you'll likely miss out on really cool ideas and tricks.
|
|
13
|
+
|
|
14
|
+
Also, by reading through you'll likely avoid common and time-consuming problems which Guard simply can't automatically solve.
|
|
15
|
+
|
|
16
|
+
If you have
|
|
10
17
|
any questions about the Guard usage or want to share some information with the Guard community, please go to one of
|
|
11
18
|
the following places:
|
|
12
19
|
|
|
@@ -65,11 +72,31 @@ Run Guard through Bundler with:
|
|
|
65
72
|
$ bundle exec guard
|
|
66
73
|
```
|
|
67
74
|
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
If you are on Mac OS X and have problems with either Guard not reacting to file
|
|
76
|
+
changes or Pry behaving strange, then you should [add proper Readline support
|
|
77
|
+
to Ruby on Mac OS
|
|
78
|
+
X](https://github.com/guard/guard/wiki/Add-Readline-support-to-Ruby-on-Mac-OS-X).
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
#### Avoiding gem/dependency problems
|
|
82
|
+
|
|
83
|
+
**It's important that you always run Guard through Bundler to avoid errors.**
|
|
84
|
+
|
|
85
|
+
If you're getting sick of typing `bundle exec` all the time, try one of the following:
|
|
86
|
+
|
|
87
|
+
* (Recommended) Running `bundle binstub guard` will create `bin/guard` in your
|
|
88
|
+
project, which means running `bin/guard` (tab completion will save you a key
|
|
89
|
+
stroke or two) will have the exact same result as `bundle exec guard`
|
|
90
|
+
|
|
91
|
+
* Or, for RubyGems >= 2.2.0 (at least, though the more recent the better),
|
|
92
|
+
simply set the `RUBYGEMS_GEMDEPS` environment variable to `-` (for autodetecting
|
|
93
|
+
the Gemfile in the current or parent directories) or set it to the path of your Gemfile.
|
|
70
94
|
|
|
71
|
-
|
|
72
|
-
|
|
95
|
+
(To upgrade RubyGems from RVM, use the `rvm rubygems` command).
|
|
96
|
+
|
|
97
|
+
*NOTE: this Rubygems feature is still under development still lacks many features of bundler*
|
|
98
|
+
|
|
99
|
+
* Or, for RubyGems < 2.2.0 check out the [Rubygems Bundler](https://github.com/mpapis/rubygems-bundler).
|
|
73
100
|
|
|
74
101
|
#### Add Guard plugins
|
|
75
102
|
|
|
@@ -210,8 +237,8 @@ $ bundle exec guard -P plugin_name another_plugin_name # shortcut
|
|
|
210
237
|
|
|
211
238
|
#### `-d`/`--debug` option
|
|
212
239
|
|
|
213
|
-
Guard can display debug information
|
|
214
|
-
developers with:
|
|
240
|
+
Guard can display debug information (useful for plugin
|
|
241
|
+
developers) with:
|
|
215
242
|
|
|
216
243
|
```bash
|
|
217
244
|
$ bundle exec guard --debug
|
|
@@ -223,10 +250,18 @@ $ bundle exec guard -d # shortcut
|
|
|
223
250
|
Guard can watch any number of directories instead of only the current directory:
|
|
224
251
|
|
|
225
252
|
```bash
|
|
226
|
-
$ bundle exec guard --watchdir
|
|
227
|
-
$ bundle exec guard -w
|
|
228
|
-
$ bundle exec guard -w
|
|
253
|
+
$ bundle exec guard --watchdir source/files # watch a subdirectory of your project
|
|
254
|
+
$ bundle exec guard -w source/files # shortcut
|
|
255
|
+
$ bundle exec guard -w sources/foo assets/foo ./config # multiple directories
|
|
256
|
+
|
|
257
|
+
$ bundle exec guard -w /fancy/project # path outside project - watch out! (see below)
|
|
229
258
|
```
|
|
259
|
+
*NOTE: this option is only meant for ignoring subdirectories in the CURRENT
|
|
260
|
+
directory - by selecting which ones to actually track.*
|
|
261
|
+
|
|
262
|
+
If your watched directories are outside the current one, or if `--watchdirs` isn't working
|
|
263
|
+
as you expect, be sure to read: [Correctly using watchdirs](https://github.com/guard/guard/wiki/Correctly-using-the---watchdir-option)
|
|
264
|
+
|
|
230
265
|
|
|
231
266
|
#### `-G`/`--guardfile` option
|
|
232
267
|
|
|
@@ -236,6 +271,7 @@ Guard can use a `Guardfile` not located in the current directory:
|
|
|
236
271
|
$ bundle exec guard --guardfile ~/.your_global_guardfile
|
|
237
272
|
$ bundle exec guard -G ~/.your_global_guardfile # shortcut
|
|
238
273
|
```
|
|
274
|
+
*TIP: set `BUNDLER_GEMFILE` environment variable to point to your Gemfile if it isn't in the current directory or the current Gemfile doesn't include all your favorite plugins*
|
|
239
275
|
|
|
240
276
|
#### `-i`/`--no-interactions` option
|
|
241
277
|
|
|
@@ -259,6 +295,8 @@ $ bundle exec guard start --no-bundler-warning
|
|
|
259
295
|
|
|
260
296
|
Turn on deprecation warnings.
|
|
261
297
|
|
|
298
|
+
*NOTE: They are OFF by default (see: [#298](https://github.com/guard/guard/issues/298))*
|
|
299
|
+
|
|
262
300
|
#### `-l`/`--latency` option
|
|
263
301
|
|
|
264
302
|
Overwrite Listen's default latency, useful when your hard-drive / system is slow.
|
|
@@ -268,6 +306,13 @@ $ bundle exec guard start -l 1.5
|
|
|
268
306
|
$ bundle exec guard start --latency 1.5
|
|
269
307
|
```
|
|
270
308
|
|
|
309
|
+
*NOTE: this option is OS specific: while higher values may reduce CPU usage
|
|
310
|
+
(and lower values may increase responsiveness) when in polling mode , it has no
|
|
311
|
+
effect for optimized backends (except on Mac OS). If guard is not behaving as
|
|
312
|
+
you want, you'll likely instead want to tweak the `--wait-for-delay` option
|
|
313
|
+
below or use the `--watchdirs` option.*
|
|
314
|
+
|
|
315
|
+
|
|
271
316
|
#### `-p`/`--force-polling` option
|
|
272
317
|
|
|
273
318
|
Force Listen polling listener usage.
|
|
@@ -279,7 +324,8 @@ $ bundle exec guard start --force-polling
|
|
|
279
324
|
|
|
280
325
|
#### `-y`/`--wait-for-delay` option
|
|
281
326
|
|
|
282
|
-
Overwrite Listen's default wait_for_delay, useful for kate-like editors through
|
|
327
|
+
Overwrite Listen's default wait_for_delay, useful for kate-like editors through
|
|
328
|
+
ssh access or when guard is annoyingly running tasks multiple times.
|
|
283
329
|
|
|
284
330
|
```bash
|
|
285
331
|
$ bundle exec guard start -y 1
|
|
@@ -498,8 +544,14 @@ guard :shell do
|
|
|
498
544
|
end
|
|
499
545
|
```
|
|
500
546
|
|
|
501
|
-
|
|
502
|
-
|
|
547
|
+
*NOTE: Normally, most plugins expect the block to return a path or array of
|
|
548
|
+
paths - i.e. other plugins would think the `git status` output here is a
|
|
549
|
+
file path (which would cause an error), so this trick of returning the command
|
|
550
|
+
output only works for `guard-shell` plugin and other plugins that support
|
|
551
|
+
arbitrary results.*
|
|
552
|
+
|
|
553
|
+
You can also define `watch`es outside of a `guard` plugin. This is useful to
|
|
554
|
+
perform arbitrary Ruby logic (i.e. something project-specific).
|
|
503
555
|
|
|
504
556
|
```ruby
|
|
505
557
|
watch(/.*/) { |m| puts "#{m[0]} changed." }
|
|
@@ -554,7 +606,7 @@ $ bundle exec guard -g specs
|
|
|
554
606
|
|
|
555
607
|
Plugins that don't belong to a group are part of the `default` group.
|
|
556
608
|
|
|
557
|
-
Another neat use of groups is to group
|
|
609
|
+
Another neat use of groups is to group dependent plugins and stop processing if one fails. In order
|
|
558
610
|
to make this work, the group needs to have the `halt_on_fail` option enabled and the Guard plugin
|
|
559
611
|
needs to throw `:task_has_failed` to indicate that the action was not successful.
|
|
560
612
|
|
|
@@ -616,7 +668,6 @@ Each notifier has a slightly different set of supported options:
|
|
|
616
668
|
```ruby
|
|
617
669
|
notification :growl, sticky: true, host: '192.168.1.5', password: 'secret'
|
|
618
670
|
notification :gntp, sticky: true, host: '192.168.1.5', password: 'secret'
|
|
619
|
-
notification :growl_notify, sticky: true, priority: 0
|
|
620
671
|
notification :libnotify, timeout: 5, transient: true, append: false, urgency: :critical
|
|
621
672
|
notification :notifu, time: 5, nosound: true, xp: true
|
|
622
673
|
notification :emacs
|
|
@@ -673,6 +724,8 @@ This comes in handy when you have large amounts of non-source data in you projec
|
|
|
673
724
|
[`.rbx`, `.bundle`, `.DS_Store`, `.git`, `.hg` ,`.svn`, `bundle`, `log`, `tmp`, `vendor/bundle`](https://github.com/guard/listen/blob/master/lib/listen/silencer.rb#L5-L9)
|
|
674
725
|
are ignored.
|
|
675
726
|
|
|
727
|
+
*NOTE: this option mostly helps when irrelevant changes are triggering guard tasks (e.g. a task starts before the editor finished saving all the files). Also, while it can reduce CPU time and increase responsiveness when using polling, instead, using `--watchdirs` is recommended for such "tuning" (e.g. large projects)*
|
|
728
|
+
|
|
676
729
|
Please note that method only accept regexps. See [Listen README](https://github.com/guard/listen#ignore--ignore).
|
|
677
730
|
|
|
678
731
|
To append to the default ignored files and directories, use the `ignore` method:
|
|
@@ -723,51 +776,13 @@ either an IO stream or a filename.
|
|
|
723
776
|
Issues
|
|
724
777
|
------
|
|
725
778
|
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
#### File an issue
|
|
729
|
-
|
|
730
|
-
You can report bugs and feature requests to [GitHub Issues](https://github.com/guard/guard/issues).
|
|
731
|
-
|
|
732
|
-
**Please don't ask question in the issue tracker**, instead ask them at one of our other places:
|
|
733
|
-
|
|
734
|
-
* [Google+ community](https://plus.google.com/u/1/communities/110022199336250745477)
|
|
735
|
-
* [Google group](http://groups.google.com/group/guard-dev)
|
|
736
|
-
* [StackOverflow](http://stackoverflow.com/questions/tagged/guard)
|
|
737
|
-
* IRC channel `#guard` (irc.freenode.net) for chatting
|
|
738
|
-
|
|
739
|
-
Try to figure out where the issue belongs to: Is it an issue with Guard itself or with a Guard plugin you're
|
|
740
|
-
using?
|
|
741
|
-
|
|
742
|
-
When you file a bug, please try to follow these simple rules if applicable:
|
|
743
|
-
|
|
744
|
-
* Make sure you've read the README carefully.
|
|
745
|
-
* Make sure you run Guard with `bundle exec` first.
|
|
746
|
-
* Add debug information to the issue by running Guard with the `--debug` option.
|
|
747
|
-
* Add your `Guardfile` and `Gemfile` to the issue.
|
|
748
|
-
* Provide information about your environment:
|
|
749
|
-
* Your current versions of your OS, Ruby, Rubygems and Bundler.
|
|
750
|
-
* Shared project folder with services like Dropbox, NFS, etc.
|
|
751
|
-
* Make sure that the issue is reproducible with your description.
|
|
752
|
-
|
|
753
|
-
**It's most likely that your bug gets resolved faster if you provide as much information as possible!**
|
|
754
|
-
|
|
755
|
-
Development
|
|
756
|
-
-----------
|
|
757
|
-
|
|
758
|
-
* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/guard/master/frames).
|
|
759
|
-
* Source hosted at [GitHub](https://github.com/guard/guard).
|
|
779
|
+
Before reporting a problem, please read how to [File an issue](https://github.com/guard/guard/blob/master/CONTRIBUTING.md#file-an-issue).
|
|
760
780
|
|
|
761
|
-
|
|
781
|
+
Development / Contributing
|
|
782
|
+
--------------------------
|
|
762
783
|
|
|
763
|
-
|
|
764
|
-
* Make sure your patches are well tested. All specs must pass on [Travis CI](https://travis-ci.org/guard/guard).
|
|
765
|
-
* Update the [Yard](http://yardoc.org/) documentation.
|
|
766
|
-
* Update the [README](https://github.com/guard/guard/blob/master/README.md).
|
|
767
|
-
* Please **do not change** the version number.
|
|
784
|
+
See the [Contributing Guide](https://github.com/guard/guard/blob/master/CONTRIBUTING.md#development).
|
|
768
785
|
|
|
769
|
-
For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on
|
|
770
|
-
`#guard` (irc.freenode.net).
|
|
771
786
|
|
|
772
787
|
#### Open Commit Bit
|
|
773
788
|
|
data/bin/guard
CHANGED
data/lib/guard.rb
CHANGED
|
@@ -1,33 +1,41 @@
|
|
|
1
|
-
require
|
|
2
|
-
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
7
|
-
require
|
|
8
|
-
require
|
|
9
|
-
require
|
|
10
|
-
require
|
|
11
|
-
require
|
|
12
|
-
require
|
|
13
|
-
require
|
|
14
|
-
require
|
|
15
|
-
require
|
|
1
|
+
require "rbconfig"
|
|
2
|
+
|
|
3
|
+
require "guard/commander"
|
|
4
|
+
require "guard/deprecated_methods"
|
|
5
|
+
require "guard/deprecator"
|
|
6
|
+
require "guard/dsl"
|
|
7
|
+
require "guard/group"
|
|
8
|
+
require "guard/guardfile"
|
|
9
|
+
require "guard/interactor"
|
|
10
|
+
require "guard/notifier"
|
|
11
|
+
require "guard/plugin_util"
|
|
12
|
+
require "guard/runner"
|
|
13
|
+
require "guard/setuper"
|
|
14
|
+
require "guard/sheller"
|
|
15
|
+
require "guard/ui"
|
|
16
|
+
require "guard/watcher"
|
|
17
|
+
require "guard/reevaluator"
|
|
16
18
|
|
|
17
19
|
# Guard is the main module for all Guard related modules and classes.
|
|
18
20
|
# Also Guard plugins should use this namespace.
|
|
19
21
|
#
|
|
20
22
|
module Guard
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
DEV_NULL = WINDOWS ? 'NUL' : '/dev/null'
|
|
23
|
+
WINDOWS = RbConfig::CONFIG["host_os"] =~ /(?:msdos|mswin|djgpp|mingw)/
|
|
24
|
+
DEV_NULL = WINDOWS ? "NUL" : "/dev/null"
|
|
24
25
|
|
|
25
26
|
extend Commander
|
|
26
27
|
extend DeprecatedMethods
|
|
27
28
|
extend Setuper
|
|
28
29
|
|
|
29
30
|
class << self
|
|
30
|
-
attr_accessor :runner, :listener, :lock, :
|
|
31
|
+
attr_accessor :runner, :listener, :lock, :running
|
|
32
|
+
|
|
33
|
+
# Called by Pry scope command
|
|
34
|
+
attr_reader :scope
|
|
35
|
+
|
|
36
|
+
def scope=(new_scope)
|
|
37
|
+
@scope = new_scope
|
|
38
|
+
end
|
|
31
39
|
|
|
32
40
|
# Smart accessor for retrieving specific plugins at once.
|
|
33
41
|
#
|
|
@@ -45,8 +53,9 @@ module Guard
|
|
|
45
53
|
# @example Filter plugins by Hash
|
|
46
54
|
# Guard.plugins(name: 'rspec', group: 'backend')
|
|
47
55
|
#
|
|
48
|
-
# @param [String, Symbol, Regexp, Hash] filter the filter to apply to the
|
|
49
|
-
#
|
|
56
|
+
# @param [String, Symbol, Regexp, Hash] filter the filter to apply to the
|
|
57
|
+
# plugins
|
|
58
|
+
# @return [Plugin, Array<Plugin>] the filtered plugin(s)
|
|
50
59
|
#
|
|
51
60
|
def plugins(filter = nil)
|
|
52
61
|
@plugins ||= []
|
|
@@ -54,26 +63,26 @@ module Guard
|
|
|
54
63
|
return @plugins if filter.nil?
|
|
55
64
|
|
|
56
65
|
filtered_plugins = case filter
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
when String, Symbol
|
|
67
|
+
@plugins.select do |plugin|
|
|
68
|
+
plugin.name == filter.to_s.downcase.gsub("-", "")
|
|
69
|
+
end
|
|
70
|
+
when Regexp
|
|
71
|
+
@plugins.select do |plugin|
|
|
72
|
+
plugin.name =~ filter
|
|
73
|
+
end
|
|
74
|
+
when Hash
|
|
75
|
+
@plugins.select do |plugin|
|
|
76
|
+
filter.all? do |k, v|
|
|
77
|
+
case k
|
|
78
|
+
when :name
|
|
79
|
+
plugin.name == v.to_s.downcase.gsub("-", "")
|
|
80
|
+
when :group
|
|
81
|
+
plugin.group.name == v.to_sym
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
end
|
|
77
86
|
|
|
78
87
|
filtered_plugins
|
|
79
88
|
end
|
|
@@ -94,8 +103,8 @@ module Guard
|
|
|
94
103
|
# @example Find a plugin by Hash
|
|
95
104
|
# Guard.plugin(name: 'rspec', group: 'backend')
|
|
96
105
|
#
|
|
97
|
-
# @param [String, Symbol, Regexp, Hash] filter the filter for finding the
|
|
98
|
-
# the Guard plugin
|
|
106
|
+
# @param [String, Symbol, Regexp, Hash] filter the filter for finding the
|
|
107
|
+
# plugin the Guard plugin
|
|
99
108
|
# @return [Plugin, nil] the plugin found, nil otherwise
|
|
100
109
|
#
|
|
101
110
|
def plugin(filter)
|
|
@@ -123,14 +132,12 @@ module Guard
|
|
|
123
132
|
|
|
124
133
|
return @groups if filter.nil?
|
|
125
134
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
filtered_groups
|
|
135
|
+
case filter
|
|
136
|
+
when String, Symbol
|
|
137
|
+
@groups.select { |group| group.name == filter.to_sym }
|
|
138
|
+
when Regexp
|
|
139
|
+
@groups.select { |group| group.name.to_s =~ filter }
|
|
140
|
+
end
|
|
134
141
|
end
|
|
135
142
|
|
|
136
143
|
# Smart accessor for retrieving a specific group.
|
|
@@ -156,18 +163,17 @@ module Guard
|
|
|
156
163
|
# Add a Guard plugin to use.
|
|
157
164
|
#
|
|
158
165
|
# @param [String] name the Guard name
|
|
159
|
-
# @param [Hash] options the plugin options (see
|
|
160
|
-
# @option options [String] group the group to which the
|
|
166
|
+
# @param [Hash] options the plugin options (see Plugin documentation)
|
|
167
|
+
# @option options [String] group the group to which the plugin belongs
|
|
161
168
|
# @option options [Array<Watcher>] watchers the list of declared watchers
|
|
162
169
|
# @option options [Array<Hash>] callbacks the list of callbacks
|
|
163
170
|
# @return [Plugin] the added Guard plugin
|
|
164
171
|
# @see Plugin
|
|
165
172
|
#
|
|
166
173
|
def add_plugin(name, options = {})
|
|
167
|
-
|
|
168
|
-
@plugins <<
|
|
169
|
-
|
|
170
|
-
plugin_instance
|
|
174
|
+
instance = ::Guard::PluginUtil.new(name).initialize_plugin(options)
|
|
175
|
+
@plugins << instance
|
|
176
|
+
instance
|
|
171
177
|
end
|
|
172
178
|
|
|
173
179
|
# Add a Guard plugin group.
|
|
@@ -182,13 +188,12 @@ module Guard
|
|
|
182
188
|
# @see Group
|
|
183
189
|
#
|
|
184
190
|
def add_group(name, options = {})
|
|
185
|
-
unless group = group(name)
|
|
191
|
+
unless (group = group(name))
|
|
186
192
|
group = ::Guard::Group.new(name, options)
|
|
187
193
|
@groups << group
|
|
188
194
|
end
|
|
189
195
|
|
|
190
196
|
group
|
|
191
197
|
end
|
|
192
|
-
|
|
193
198
|
end
|
|
194
199
|
end
|
data/lib/guard/cli.rb
CHANGED
|
@@ -1,122 +1,121 @@
|
|
|
1
|
-
require
|
|
1
|
+
require "thor"
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
5
|
-
require
|
|
6
|
-
require
|
|
3
|
+
require "guard"
|
|
4
|
+
require "guard/version"
|
|
5
|
+
require "guard/dsl_describer"
|
|
6
|
+
require "guard/guardfile"
|
|
7
7
|
|
|
8
8
|
module Guard
|
|
9
|
-
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
#
|
|
9
|
+
# Facade for the Guard command line interface managed by
|
|
10
|
+
# [Thor](https://github.com/wycats/thor).
|
|
11
|
+
#
|
|
12
|
+
# This is the main interface to Guard that is called by the Guard binary
|
|
13
|
+
# `bin/guard`. Do not put any logic in here, create a class and delegate
|
|
14
|
+
# instead.
|
|
13
15
|
#
|
|
14
16
|
class CLI < Thor
|
|
15
|
-
|
|
16
17
|
default_task :start
|
|
17
18
|
|
|
18
|
-
desc
|
|
19
|
+
desc "start", "Starts Guard"
|
|
19
20
|
|
|
20
21
|
method_option :clear,
|
|
21
22
|
type: :boolean,
|
|
22
23
|
default: false,
|
|
23
|
-
aliases:
|
|
24
|
-
banner:
|
|
24
|
+
aliases: "-c",
|
|
25
|
+
banner: "Auto clear shell before each action"
|
|
25
26
|
|
|
26
27
|
method_option :notify,
|
|
27
28
|
type: :boolean,
|
|
28
29
|
default: true,
|
|
29
|
-
aliases:
|
|
30
|
-
banner:
|
|
30
|
+
aliases: "-n",
|
|
31
|
+
banner: "Notifications feature"
|
|
31
32
|
|
|
32
33
|
method_option :debug,
|
|
33
34
|
type: :boolean,
|
|
34
35
|
default: false,
|
|
35
|
-
aliases:
|
|
36
|
-
banner:
|
|
36
|
+
aliases: "-d",
|
|
37
|
+
banner: "Show debug information"
|
|
37
38
|
|
|
38
39
|
method_option :group,
|
|
39
40
|
type: :array,
|
|
40
41
|
default: [],
|
|
41
|
-
aliases:
|
|
42
|
-
banner:
|
|
42
|
+
aliases: "-g",
|
|
43
|
+
banner: "Run only the passed groups"
|
|
43
44
|
|
|
44
45
|
method_option :plugin,
|
|
45
46
|
type: :array,
|
|
46
47
|
default: [],
|
|
47
|
-
aliases:
|
|
48
|
-
banner:
|
|
48
|
+
aliases: "-P",
|
|
49
|
+
banner: "Run only the passed plugins"
|
|
49
50
|
|
|
50
51
|
method_option :watchdir,
|
|
51
52
|
type: :array,
|
|
52
|
-
aliases:
|
|
53
|
-
banner:
|
|
53
|
+
aliases: "-w",
|
|
54
|
+
banner: "Specify the directories to watch"
|
|
54
55
|
|
|
55
56
|
method_option :guardfile,
|
|
56
57
|
type: :string,
|
|
57
|
-
aliases:
|
|
58
|
-
banner:
|
|
58
|
+
aliases: "-G",
|
|
59
|
+
banner: "Specify a Guardfile"
|
|
59
60
|
|
|
60
61
|
method_option :no_interactions,
|
|
61
62
|
type: :boolean,
|
|
62
63
|
default: false,
|
|
63
|
-
aliases:
|
|
64
|
-
banner:
|
|
64
|
+
aliases: "-i",
|
|
65
|
+
banner: "Turn off completely any Guard terminal interactions"
|
|
65
66
|
|
|
66
67
|
method_option :no_bundler_warning,
|
|
67
68
|
type: :boolean,
|
|
68
69
|
default: false,
|
|
69
|
-
aliases:
|
|
70
|
-
banner:
|
|
70
|
+
aliases: "-B",
|
|
71
|
+
banner: "Turn off warning when Bundler is not present"
|
|
71
72
|
|
|
72
73
|
method_option :show_deprecations,
|
|
73
74
|
type: :boolean,
|
|
74
75
|
default: false,
|
|
75
|
-
banner:
|
|
76
|
+
banner: "Turn on deprecation warnings"
|
|
76
77
|
|
|
77
78
|
# Listen options
|
|
78
79
|
method_option :latency,
|
|
79
80
|
type: :numeric,
|
|
80
|
-
aliases:
|
|
81
|
+
aliases: "-l",
|
|
81
82
|
banner: 'Overwrite Listen\'s default latency'
|
|
82
83
|
|
|
83
84
|
method_option :force_polling,
|
|
84
85
|
type: :boolean,
|
|
85
86
|
default: false,
|
|
86
|
-
aliases:
|
|
87
|
-
banner:
|
|
87
|
+
aliases: "-p",
|
|
88
|
+
banner: "Force usage of the Listen polling listener"
|
|
88
89
|
|
|
89
90
|
method_option :wait_for_delay,
|
|
90
91
|
type: :numeric,
|
|
91
|
-
aliases:
|
|
92
|
+
aliases: "-y",
|
|
92
93
|
banner: 'Overwrite Listen\'s default wait_for_delay'
|
|
93
94
|
|
|
94
95
|
method_option :listen_on,
|
|
95
96
|
type: :string,
|
|
96
|
-
aliases:
|
|
97
|
+
aliases: "-o",
|
|
97
98
|
default: false,
|
|
98
|
-
banner:
|
|
99
|
+
banner: "Specify a network address to Listen on for "\
|
|
100
|
+
"file change events (e.g. for use in VMs)"
|
|
99
101
|
|
|
100
|
-
# Start Guard by initializing the defined Guard plugins and watch the file
|
|
101
|
-
#
|
|
102
|
+
# Start Guard by initializing the defined Guard plugins and watch the file
|
|
103
|
+
# system.
|
|
104
|
+
#
|
|
105
|
+
# This is the default task, so calling `guard` is the same as calling
|
|
106
|
+
# `guard start`.
|
|
102
107
|
#
|
|
103
108
|
# @see Guard.start
|
|
104
109
|
#
|
|
105
110
|
def start
|
|
106
111
|
_verify_bundler_presence unless options[:no_bundler_warning]
|
|
107
112
|
::Guard.start(options)
|
|
108
|
-
|
|
109
|
-
return if ENV['GUARD_ENV'] == 'test'
|
|
110
|
-
|
|
111
|
-
while ::Guard.running do
|
|
112
|
-
sleep 0.5
|
|
113
|
-
end
|
|
114
113
|
end
|
|
115
114
|
|
|
116
|
-
desc
|
|
115
|
+
desc "list", "Lists Guard plugins that can be used with init"
|
|
117
116
|
|
|
118
|
-
# List the Guard plugins that are available for use in your system and
|
|
119
|
-
# those that are currently used in your `Guardfile`.
|
|
117
|
+
# List the Guard plugins that are available for use in your system and
|
|
118
|
+
# marks those that are currently used in your `Guardfile`.
|
|
120
119
|
#
|
|
121
120
|
# @see Guard::DslDescriber.list
|
|
122
121
|
#
|
|
@@ -124,7 +123,7 @@ module Guard
|
|
|
124
123
|
::Guard::DslDescriber.new(options).list
|
|
125
124
|
end
|
|
126
125
|
|
|
127
|
-
desc
|
|
126
|
+
desc "notifiers", "Lists notifiers and its options"
|
|
128
127
|
|
|
129
128
|
# List the Notifiers for use in your system.
|
|
130
129
|
#
|
|
@@ -134,7 +133,7 @@ module Guard
|
|
|
134
133
|
::Guard::DslDescriber.new(options).notifiers
|
|
135
134
|
end
|
|
136
135
|
|
|
137
|
-
desc
|
|
136
|
+
desc "version", "Show the Guard version"
|
|
138
137
|
map %w(-v --version) => :version
|
|
139
138
|
|
|
140
139
|
# Shows the current version of Guard.
|
|
@@ -142,16 +141,19 @@ module Guard
|
|
|
142
141
|
# @see Guard::VERSION
|
|
143
142
|
#
|
|
144
143
|
def version
|
|
145
|
-
puts "Guard version #{ ::Guard::VERSION }"
|
|
144
|
+
STDOUT.puts "Guard version #{ ::Guard::VERSION }"
|
|
146
145
|
end
|
|
147
146
|
|
|
148
|
-
desc
|
|
147
|
+
desc "init [GUARDS]", "Generates a Guardfile at the current directory"\
|
|
148
|
+
" (if it is not already there) and adds all installed Guard plugins"\
|
|
149
|
+
" or the given GUARDS into it"
|
|
149
150
|
|
|
150
151
|
method_option :bare,
|
|
151
152
|
type: :boolean,
|
|
152
153
|
default: false,
|
|
153
|
-
aliases:
|
|
154
|
-
banner:
|
|
154
|
+
aliases: "-b",
|
|
155
|
+
banner: "Generate a bare Guardfile without adding any"\
|
|
156
|
+
" installed plugin into it"
|
|
155
157
|
|
|
156
158
|
# Initializes the templates of all installed Guard plugins and adds them
|
|
157
159
|
# to the `Guardfile` when no Guard name is passed. When passing
|
|
@@ -160,10 +162,14 @@ module Guard
|
|
|
160
162
|
# @see Guard::Guardfile.initialize_template
|
|
161
163
|
# @see Guard::Guardfile.initialize_all_templates
|
|
162
164
|
#
|
|
163
|
-
# @param [Array<String>] plugin_names the name of the Guard plugins to
|
|
165
|
+
# @param [Array<String>] plugin_names the name of the Guard plugins to
|
|
166
|
+
# initialize
|
|
164
167
|
#
|
|
165
168
|
def init(*plugin_names)
|
|
166
|
-
_verify_bundler_presence
|
|
169
|
+
_verify_bundler_presence unless options[:no_bundler_warning]
|
|
170
|
+
|
|
171
|
+
::Guard.reset_options(options) # Since UI.deprecated uses config
|
|
172
|
+
::Guard.reset_evaluator(options) # for initialize_all_templates
|
|
167
173
|
|
|
168
174
|
::Guard::Guardfile.create_guardfile(abort_on_existence: options[:bare])
|
|
169
175
|
|
|
@@ -178,7 +184,7 @@ module Guard
|
|
|
178
184
|
end
|
|
179
185
|
end
|
|
180
186
|
|
|
181
|
-
desc
|
|
187
|
+
desc "show", "Show all defined Guard plugins and their options"
|
|
182
188
|
map %w(-T) => :show
|
|
183
189
|
|
|
184
190
|
# Shows all Guard plugins and their options that are defined in
|
|
@@ -196,8 +202,10 @@ module Guard
|
|
|
196
202
|
# shows a hint to do so if not.
|
|
197
203
|
#
|
|
198
204
|
def _verify_bundler_presence
|
|
199
|
-
|
|
200
|
-
|
|
205
|
+
return unless File.exist?("Gemfile")
|
|
206
|
+
return if ENV["BUNDLE_GEMFILE"] || ENV["RUBYGEMS_GEMDEPS"]
|
|
207
|
+
|
|
208
|
+
::Guard::UI.info <<EOF
|
|
201
209
|
|
|
202
210
|
Guard here! It looks like your project has a Gemfile, yet you are running
|
|
203
211
|
`guard` outside of Bundler. If this is your intent, feel free to ignore this
|
|
@@ -205,8 +213,6 @@ message. Otherwise, consider using `bundle exec guard` to ensure your
|
|
|
205
213
|
dependencies are loaded correctly.
|
|
206
214
|
(You can run `guard` with --no-bundler-warning to get rid of this message.)
|
|
207
215
|
EOF
|
|
208
|
-
end
|
|
209
216
|
end
|
|
210
|
-
|
|
211
217
|
end
|
|
212
218
|
end
|