guard-rspec 3.1.0 → 4.0.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/.gitignore +8 -0
- data/.travis.yml +7 -0
- data/CONTRIBUTING.md +38 -0
- data/Gemfile +11 -0
- data/Guardfile +5 -0
- data/{LICENSE → LICENSE.txt} +2 -0
- data/README.md +23 -149
- data/Rakefile +5 -0
- data/guard-rspec.gemspec +26 -0
- data/lib/guard/rspec.rb +18 -99
- data/lib/guard/rspec/command.rb +61 -0
- data/lib/guard/rspec/deprecator.rb +51 -0
- data/lib/guard/rspec/formatters/focuser.rb +29 -0
- data/lib/guard/rspec/formatters/notifier.rb +47 -0
- data/lib/guard/rspec/inspector.rb +44 -40
- data/lib/guard/rspec/runner.rb +45 -246
- data/lib/guard/rspec/version.rb +1 -1
- data/spec/lib/guard/rspec/command_spec.rb +59 -0
- data/spec/lib/guard/rspec/deprecator_spec.rb +57 -0
- data/spec/lib/guard/rspec/formatter_spec.rb +0 -0
- data/spec/lib/guard/rspec/formatters/focuser_spec.rb +25 -0
- data/spec/lib/guard/rspec/formatters/notifier_spec.rb +34 -0
- data/spec/lib/guard/rspec/inspector_spec.rb +94 -0
- data/spec/lib/guard/rspec/runner_spec.rb +136 -0
- data/spec/lib/guard/rspec_spec.rb +82 -0
- data/spec/spec_helper.rb +18 -0
- metadata +90 -20
- data/lib/guard/rspec/formatter.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72a879771ebb51c3975137af34723ce17a908abe
|
4
|
+
data.tar.gz: e6f562c2149e0d7a7312831a706565be60bdc018
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea1fd12cd64193718d5be568ff09ede36a6dafadf4f30a3bfa3050842aa73b1e0ccdc036985a513c0a6898328d0fcf28b997ce84423efba52180cef5e5ddb095
|
7
|
+
data.tar.gz: ce1aa592392b715825347bbcc3c95c85eb3e795488c3aeb37f650583524a3784fd8a127e3a09bd31b100058a88d431f7c26c3d31d37fa8bd49c515defa7e1e38
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
Contribute to Guard::RSpec
|
2
|
+
==========================
|
3
|
+
|
4
|
+
File an issue
|
5
|
+
-------------
|
6
|
+
|
7
|
+
You can report bugs and feature requests to [GitHub Issues](https://github.com/guard/guard-rspec/issues).
|
8
|
+
|
9
|
+
**Please don't ask question in the issue tracker**, instead ask them on at Stack Overflow and use the
|
10
|
+
[guard](http://stackoverflow.com/questions/tagged/guard) tag and/or [guard-rspec](http://stackoverflow.com/questions/tagged/guard-rspec).
|
11
|
+
|
12
|
+
Try to figure out where the issue belongs to: Is it an issue with Guard::RSpec itself or with Guard?
|
13
|
+
|
14
|
+
When you file a bug, please try to follow these simple rules if applicable:
|
15
|
+
|
16
|
+
* Make sure you've read the README carefully.
|
17
|
+
* Make sure you run Guard with `bundle exec` first.
|
18
|
+
* Add debug information to the issue by running Guard with the `--debug` option.
|
19
|
+
* Add your `Guardfile` and `Gemfile` to the issue.
|
20
|
+
* Make sure that the issue is reproducible with your description.
|
21
|
+
|
22
|
+
**It's most likely that your bug gets resolved faster if you provide as much information as possible!**
|
23
|
+
|
24
|
+
Development
|
25
|
+
-----------
|
26
|
+
|
27
|
+
* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/guard-rspec/master/frames).
|
28
|
+
* Source hosted at [GitHub](https://github.com/guard/guard-rspec).
|
29
|
+
|
30
|
+
Pull requests are very welcome! Please try to follow these simple rules if applicable:
|
31
|
+
|
32
|
+
* Please create a topic branch for every separate change you make.
|
33
|
+
* Make sure your patches are well tested. All specs run with `rake spec:portability` must pass.
|
34
|
+
* Update the [README](https://github.com/guard/guard-rspec/blob/master/README.md).
|
35
|
+
* Please **do not change** the version number.
|
36
|
+
|
37
|
+
For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on
|
38
|
+
`#guard` (irc.freenode.net).
|
data/Gemfile
ADDED
data/Guardfile
ADDED
data/{LICENSE → LICENSE.txt}
RENAMED
@@ -1,5 +1,7 @@
|
|
1
1
|
Copyright (c) 2010-2013 Thibaud Guillaume-Gentil
|
2
2
|
|
3
|
+
MIT License
|
4
|
+
|
3
5
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
6
|
a copy of this software and associated documentation files (the
|
5
7
|
"Software"), to deal in the Software without restriction, including
|
data/README.md
CHANGED
@@ -1,27 +1,18 @@
|
|
1
1
|
# Guard::RSpec
|
2
|
+
|
2
3
|
[](http://badge.fury.io/rb/guard-rspec) [](http://travis-ci.org/guard/guard-rspec) [](https://gemnasium.com/guard/guard-rspec) [](https://codeclimate.com/github/guard/guard-rspec) [](https://coveralls.io/r/guard/guard-rspec)
|
3
4
|
|
4
|
-
RSpec
|
5
|
+
Guard::RSpec allows to automatically & intelligently launch specs when files are modified.
|
5
6
|
|
6
|
-
* Compatible with RSpec
|
7
|
-
* Tested against Ruby 1.
|
7
|
+
* Compatible with RSpec ~> 2.14
|
8
|
+
* Tested against Ruby 1.9.3, 2.0.0, JRuby and Rubinius.
|
8
9
|
|
9
10
|
## Install
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
Install the gem:
|
14
|
-
|
15
|
-
```
|
16
|
-
$ gem install guard-rspec
|
17
|
-
```
|
18
|
-
|
19
|
-
Add it to your Gemfile (inside development group):
|
12
|
+
Add the gem to your Gemfile (inside development group):
|
20
13
|
|
21
14
|
``` ruby
|
22
|
-
|
23
|
-
gem 'guard-rspec'
|
24
|
-
end
|
15
|
+
gem 'guard-rspec', require: false
|
25
16
|
```
|
26
17
|
|
27
18
|
Add guard definition to your Guardfile by running this command:
|
@@ -36,7 +27,7 @@ Please read [Guard usage doc](https://github.com/guard/guard#readme).
|
|
36
27
|
|
37
28
|
## Guardfile
|
38
29
|
|
39
|
-
RSpec
|
30
|
+
Guard::RSpec can be adapted to all kinds of projects, some examples:
|
40
31
|
|
41
32
|
### Standard RubyGem project
|
42
33
|
|
@@ -62,157 +53,44 @@ guard :rspec do
|
|
62
53
|
watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
|
63
54
|
end
|
64
55
|
```
|
56
|
+
|
65
57
|
Please read [Guard doc](https://github.com/guard/guard#readme) for more information about the Guardfile DSL.
|
66
58
|
|
67
59
|
## Options
|
68
60
|
|
69
|
-
|
70
|
-
|
71
|
-
``` ruby
|
72
|
-
guard 'rspec', :cli => "--color --format nested --fail-fast --drb" do
|
73
|
-
# ...
|
74
|
-
end
|
75
|
-
```
|
76
|
-
|
77
|
-
By default, Guard::RSpec will only look for spec files within `spec` in your project root. You can configure Guard::RSpec to look in additional paths by using the `:spec_paths` option:
|
78
|
-
|
79
|
-
``` ruby
|
80
|
-
guard 'rspec', :spec_paths => ["spec", "vendor/engines/reset/spec"] do
|
81
|
-
# ...
|
82
|
-
end
|
83
|
-
```
|
84
|
-
If you have only one path to look in, you can configure the `:spec_paths` option with a string:
|
85
|
-
|
86
|
-
``` ruby
|
87
|
-
guard 'rspec', :spec_paths => "test" do
|
88
|
-
# ...
|
89
|
-
end
|
90
|
-
```
|
91
|
-
If you want to set an environment variable, you can configure the `:env` option with a hash:
|
61
|
+
Guard::RSpec 4.0 use now a more simple approach with the new `cmd` option that let you precisely define which rspec command will be launched on each run. As example if you want to support Spring with a custom formatter (progress by default) use:
|
92
62
|
|
93
63
|
``` ruby
|
94
|
-
guard
|
95
|
-
# ...
|
96
|
-
end
|
97
|
-
```
|
98
|
-
[Turnip](https://github.com/jnicklas/turnip) is supported (Ruby 1.9.X only), but you must enable it:
|
99
|
-
``` ruby
|
100
|
-
guard 'rspec', :turnip => true do
|
101
|
-
# ...
|
102
|
-
end
|
103
|
-
```
|
104
|
-
[Spring](https://github.com/jonleighton/spring) is supported (Ruby 1.9.X / Rails 3.2+ only), but you must enable it:
|
105
|
-
``` ruby
|
106
|
-
guard 'rspec', :spring => true do
|
107
|
-
# ...
|
108
|
-
end
|
109
|
-
```
|
110
|
-
[ParallelTests](https://github.com/grosser/parallel_tests) is supported, but you must enable it:
|
111
|
-
``` ruby
|
112
|
-
guard 'rspec', :parallel => true, :parallel_cli => '-n 2' do
|
64
|
+
guard :rspec, cdm: 'spring rspec -f doc' do
|
113
65
|
# ...
|
114
66
|
end
|
115
67
|
```
|
116
|
-
[Foreman](https://github.com/ddollar/foreman) is supported, but you must enable it:
|
117
|
-
``` ruby
|
118
|
-
guard 'rspec', :foreman => true do
|
119
|
-
# ...
|
120
|
-
end
|
121
|
-
```
|
122
|
-
|
123
|
-
Former `:color`, `:drb`, `:fail_fast` and `:formatter` options are deprecated and no longer have effect.
|
124
68
|
|
125
69
|
### List of available options:
|
126
70
|
|
127
71
|
``` ruby
|
128
|
-
:
|
129
|
-
:
|
130
|
-
:
|
131
|
-
:
|
132
|
-
:
|
133
|
-
:
|
134
|
-
:
|
135
|
-
:
|
136
|
-
:
|
137
|
-
:spec_paths => ["spec"] # specify an array of paths that contain spec files
|
138
|
-
:exclude => "spec/foo/**/*" # exclude files based on glob
|
139
|
-
:spring => true # enable spring support; default: false
|
140
|
-
:turnip => true # enable turnip support; default: false
|
141
|
-
:zeus => true # enable zeus support; default: false
|
142
|
-
:foreman => true # enable foreman support; default: false
|
143
|
-
:focus_on_failed => false # focus on the first 10 failed specs first, rerun till they pass
|
144
|
-
:parallel => true # run all specs in parallel using [ParallelTests](https://github.com/grosser/parallel_tests) gem, default: false
|
145
|
-
:parallel_cli => "-n 2" # pass arbitrary Parallel Tests arguments, default: ""
|
146
|
-
:launchy => nil # pass a path to an rspec results file, e.g. ./tmp/spec_results.html
|
72
|
+
cmd: 'zeus rspec' # specify a custom rpsec command to run, default: 'rspec'
|
73
|
+
spec_paths: ['spec'] # specify a custom array of paths that contain spec files
|
74
|
+
focus_on_failed: false # focus on the first 10 failed specs, rerun till they pass, default: true
|
75
|
+
keep_failed: true # keep failed specs until they pass (add them to new ones), default: false
|
76
|
+
all_after_pass: true # run all specs after changed specs pass, default: false
|
77
|
+
all_on_start: true # run all the specs at startup, default: false
|
78
|
+
launchy: nil # pass a path to an rspec results file, e.g. ./tmp/spec_results.html
|
79
|
+
notification: false # display notification after the specs are done running, default: true
|
80
|
+
run_all: { cmd: 'custom rspec command', message: 'custom message' } # Custom options to use when running all specs.
|
147
81
|
```
|
148
82
|
|
149
|
-
You can also use a custom binstubs directory using `:binstubs => 'some-dir'`.
|
150
|
-
|
151
83
|
### Using Launchy to view rspec results
|
152
|
-
guard-rspec can be configured to launch a results file in lieu of outputing rspec results to the terminal.
|
153
|
-
Configure your Guardfile with the launchy option
|
154
|
-
``` ruby
|
155
|
-
guard 'rspec', :cli=>'--color --format html --out ./tmp/spec_results.html' do
|
156
|
-
:launchy => "./tmp/spec_results.html"
|
157
|
-
# ...
|
158
|
-
end
|
159
|
-
```
|
160
|
-
|
161
|
-
### DRb mode
|
162
|
-
|
163
|
-
When you specify `--drb` within `:cli`, guard-rspec will circumvent the `rspec` command line tool by
|
164
|
-
directly communicating with the RSpec DRb server. This avoids the extra overhead incurred by your
|
165
|
-
shell, bundler and loading RSpec's environment just to send a DRb message. It shaves off a
|
166
|
-
second or two before the specs start to run; they should run almost immediately.
|
167
|
-
|
168
|
-
## Notification
|
169
|
-
|
170
|
-
The notification feature is only available for RSpec < 2, and RSpec >= 2.4 (due to the multiple-formatters feature that was present in RSpec 1, was removed in RSpec 2 and reintroduced in RSpec 2.4). So if you are using a version between 2 and 2.4, you should disable the notification with <tt>:notification => false</tt>. Otherwise, nothing will be displayed in the terminal when your specs will run.
|
171
84
|
|
172
|
-
|
173
|
-
|
174
|
-
The best solution is still to update RSpec to the latest version!
|
175
|
-
|
176
|
-
## Formatters
|
177
|
-
|
178
|
-
The `:formatter` option has been removed since CLI arguments can be passed through the `:cli` option. If you want to use the former Instafail formatter, you need to use the [rspec-instafail](http://rubygems.org/gems/rspec-instafail) gem instead:
|
85
|
+
guard-rspec can be configured to launch a results file in lieu of outputing rspec results to the terminal.
|
86
|
+
Configure your Guardfile with the launchy option:
|
179
87
|
|
180
88
|
``` ruby
|
181
|
-
|
182
|
-
gem 'rspec-instafail'
|
183
|
-
|
184
|
-
# in your Guardfile
|
185
|
-
guard 'rspec', :cli => '-r rspec/instafail -f RSpec::Instafail' do
|
89
|
+
guard :rspec, cmd: 'rspec -f html -o ./tmp/spec_results.html', launchy: './tmp/spec_results.html' do
|
186
90
|
# ...
|
187
91
|
end
|
188
92
|
```
|
189
93
|
|
190
|
-
Default formatter is the `progress` formatter (same as RSpec default).
|
191
|
-
|
192
|
-
## Running a subset of all specs
|
193
|
-
|
194
|
-
The `:all_on_start` and `:all_after_pass` options cause all specs located in the `spec` directory to be run. If there
|
195
|
-
are some specs you want to skip, you can tag them with RSpec metadata (such as `:slow => true`)
|
196
|
-
and skip them with the cli `--tag` option (i.e. `--tag ~slow`).
|
197
|
-
|
198
|
-
You can also use option :spec_paths to override paths used when running all specs.
|
199
|
-
You can use this feature to create multiple groups of guarded specs with distinct paths, and execute each in its own process:
|
200
|
-
|
201
|
-
``` ruby
|
202
|
-
# in your Guardfile
|
203
|
-
group 'acceptance-tests' do
|
204
|
-
guard 'rspec', :spec_paths => ['spec/acceptance'] do
|
205
|
-
# ...
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
group 'unit-tests' do
|
210
|
-
guard 'rspec', :spec_paths => ['spec/models', 'spec/controllers', 'spec/routing'] do
|
211
|
-
# ...
|
212
|
-
end
|
213
|
-
end
|
214
|
-
```
|
215
|
-
|
216
94
|
## Development
|
217
95
|
|
218
96
|
* Documentation hosted at [RubyDoc](http://rubydoc.info/github/guard/guard-rspec/master/frames).
|
@@ -228,13 +106,9 @@ Pull requests are very welcome! Please try to follow these simple rules if appli
|
|
228
106
|
For questions please join us in our [Google group](http://groups.google.com/group/guard-dev) or on
|
229
107
|
`#guard` (irc.freenode.net).
|
230
108
|
|
231
|
-
### Testing
|
232
|
-
|
233
|
-
Please run `rake spec:prepare_fixtures` once before launching specs.
|
234
|
-
|
235
109
|
### Author
|
236
110
|
|
237
|
-
[Thibaud Guillaume-Gentil](https://github.com/thibaudgg) ([@thibaudgg](
|
111
|
+
[Thibaud Guillaume-Gentil](https://github.com/thibaudgg) ([@thibaudgg](https://twitter.com/thibaudgg))
|
238
112
|
|
239
113
|
### Contributors
|
240
114
|
|
data/Rakefile
ADDED
data/guard-rspec.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'guard/rspec/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'guard-rspec'
|
8
|
+
s.version = Guard::RSpecVersion::VERSION
|
9
|
+
s.author = 'Thibaud Guillaume-Gentil'
|
10
|
+
s.email = 'thibaud@thibaud.me'
|
11
|
+
s.summary = 'Guard gem for RSpec'
|
12
|
+
s.description = 'Guard::RSpec automatically run your specs (much like autotest).'
|
13
|
+
s.homepage = 'https://rubygems.org/gems/guard-rspec'
|
14
|
+
s.license = 'MIT'
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split($/)
|
17
|
+
s.test_files = s.files.grep(%r{^spec/})
|
18
|
+
s.require_path = 'lib'
|
19
|
+
|
20
|
+
s.add_dependency 'guard', '~> 2.0'
|
21
|
+
s.add_dependency 'rspec', '~> 2.14'
|
22
|
+
s.add_development_dependency 'bundler', '>= 1.3.5'
|
23
|
+
s.add_development_dependency 'rake'
|
24
|
+
s.add_development_dependency 'rspec'
|
25
|
+
s.add_development_dependency 'launchy'
|
26
|
+
end
|
data/lib/guard/rspec.rb
CHANGED
@@ -1,126 +1,45 @@
|
|
1
1
|
require 'guard'
|
2
|
-
require 'guard/
|
2
|
+
require 'guard/plugin'
|
3
3
|
|
4
4
|
module Guard
|
5
|
-
class RSpec <
|
6
|
-
|
7
|
-
|
5
|
+
class RSpec < Plugin
|
6
|
+
require 'guard/rspec/deprecator'
|
7
|
+
require 'guard/rspec/runner'
|
8
8
|
|
9
|
-
attr_accessor :
|
9
|
+
attr_accessor :options, :runner
|
10
10
|
|
11
|
-
def initialize(
|
11
|
+
def initialize(options = {})
|
12
12
|
super
|
13
13
|
@options = {
|
14
|
-
:
|
15
|
-
:all_after_pass => false,
|
16
|
-
:all_on_start => false,
|
17
|
-
:keep_failed => false,
|
18
|
-
:spec_paths => ["spec"],
|
19
|
-
:run_all => {}
|
14
|
+
all_on_start: false
|
20
15
|
}.merge(options)
|
21
|
-
@last_failed = false
|
22
|
-
@failed_paths = []
|
23
16
|
|
24
|
-
|
25
|
-
@runner
|
17
|
+
Deprecator.warns_about_deprecated_options(@options)
|
18
|
+
@runner = Runner.new(@options)
|
26
19
|
end
|
27
20
|
|
28
|
-
# Call once when guard starts
|
29
21
|
def start
|
30
22
|
UI.info "Guard::RSpec is running"
|
31
|
-
run_all if
|
23
|
+
run_all if options[:all_on_start]
|
32
24
|
end
|
33
25
|
|
34
26
|
def run_all
|
35
|
-
|
36
|
-
|
37
|
-
unless @last_failed = !passed
|
38
|
-
@failed_paths = []
|
39
|
-
else
|
40
|
-
throw :task_has_failed
|
41
|
-
end
|
27
|
+
_throw_if_failed { runner.run_all }
|
42
28
|
end
|
43
29
|
|
44
30
|
def reload
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
def run_on_changes(paths)
|
49
|
-
|
50
|
-
original_paths = paths.dup
|
51
|
-
|
52
|
-
focused = false
|
53
|
-
if last_failed && @options[:focus_on_failed]
|
54
|
-
path = './tmp/rspec_guard_result'
|
55
|
-
if File.exist?(path)
|
56
|
-
single_spec = paths && paths.length == 1 && paths[0].include?("_spec") ? paths[0] : nil
|
57
|
-
failed_specs = File.open(path) { |file| file.read.split("\n") }
|
58
|
-
|
59
|
-
File.delete(path)
|
60
|
-
|
61
|
-
if single_spec && @inspector.clean([single_spec]).length == 1
|
62
|
-
failed_specs = failed_specs.select{|p| p.include? single_spec}
|
63
|
-
end
|
64
|
-
|
65
|
-
if failed_specs.any?
|
66
|
-
# some sane limit, stuff will explode if all tests fail
|
67
|
-
# ... cap at 10
|
68
|
-
|
69
|
-
paths = failed_specs[0..10]
|
70
|
-
focused = true
|
71
|
-
end
|
72
|
-
|
73
|
-
# switch focus to the single spec
|
74
|
-
if single_spec and failed_specs.length > 0
|
75
|
-
focused = true
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
if focused
|
81
|
-
add_failed(original_paths)
|
82
|
-
add_failed(paths.map{|p| p.split(":")[0]})
|
83
|
-
else
|
84
|
-
paths += failed_paths if @options[:keep_failed]
|
85
|
-
paths = @inspector.clean(paths).uniq
|
86
|
-
end
|
87
|
-
|
88
|
-
if passed = @runner.run(paths)
|
89
|
-
unless focused
|
90
|
-
remove_failed(paths)
|
91
|
-
end
|
92
|
-
|
93
|
-
if last_failed && focused
|
94
|
-
run_on_changes(failed_paths)
|
95
|
-
# run all the specs if the run before this one failed
|
96
|
-
elsif last_failed && @options[:all_after_pass]
|
97
|
-
@last_failed = false
|
98
|
-
run_all
|
99
|
-
end
|
100
|
-
else
|
101
|
-
@last_failed = true
|
102
|
-
unless focused
|
103
|
-
add_failed(paths)
|
104
|
-
end
|
105
|
-
|
106
|
-
throw :task_has_failed
|
107
|
-
end
|
31
|
+
runner.reload
|
108
32
|
end
|
109
33
|
|
110
|
-
|
111
|
-
|
112
|
-
|
34
|
+
def run_on_modifications(paths)
|
35
|
+
return false if paths.empty?
|
36
|
+
_throw_if_failed { runner.run(paths) }
|
113
37
|
end
|
114
38
|
|
115
|
-
|
116
|
-
@failed_paths -= paths if @options[:keep_failed]
|
117
|
-
end
|
39
|
+
private
|
118
40
|
|
119
|
-
def
|
120
|
-
|
121
|
-
@failed_paths += paths
|
122
|
-
@failed_paths.uniq!
|
123
|
-
end
|
41
|
+
def _throw_if_failed
|
42
|
+
throw :task_has_failed unless yield
|
124
43
|
end
|
125
44
|
|
126
45
|
end
|