guard 1.1.0.alpha.2 → 1.1.0.beta
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.
- data/CHANGELOG.md +19 -0
- data/README.md +8 -78
- data/lib/guard.rb +2 -2
- data/lib/guard/cli.rb +2 -2
- data/lib/guard/guard.rb +23 -34
- data/lib/guard/notifiers/notifysend.rb +2 -1
- data/lib/guard/runner.rb +33 -26
- data/lib/guard/version.rb +1 -1
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
## 1.1.0 - Unreleased
|
2
|
+
|
3
|
+
### Improvements
|
4
|
+
|
5
|
+
- Listening is now handled by the [Listen gem](https://github.com/guard/listen).
|
6
|
+
- New `--latency`/`-l` option to overwrite Listen's default latency.
|
7
|
+
- New `--force-polling`/`-p` option to force usage of the Listen polling listener.
|
8
|
+
- `--watch-all-modifications`/`-A` option is removed and is now always on.
|
9
|
+
- `--no-vendor`/`-I` option is removed because the monitoring gems are now part of the [Listen gem](https://github.com/guard/listen). You can specify a custom version of any monitoring gem directly in your Gemfile if you want to overwrite Listen's default monitoring gems.
|
10
|
+
- Guards implementations must now implement `run_on_additions`, `run_on_modifications`, `run_on_removals` and / or `run_on_changes`. The `run_on_change` and `run_on_deletion` methods are deprecated and should be removed as soon as possible. See the [Upgrade guide for existing guards to Guard v1.1](https://github.com/guard/guard/wiki/Upgrade-guide-for-existing-guards-to-Guard-v1.1) for more info.
|
11
|
+
|
12
|
+
The Listen integration has been supervised by [@thibaudgg][] and executed by [@Maher4Ever][], [@rymai][] and [@thibaudgg][].
|
13
|
+
|
14
|
+
## 1.0.3 - 14 May, 2012
|
15
|
+
|
16
|
+
### Improvement
|
17
|
+
|
18
|
+
- Improve Thor dependency '~> 0.14.6' => '>= 0.14.6'. ([@thibaudgg][])
|
19
|
+
|
1
20
|
## 1.0.2 - 30 April, 2012
|
2
21
|
|
3
22
|
### Improvements
|
data/README.md
CHANGED
@@ -7,44 +7,9 @@ This document contains a lot of information, please take your time and read thes
|
|
7
7
|
any questions, ask them in our [Google group](http://groups.google.com/group/guard-dev) or on `#guard`
|
8
8
|
(irc.freenode.net).
|
9
9
|
|
10
|
-
Before you file an issue, make sure you have read the
|
10
|
+
Before you file an issue, make sure you have read the file an issue section that contains some
|
11
11
|
important information.
|
12
12
|
|
13
|
-
Contents
|
14
|
-
--------
|
15
|
-
|
16
|
-
* [Features](#features)
|
17
|
-
* [Screencast](#screencast)
|
18
|
-
* [Installation](#installation)
|
19
|
-
* [System notifications](#installation-system-notifications)
|
20
|
-
* [Add more Guards](#add-more-guards)
|
21
|
-
* [Usage](#usage)
|
22
|
-
* [Help](#usage-help)
|
23
|
-
* [Init](#usage-init)
|
24
|
-
* [Start](#usage-start)
|
25
|
-
* [List](#usage-list)
|
26
|
-
* [Show](#usage-show)
|
27
|
-
* [Interactions](#interactions)
|
28
|
-
* [Readline support](#interactions-readline-support)
|
29
|
-
* [Signals](#interactions-signal)
|
30
|
-
* [Guardfile DSL](#guardfile-dsl)
|
31
|
-
* [guard](#guardfile-dsl-guard)
|
32
|
-
* [watch](#guardfile-dsl-watch)
|
33
|
-
* [group](#guardfile-dsl-group)
|
34
|
-
* [notification](#guardfile-dsl-notification)
|
35
|
-
* [interactor](#guardfile-dsl-interactor)
|
36
|
-
* [callback](#guardfile-dsl-callback)
|
37
|
-
* [ignore](#guardfile-dsl-ignore)
|
38
|
-
* [filter](#guardfile-dsl-filter)
|
39
|
-
* [Example](#guardfile-dsl-example)
|
40
|
-
* [Shared configurations](#shared-configurations)
|
41
|
-
* [Advanced Linux system configuration](#advanced-linux-system-configuration)
|
42
|
-
* [Create a Guard](#create-a-guard)
|
43
|
-
* [Programmatic use of Guard](#programmatic-use-of-guard)
|
44
|
-
* [File an issue](#file-an-issue)
|
45
|
-
* [Development](#development)
|
46
|
-
|
47
|
-
<a name="features" />
|
48
13
|
Features
|
49
14
|
--------
|
50
15
|
|
@@ -53,14 +18,12 @@ Features
|
|
53
18
|
* Huge ([more than 120](https://rubygems.org/search?query=guard-)) guard extensions eco-system.
|
54
19
|
* Tested against Ruby 1.8.7, 1.9.2, 1.9.3, REE and the latest versions of JRuby & Rubinius.
|
55
20
|
|
56
|
-
<a name="screencast" />
|
57
21
|
Screencast
|
58
22
|
----------
|
59
23
|
|
60
24
|
Ryan Bates made an excellent [RailsCast about Guard](http://railscasts.com/episodes/264-guard) and you should definitely
|
61
25
|
watch it for a nice introduction to Guard.
|
62
26
|
|
63
|
-
<a name="installation" />
|
64
27
|
Installation
|
65
28
|
------------
|
66
29
|
|
@@ -98,7 +61,6 @@ end
|
|
98
61
|
**It's important that you always run Guard through Bundler to avoid errors.** If you're getting sick of typing `bundle exec` all
|
99
62
|
the time, try the [Rubygems Bundler](https://github.com/mpapis/rubygems-bundler).
|
100
63
|
|
101
|
-
<a name="installation-system-notifications" />
|
102
64
|
### System notifications
|
103
65
|
|
104
66
|
You can configure Guard to make use of the following system notification libraries, but it's strongly recommended
|
@@ -206,7 +168,6 @@ group :development do
|
|
206
168
|
end
|
207
169
|
```
|
208
170
|
|
209
|
-
<a name="add-more-guards" />
|
210
171
|
Add more Guards
|
211
172
|
---------------
|
212
173
|
|
@@ -225,13 +186,11 @@ end
|
|
225
186
|
See the init section of the Guard usage below to see how to install the supplied Guard template that you can install and
|
226
187
|
to suit your needs.
|
227
188
|
|
228
|
-
<a name="usage" />
|
229
189
|
Usage
|
230
190
|
-----
|
231
191
|
|
232
192
|
Guard is run from the command line. Please open your terminal and go to your project work directory.
|
233
193
|
|
234
|
-
<a name="usage-help" />
|
235
194
|
### Help
|
236
195
|
|
237
196
|
You can always get help on the available tasks with the `help` task:
|
@@ -247,7 +206,6 @@ For example, to get help for the `start` task, simply run:
|
|
247
206
|
$ guard help start
|
248
207
|
```
|
249
208
|
|
250
|
-
<a name="usage-init" />
|
251
209
|
### Init
|
252
210
|
|
253
211
|
You can generate a Guardfile and have all installed guards be automatically added into
|
@@ -285,7 +243,6 @@ $ guard init --bare
|
|
285
243
|
$ guard init -b # shortcut
|
286
244
|
```
|
287
245
|
|
288
|
-
<a name="usage-start" />
|
289
246
|
### Start
|
290
247
|
|
291
248
|
Just launch Guard inside your Ruby or Rails project with:
|
@@ -375,7 +332,7 @@ $ guard start --no-bundler-warning
|
|
375
332
|
|
376
333
|
#### `-l`/`--latency` option
|
377
334
|
|
378
|
-
Overwrite Listen default latency,
|
335
|
+
Overwrite Listen's default latency, useful when your hard-drive / system is slow.
|
379
336
|
|
380
337
|
```bash
|
381
338
|
$ guard start -l 1.5
|
@@ -391,7 +348,6 @@ $ guard start -p
|
|
391
348
|
$ guard start --force-polling
|
392
349
|
```
|
393
350
|
|
394
|
-
<a name="usage-list" />
|
395
351
|
### List
|
396
352
|
|
397
353
|
You can list the available Guards with the `list` task:
|
@@ -412,7 +368,6 @@ See also https://github.com/guard/guard/wiki/List-of-available-Guards
|
|
412
368
|
* denotes ones already in your Guardfile
|
413
369
|
```
|
414
370
|
|
415
|
-
<a name="usage-show" />
|
416
371
|
### Show
|
417
372
|
|
418
373
|
You can show the structure of the groups and their Guards with the `show` task:
|
@@ -433,7 +388,6 @@ Group frontend:
|
|
433
388
|
This shows the internal structure of the evaluated `Guardfile` or `.Guardfile`, with the `.guard.rb` file. You can
|
434
389
|
read more about these files in the shared configuration section below.
|
435
390
|
|
436
|
-
<a name="interactions" />
|
437
391
|
Interactions
|
438
392
|
------------
|
439
393
|
|
@@ -471,7 +425,6 @@ This will reload only the Ronn Guard. You can also reload all Guards within a gr
|
|
471
425
|
> backend reload
|
472
426
|
```
|
473
427
|
|
474
|
-
<a name="interactions-readline-support" />
|
475
428
|
### Readline support
|
476
429
|
|
477
430
|
With Readline enabled, you'll see a command prompt `>` when Guard is ready to accept a command. The command line
|
@@ -489,7 +442,6 @@ end
|
|
489
442
|
Guard will automatically enable Readline support if your environment supports it, but you can disable Readline with the
|
490
443
|
`interactor` DSL method or turn off completely with the `--no-interactions` option.
|
491
444
|
|
492
|
-
<a name="interactions-signal" />
|
493
445
|
### Signals
|
494
446
|
|
495
447
|
You can also interact with Guard by sending POSIX signals to the Guard process (all but Windows).
|
@@ -506,14 +458,12 @@ $ kill -USR1 <guard_pid>
|
|
506
458
|
$ kill -USR2 <guard_pid>
|
507
459
|
```
|
508
460
|
|
509
|
-
<a name="guardfile-dsl" />
|
510
461
|
Guardfile DSL
|
511
462
|
-------------
|
512
463
|
|
513
464
|
The Guardfile DSL is evaluated as plain Ruby, so you can use normal Ruby code in your `Guardfile`.
|
514
465
|
Guard itself provides the following DSL methods that can be used for configuration:
|
515
466
|
|
516
|
-
<a name="guardfile-dsl-guard" />
|
517
467
|
### guard
|
518
468
|
|
519
469
|
The `guard` method allows you to add a Guard to your toolchain and configure it by passing the
|
@@ -530,7 +480,6 @@ guard :coffeescript, :input => 'coffeescripts', :output => 'javascripts'
|
|
530
480
|
guard :coffeescript, :input => 'specs', :output => 'specs'
|
531
481
|
```
|
532
482
|
|
533
|
-
<a name="guardfile-dsl-watch" />
|
534
483
|
### watch
|
535
484
|
|
536
485
|
The `watch` method allows you to define which files are watched by a Guard:
|
@@ -576,7 +525,6 @@ guard :shell do
|
|
576
525
|
end
|
577
526
|
```
|
578
527
|
|
579
|
-
<a name="guardfile-dsl-group" />
|
580
528
|
### group
|
581
529
|
|
582
530
|
The `group` method allows you to group several Guards together. This comes in handy especially when you
|
@@ -604,7 +552,6 @@ $ guard -g specs
|
|
604
552
|
|
605
553
|
Guards that don't belong to a group are considered global and are always run.
|
606
554
|
|
607
|
-
<a name="guardfile-dsl-notification" />
|
608
555
|
### notification
|
609
556
|
|
610
557
|
If you don't specify any notification configuration in your `Guardfile`, Guard goes through the list of available
|
@@ -641,7 +588,6 @@ or using the cli switch `-n`:
|
|
641
588
|
notification :off
|
642
589
|
```
|
643
590
|
|
644
|
-
<a name="guardfile-dsl-interactor" />
|
645
591
|
### interactor
|
646
592
|
|
647
593
|
You can disable the interactor auto detection and for a specific implementation:
|
@@ -662,7 +608,6 @@ If you do not need the keyboard interactions with Guard at all, you can turn the
|
|
662
608
|
interactor :off
|
663
609
|
```
|
664
610
|
|
665
|
-
<a name="guardfile-dsl-callback" />
|
666
611
|
### callback
|
667
612
|
|
668
613
|
The `callback` method allows you to execute arbitrary code before or after any of the `start`, `stop`, `reload`,
|
@@ -679,7 +624,6 @@ end
|
|
679
624
|
Please see the [hooks and callbacks](https://github.com/guard/guard/wiki/Hooks-and-callbacks) page in the Guard wiki for
|
680
625
|
more details.
|
681
626
|
|
682
|
-
<a name="guardfile-dsl-ignore" />
|
683
627
|
### ignore
|
684
628
|
|
685
629
|
The `ignore` method allows you to ignore specific paths. This comes is handy when you have large
|
@@ -690,7 +634,6 @@ Please note that method only accept regexps. More on the [Listen README](https:/
|
|
690
634
|
ignore %r{^ignored/path/}, /public/
|
691
635
|
```
|
692
636
|
|
693
|
-
<a name="guardfile-dsl-filter" />
|
694
637
|
### filter
|
695
638
|
|
696
639
|
The `filter` method allows you to filter specific paths.
|
@@ -700,7 +643,6 @@ Please note that method only accept regexps. More on the [Listen README](https:/
|
|
700
643
|
filter /\.txt$/, /.*\.zip/
|
701
644
|
```
|
702
645
|
|
703
|
-
<a name="guardfile-dsl-example" />
|
704
646
|
### Example
|
705
647
|
|
706
648
|
```ruby
|
@@ -735,7 +677,6 @@ group :frontend do
|
|
735
677
|
end
|
736
678
|
```
|
737
679
|
|
738
|
-
<a name="shared-configurations" />
|
739
680
|
Shared configurations
|
740
681
|
---------------------
|
741
682
|
|
@@ -753,7 +694,6 @@ guard :shell do
|
|
753
694
|
end
|
754
695
|
```
|
755
696
|
|
756
|
-
<a name="advanced-linux-system-configuration" />
|
757
697
|
Advanced Linux system configuration
|
758
698
|
-----------------------------------
|
759
699
|
|
@@ -782,7 +722,6 @@ sudo sysctl -p
|
|
782
722
|
|
783
723
|
You may also need to pay attention to the values of `max_queued_events` and `max_user_instances`.
|
784
724
|
|
785
|
-
<a name="create-a-guard" />
|
786
725
|
Create a Guard
|
787
726
|
--------------
|
788
727
|
|
@@ -814,8 +753,9 @@ README.md
|
|
814
753
|
```
|
815
754
|
|
816
755
|
Your Guard main class `Guard::Yoyo` in `lib/guard/guard-yoyo.rb` must inherit from
|
817
|
-
[Guard::Guard](http://rubydoc.info/github/guard/guard/master/Guard/Guard) and should
|
818
|
-
`#
|
756
|
+
[Guard::Guard](http://rubydoc.info/github/guard/guard/master/Guard/Guard) and should implement at least the
|
757
|
+
`#run_on_changes` task method. `#run_on_additions`, `#run_on_modifications` and `#run_on_removals` task methods
|
758
|
+
could be use instead of `#run_on_changes` task method for more control about how changes are handled.
|
819
759
|
|
820
760
|
Here is an example scaffold for `lib/guard/yoyo.rb`:
|
821
761
|
|
@@ -855,18 +795,11 @@ module Guard
|
|
855
795
|
def run_all
|
856
796
|
end
|
857
797
|
|
858
|
-
#
|
798
|
+
# Default behaviour on file(s) changes that the Guard watches.
|
859
799
|
# @param [Array<String>] paths the changes files or paths
|
860
800
|
# @raise [:task_has_failed] when run_on_change has failed
|
861
|
-
def
|
862
|
-
end
|
863
|
-
|
864
|
-
# Called on file(s) deletions that the Guard watches.
|
865
|
-
# @param [Array<String>] paths the deleted files or paths
|
866
|
-
# @raise [:task_has_failed] when run_on_change has failed
|
867
|
-
def run_on_deletion(paths)
|
801
|
+
def run_on_changes(paths)
|
868
802
|
end
|
869
|
-
|
870
803
|
end
|
871
804
|
end
|
872
805
|
```
|
@@ -884,7 +817,7 @@ module ::Guard
|
|
884
817
|
def run_all
|
885
818
|
end
|
886
819
|
|
887
|
-
def
|
820
|
+
def run_on_changes(paths)
|
888
821
|
end
|
889
822
|
end
|
890
823
|
end
|
@@ -893,7 +826,6 @@ end
|
|
893
826
|
[@avdi](https://github.com/avdi) has a very cool inline Guard example in his blog post
|
894
827
|
[A Guardfile for Redis](http://avdi.org/devblog/2011/06/15/a-guardfile-for-redis).
|
895
828
|
|
896
|
-
<a name="programmatic-use-of-guard" />
|
897
829
|
Programmatic use of Guard
|
898
830
|
-------------------------
|
899
831
|
|
@@ -933,7 +865,6 @@ EOF
|
|
933
865
|
Guard.start(:guardfile_contents => guardfile)
|
934
866
|
```
|
935
867
|
|
936
|
-
<a name="file-an-issue" />
|
937
868
|
File an issue
|
938
869
|
-------------
|
939
870
|
|
@@ -954,7 +885,6 @@ When you file a bug, please try to follow these simple rules if applicable:
|
|
954
885
|
|
955
886
|
**It's most likely that your bug gets resolved faster if you provide as much information as possible!**
|
956
887
|
|
957
|
-
<a name="development" />
|
958
888
|
Development [](https://gemnasium.com/guard/guard)
|
959
889
|
-----------
|
960
890
|
|
data/lib/guard.rb
CHANGED
@@ -406,8 +406,8 @@ module Guard
|
|
406
406
|
|
407
407
|
# Deprecation message for the `no_vendor` start option
|
408
408
|
NO_VENDOR_DEPRECATION = <<-EOS.gsub(/^\s*/, '')
|
409
|
-
Starting with Guard v1.1 the 'no_vendor' option is removed because the monitoring
|
410
|
-
|
409
|
+
Starting with Guard v1.1 the 'no_vendor' option is removed because the monitoring
|
410
|
+
gems are now part of a new gem called Listen. (https://github.com/guard/listen)
|
411
411
|
|
412
412
|
You can specify a custom version of any monitoring gem directly in your Gemfile
|
413
413
|
if you want to overwrite Listen's default monitoring gems.
|
data/lib/guard/cli.rb
CHANGED
@@ -77,13 +77,13 @@ module Guard
|
|
77
77
|
method_option :latency,
|
78
78
|
:type => :numeric,
|
79
79
|
:aliases => '-l',
|
80
|
-
:banner => 'Overwrite Listen default latency'
|
80
|
+
:banner => 'Overwrite Listen\'s default latency'
|
81
81
|
|
82
82
|
method_option :force_polling,
|
83
83
|
:type => :boolean,
|
84
84
|
:default => false,
|
85
85
|
:aliases => '-p',
|
86
|
-
:banner => 'Force Listen polling listener
|
86
|
+
:banner => 'Force usage of the Listen polling listener'
|
87
87
|
|
88
88
|
# Start Guard by initialize the defined Guards and watch the file system.
|
89
89
|
# This is the default task, so calling `guard` is the same as calling `guard start`.
|
data/lib/guard/guard.rb
CHANGED
@@ -2,8 +2,13 @@ module Guard
|
|
2
2
|
|
3
3
|
# Base class that every Guard implementation must inherit from.
|
4
4
|
#
|
5
|
-
# Guard will trigger the `start`, `stop`, `reload`, `run_all
|
6
|
-
# `
|
5
|
+
# Guard will trigger the `start`, `stop`, `reload`, `run_all` and `run_on_changes`
|
6
|
+
# (`run_on_additions`, `run_on_modifications` and `run_on_removals`) task methods
|
7
|
+
# depending on user interaction and file modification.
|
8
|
+
#
|
9
|
+
# `run_on_changes` could be implemented to handle all the changes task case (additions,
|
10
|
+
# modifications, removals) in once, or each task can be implemented separatly with a
|
11
|
+
# specific behavior.
|
7
12
|
#
|
8
13
|
# In each of these Guard task methods you have to implement some work when you want to
|
9
14
|
# support this kind of task. The return value of each Guard task method is not evaluated
|
@@ -81,16 +86,16 @@ module Guard
|
|
81
86
|
# @raise [:task_has_failed] when start has failed
|
82
87
|
# @return [Object] the task result
|
83
88
|
#
|
84
|
-
def start
|
85
|
-
end
|
89
|
+
# def start
|
90
|
+
# end
|
86
91
|
|
87
92
|
# Called when `stop|quit|exit|s|q|e + enter` is pressed (when Guard quits).
|
88
93
|
#
|
89
94
|
# @raise [:task_has_failed] when stop has failed
|
90
95
|
# @return [Object] the task result
|
91
96
|
#
|
92
|
-
def stop
|
93
|
-
end
|
97
|
+
# def stop
|
98
|
+
# end
|
94
99
|
|
95
100
|
# Called when `reload|r|z + enter` is pressed.
|
96
101
|
# This method should be mainly used for "reload" (really!) actions like reloading passenger/spork/bundler/...
|
@@ -98,8 +103,8 @@ module Guard
|
|
98
103
|
# @raise [:task_has_failed] when reload has failed
|
99
104
|
# @return [Object] the task result
|
100
105
|
#
|
101
|
-
def reload
|
102
|
-
end
|
106
|
+
# def reload
|
107
|
+
# end
|
103
108
|
|
104
109
|
# Called when just `enter` is pressed
|
105
110
|
# This method should be principally used for long action like running all specs/tests/...
|
@@ -107,18 +112,17 @@ module Guard
|
|
107
112
|
# @raise [:task_has_failed] when run_all has failed
|
108
113
|
# @return [Object] the task result
|
109
114
|
#
|
110
|
-
def run_all
|
111
|
-
end
|
115
|
+
# def run_all
|
116
|
+
# end
|
112
117
|
|
113
|
-
# Default
|
118
|
+
# Default behaviour on file(s) changes that the Guard watches.
|
114
119
|
#
|
115
120
|
# @param [Array<String>] paths the changes files or paths
|
116
121
|
# @raise [:task_has_failed] when run_on_change has failed
|
117
122
|
# @return [Object] the task result
|
118
123
|
#
|
119
|
-
def run_on_changes(paths)
|
120
|
-
|
121
|
-
end
|
124
|
+
# def run_on_changes(paths)
|
125
|
+
# end
|
122
126
|
|
123
127
|
# Called on file(s) additions that the Guard watches.
|
124
128
|
#
|
@@ -126,9 +130,8 @@ module Guard
|
|
126
130
|
# @raise [:task_has_failed] when run_on_change has failed
|
127
131
|
# @return [Object] the task result
|
128
132
|
#
|
129
|
-
def
|
130
|
-
|
131
|
-
end
|
133
|
+
# def run_on_additions(paths)
|
134
|
+
# end
|
132
135
|
|
133
136
|
# Called on file(s) modifications that the Guard watches.
|
134
137
|
#
|
@@ -136,9 +139,8 @@ module Guard
|
|
136
139
|
# @raise [:task_has_failed] when run_on_change has failed
|
137
140
|
# @return [Object] the task result
|
138
141
|
#
|
139
|
-
def run_on_modifications(paths)
|
140
|
-
|
141
|
-
end
|
142
|
+
# def run_on_modifications(paths)
|
143
|
+
# end
|
142
144
|
|
143
145
|
# Called on file(s) removals that the Guard watches.
|
144
146
|
#
|
@@ -146,20 +148,7 @@ module Guard
|
|
146
148
|
# @raise [:task_has_failed] when run_on_change has failed
|
147
149
|
# @return [Object] the task result
|
148
150
|
#
|
149
|
-
def run_on_removals(paths)
|
150
|
-
run_on_changes(paths)
|
151
|
-
end
|
152
|
-
|
153
|
-
# @deprecated Use #run_on_modifications or #run_on_addtions instead
|
154
|
-
#
|
155
|
-
# def run_on_change(paths)
|
156
|
-
# raise NotImplementedError
|
157
|
-
# end
|
158
|
-
|
159
|
-
# @deprecated Use #run_on_removals instead
|
160
|
-
#
|
161
|
-
# def run_on_deletion(paths)
|
162
|
-
# raise NotImplementedError
|
151
|
+
# def run_on_removals(paths)
|
163
152
|
# end
|
164
153
|
|
165
154
|
end
|
@@ -14,7 +14,8 @@ module Guard
|
|
14
14
|
|
15
15
|
# Default options for the notify-send program
|
16
16
|
DEFAULTS = {
|
17
|
-
:t => 3000 # Default timeout is 3000ms
|
17
|
+
:t => 3000, # Default timeout is 3000ms
|
18
|
+
:h => 'int:transient:1' # Automatically close the notification
|
18
19
|
}
|
19
20
|
|
20
21
|
# Full list of options supported by notify-send
|
data/lib/guard/runner.rb
CHANGED
@@ -9,7 +9,7 @@ module Guard
|
|
9
9
|
Starting with Guard v1.1 the use of the 'run_on_change' method in the '%s' guard is deprecated.
|
10
10
|
|
11
11
|
Please consider replacing that method-call with 'run_on_changes' if the type of change
|
12
|
-
is not important for your usecase or using either 'run_on_modifications' or '
|
12
|
+
is not important for your usecase or using either 'run_on_modifications' or 'run_on_additions'
|
13
13
|
based on the type of the changes you want to handle.
|
14
14
|
|
15
15
|
For more information on how to update existing guards, please head over to:
|
@@ -48,6 +48,10 @@ module Guard
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
MODIFICATION_TASKS = [:run_on_modifications, :run_on_changes, :run_on_change]
|
52
|
+
ADDITION_TASKS = [:run_on_additions, :run_on_changes, :run_on_change]
|
53
|
+
REMOVAL_TASKS = [:run_on_removals, :run_on_changes, :run_on_deletion]
|
54
|
+
|
51
55
|
# Runs the appropriate tasks on all registered guards
|
52
56
|
# based on the passed changes.
|
53
57
|
#
|
@@ -61,19 +65,11 @@ module Guard
|
|
61
65
|
added_paths = Watcher.match_files(guard, added)
|
62
66
|
removed_paths = Watcher.match_files(guard, removed)
|
63
67
|
|
64
|
-
if
|
65
|
-
UI.clear
|
68
|
+
UI.clear if clearable?(guard, modified_paths, added_paths, removed_paths)
|
66
69
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
unless added_paths.empty?
|
71
|
-
run_first_task_found(guard, [:run_on_addtions, :run_on_change], added_paths)
|
72
|
-
end
|
73
|
-
unless removed_paths.empty?
|
74
|
-
run_first_task_found(guard, [:run_on_removals, :run_on_deletion], removed_paths)
|
75
|
-
end
|
76
|
-
end
|
70
|
+
run_first_task_found(guard, MODIFICATION_TASKS, modified_paths) unless modified_paths.empty?
|
71
|
+
run_first_task_found(guard, ADDITION_TASKS, added_paths) unless added_paths.empty?
|
72
|
+
run_first_task_found(guard, REMOVAL_TASKS, removed_paths) unless removed_paths.empty?
|
77
73
|
end
|
78
74
|
end
|
79
75
|
|
@@ -97,8 +93,8 @@ module Guard
|
|
97
93
|
result
|
98
94
|
end
|
99
95
|
|
100
|
-
rescue
|
101
|
-
|
96
|
+
rescue NoMethodError
|
97
|
+
# Do nothing
|
102
98
|
rescue Exception => ex
|
103
99
|
UI.error("#{ guard.class.name } failed to achieve its <#{ task.to_s }>, exception was:" +
|
104
100
|
"\n#{ ex.class }: #{ ex.message }\n#{ ex.backtrace.join("\n") }")
|
@@ -129,7 +125,7 @@ module Guard
|
|
129
125
|
group.options[:halt_on_fail] ? :no_catch : :task_has_failed
|
130
126
|
end
|
131
127
|
|
132
|
-
|
128
|
+
private
|
133
129
|
|
134
130
|
# Tries to run the first implemented task by a given guard
|
135
131
|
# from a collection of tasks.
|
@@ -139,16 +135,13 @@ module Guard
|
|
139
135
|
# @param [Object] task_param the param to pass to each task
|
140
136
|
#
|
141
137
|
def run_first_task_found(guard, tasks, task_param)
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
# Do nothing
|
150
|
-
rescue NotImplementedError
|
151
|
-
retry
|
138
|
+
tasks.each do |task|
|
139
|
+
if guard.respond_to?(task)
|
140
|
+
run_supervised_task(guard, task, task_param)
|
141
|
+
break
|
142
|
+
else
|
143
|
+
UI.debug "Trying to run #{ guard.class.name }##{ task.to_s } with #{ task_param.inspect }"
|
144
|
+
end
|
152
145
|
end
|
153
146
|
end
|
154
147
|
|
@@ -175,5 +168,19 @@ module Guard
|
|
175
168
|
end
|
176
169
|
end
|
177
170
|
|
171
|
+
# Logic to know if the UI can be cleared or not in the run_on_changes method
|
172
|
+
# based on the guard and the changes.
|
173
|
+
#
|
174
|
+
# @param [Guard::Guard] guard the guard where run_on_changes is called
|
175
|
+
# @param [Array<String>] modified_paths the modified paths.
|
176
|
+
# @param [Array<String>] added_paths the added paths.
|
177
|
+
# @param [Array<String>] removed_paths the removed paths.
|
178
|
+
#
|
179
|
+
def clearable?(guard, modified_paths, added_paths, removed_paths)
|
180
|
+
(MODIFICATION_TASKS.any? { |task| guard.respond_to?(task) } && !modified_paths.empty?) ||
|
181
|
+
(ADDITION_TASKS.any? { |task| guard.respond_to?(task) } && !added_paths.empty?) ||
|
182
|
+
(REMOVAL_TASKS.any? { |task| guard.respond_to?(task) } && !removed_paths.empty?)
|
183
|
+
end
|
184
|
+
|
178
185
|
end
|
179
186
|
end
|
data/lib/guard/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.0.
|
4
|
+
version: 1.1.0.beta
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|