scout-gear 7.2.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +51 -6
  3. data/VERSION +1 -1
  4. data/bin/scout +6 -3
  5. data/lib/rbbt-scout.rb +1 -0
  6. data/lib/scout/cmd.rb +1 -1
  7. data/lib/scout/concurrent_stream.rb +33 -29
  8. data/lib/scout/config.rb +1 -1
  9. data/lib/scout/exceptions.rb +1 -0
  10. data/lib/scout/log/color.rb +4 -2
  11. data/lib/scout/log/progress/report.rb +1 -1
  12. data/lib/scout/log/progress/util.rb +71 -2
  13. data/lib/scout/log/progress.rb +1 -1
  14. data/lib/scout/log/trap.rb +107 -0
  15. data/lib/scout/log.rb +56 -21
  16. data/lib/scout/meta_extension.rb +13 -6
  17. data/lib/scout/misc/digest.rb +1 -1
  18. data/lib/scout/misc/format.rb +12 -0
  19. data/lib/scout/misc/helper.rb +31 -0
  20. data/lib/scout/misc/insist.rb +1 -1
  21. data/lib/scout/misc/monitor.rb +12 -1
  22. data/lib/scout/misc/system.rb +10 -0
  23. data/lib/scout/misc.rb +1 -0
  24. data/lib/scout/named_array.rb +65 -3
  25. data/lib/scout/open/lock/lockfile.rb +587 -0
  26. data/lib/scout/open/lock.rb +28 -2
  27. data/lib/scout/open/remote.rb +4 -0
  28. data/lib/scout/open/stream.rb +111 -42
  29. data/lib/scout/open/util.rb +13 -3
  30. data/lib/scout/path/find.rb +9 -1
  31. data/lib/scout/path/util.rb +35 -0
  32. data/lib/scout/persist/serialize.rb +18 -5
  33. data/lib/scout/persist.rb +60 -30
  34. data/lib/scout/resource/path.rb +53 -0
  35. data/lib/scout/resource/produce.rb +0 -8
  36. data/lib/scout/resource/util.rb +2 -1
  37. data/lib/scout/semaphore.rb +8 -1
  38. data/lib/scout/tmpfile.rb +7 -8
  39. data/lib/scout/tsv/attach.rb +177 -0
  40. data/lib/scout/tsv/change_id.rb +40 -0
  41. data/lib/scout/tsv/dumper.rb +85 -54
  42. data/lib/scout/tsv/index.rb +188 -20
  43. data/lib/scout/tsv/open.rb +182 -0
  44. data/lib/scout/tsv/parser.rb +200 -118
  45. data/lib/scout/tsv/path.rb +5 -6
  46. data/lib/scout/tsv/persist/adapter.rb +26 -37
  47. data/lib/scout/tsv/persist/fix_width_table.rb +327 -0
  48. data/lib/scout/tsv/persist/serialize.rb +117 -0
  49. data/lib/scout/tsv/persist/tokyocabinet.rb +6 -3
  50. data/lib/scout/tsv/persist.rb +4 -2
  51. data/lib/scout/tsv/transformer.rb +141 -0
  52. data/lib/scout/tsv/traverse.rb +136 -37
  53. data/lib/scout/tsv/util/filter.rb +312 -0
  54. data/lib/scout/tsv/util/process.rb +73 -0
  55. data/lib/scout/tsv/util/reorder.rb +81 -0
  56. data/lib/scout/tsv/util/select.rb +265 -0
  57. data/lib/scout/tsv/util/unzip.rb +86 -0
  58. data/lib/scout/tsv/util.rb +126 -19
  59. data/lib/scout/tsv.rb +28 -5
  60. data/lib/scout/work_queue/socket.rb +6 -1
  61. data/lib/scout/work_queue/worker.rb +5 -2
  62. data/lib/scout/work_queue.rb +15 -8
  63. data/lib/scout/workflow/definition.rb +29 -2
  64. data/lib/scout/workflow/step/dependencies.rb +24 -4
  65. data/lib/scout/workflow/step/info.rb +40 -5
  66. data/lib/scout/workflow/step/progress.rb +14 -0
  67. data/lib/scout/workflow/step/provenance.rb +8 -7
  68. data/lib/scout/workflow/step/status.rb +45 -0
  69. data/lib/scout/workflow/step.rb +104 -33
  70. data/lib/scout/workflow/task/inputs.rb +14 -20
  71. data/lib/scout/workflow/task.rb +86 -47
  72. data/lib/scout/workflow/usage.rb +10 -6
  73. data/scout-gear.gemspec +30 -3
  74. data/scout_commands/workflow/task +37 -9
  75. data/scout_commands/workflow/task_old +2 -2
  76. data/test/scout/open/test_stream.rb +61 -59
  77. data/test/scout/path/test_find.rb +10 -1
  78. data/test/scout/resource/test_produce.rb +15 -0
  79. data/test/scout/test_meta_extension.rb +25 -0
  80. data/test/scout/test_named_array.rb +18 -0
  81. data/test/scout/test_persist.rb +67 -0
  82. data/test/scout/test_tmpfile.rb +1 -1
  83. data/test/scout/test_tsv.rb +222 -3
  84. data/test/scout/test_work_queue.rb +21 -18
  85. data/test/scout/tsv/persist/test_adapter.rb +11 -1
  86. data/test/scout/tsv/persist/test_fix_width_table.rb +134 -0
  87. data/test/scout/tsv/persist/test_tokyocabinet.rb +29 -1
  88. data/test/scout/tsv/test_attach.rb +227 -0
  89. data/test/scout/tsv/test_change_id.rb +98 -0
  90. data/test/scout/tsv/test_dumper.rb +1 -1
  91. data/test/scout/tsv/test_index.rb +127 -3
  92. data/test/scout/tsv/test_open.rb +167 -0
  93. data/test/scout/tsv/test_parser.rb +45 -3
  94. data/test/scout/tsv/test_persist.rb +9 -0
  95. data/test/scout/tsv/test_transformer.rb +108 -0
  96. data/test/scout/tsv/test_traverse.rb +195 -3
  97. data/test/scout/tsv/test_util.rb +24 -0
  98. data/test/scout/tsv/util/test_filter.rb +188 -0
  99. data/test/scout/tsv/util/test_process.rb +47 -0
  100. data/test/scout/tsv/util/test_reorder.rb +94 -0
  101. data/test/scout/tsv/util/test_select.rb +58 -0
  102. data/test/scout/tsv/util/test_unzip.rb +112 -0
  103. data/test/scout/work_queue/test_socket.rb +0 -1
  104. data/test/scout/work_queue/test_worker.rb +63 -6
  105. data/test/scout/workflow/step/test_load.rb +3 -3
  106. data/test/scout/workflow/step/test_status.rb +31 -0
  107. data/test/scout/workflow/task/test_inputs.rb +14 -14
  108. data/test/scout/workflow/test_step.rb +13 -13
  109. data/test/scout/workflow/test_task.rb +168 -32
  110. data/test/scout/workflow/test_usage.rb +33 -6
  111. data/test/test_helper.rb +3 -1
  112. metadata +29 -2
@@ -21,38 +21,6 @@ class TestTask < Test::Unit::TestCase
21
21
  assert_equal 2, s.run
22
22
  end
23
23
 
24
- def test_override_inputs
25
- wf = Workflow.annonymous_workflow "TaskInputs" do
26
- input :input1, :string
27
- task :step1 => :string do |i| i end
28
-
29
- dep :step1, :input1 => 1
30
- input :input2, :string
31
- task :step2 => :string do |i| i end
32
- end
33
-
34
- job = wf.job(:step2, :input1 => 2)
35
- assert_equal Task::DEFAULT_NAME, job.name
36
- assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
37
- end
38
-
39
- def test_override_inputs_block
40
- wf = Workflow.annonymous_workflow "TaskInputs" do
41
- input :input1, :string
42
- task :step1 => :string do |i| i end
43
-
44
- dep :step1 do |id,options|
45
- {:inputs => {:input1 => 1}}
46
- end
47
- input :input2, :string
48
- task :step2 => :string do |i| i end
49
- end
50
-
51
- job = wf.job(:step2, :input1 => 2)
52
- assert_equal Task::DEFAULT_NAME, job.name
53
- assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
54
- end
55
-
56
24
  def test_task_override_dep
57
25
  wf = Workflow.annonymous_workflow "TaskInputs" do
58
26
  input :input1, :integer
@@ -108,11 +76,13 @@ class TestTask < Test::Unit::TestCase
108
76
  assert_equal Task::DEFAULT_NAME, job.name
109
77
 
110
78
  step1 = wf.job(:step1, :input1 => 3)
79
+ assert_equal 3, step1.run
111
80
  job = wf.job(:double, "TaskInputs#step1" => step1)
112
81
  assert_equal 12, job.run
113
82
  assert_not_equal Task::DEFAULT_NAME, job.name
114
83
 
115
84
  step1 = wf.job(:step1, :input1 => 4)
85
+ assert_equal 4, step1.run
116
86
  job = wf.job(:double, "TaskInputs#step1" => step1)
117
87
  assert_equal 14, job.run
118
88
  assert_not_equal Task::DEFAULT_NAME, job.name
@@ -172,5 +142,171 @@ class TestTask < Test::Unit::TestCase
172
142
  job = wf.job(:my_sum, :vv1 => 2, :vv2 => 3)
173
143
  assert_equal 5, job.run
174
144
  end
145
+
146
+ def test_defaults_in_dep_block
147
+ wf = Workflow.annonymous_workflow "TaskInputs" do
148
+ input :v1, :integer
149
+ input :v2, :integer
150
+ task :sum => :integer do |v1,v2|
151
+ v1 + v2
152
+ end
153
+
154
+ input :vv1, :integer
155
+ input :vv2, :integer, nil, 3
156
+ dep :sum, :v1 => :placeholder, :v2 => :placeholder do |jobname,options,dependencies|
157
+ raise "Non-numeric value where integer expected" unless Numeric === options[:vv1]
158
+ {inputs: {v1: options[:vv1], v2: options[:vv2]} }
159
+ end
160
+ task :my_sum => :integer do
161
+ dependencies.last.load
162
+ end
163
+ end
164
+
165
+ job = wf.job(:my_sum, :vv1 => "2")
166
+ assert_equal 5, job.run
167
+ end
168
+
169
+ def test_dependency_jobname
170
+ wf = Workflow.annonymous_workflow "TaskInputs" do
171
+ input :v1, :integer
172
+ input :v2, :integer
173
+ task :sum => :integer do |v1,v2|
174
+ v1 + v2
175
+ end
176
+
177
+ input :vv1, :integer
178
+ input :vv2, :integer
179
+ dep :sum, :v1 => :vv1, :v2 => :vv2, :jobname => "OTHER_NAME"
180
+ task :my_sum => :integer do
181
+ dependencies.last.load
182
+ end
183
+ end
184
+
185
+ job = wf.job(:my_sum, "TEST_NAME", :vv1 => 2, :vv2 => 3)
186
+ assert_equal 5, job.run
187
+ assert_equal "TEST_NAME", job.clean_name
188
+ assert_equal "OTHER_NAME", job.step(:sum).clean_name
189
+ end
190
+
191
+ def test_no_param_last_job
192
+ wf = Workflow.annonymous_workflow "TaskInputs" do
193
+ input :v1, :integer
194
+ input :v2, :integer
195
+ task :sum => :integer do |v1,v2|
196
+ v1 + v2
197
+ end
198
+
199
+ dep :sum
200
+ task :my_sum => :integer do
201
+ dependencies.last.load
202
+ end
203
+ end
204
+
205
+ job = wf.job(:my_sum, :v1 => 2, :v2 => "3")
206
+ assert_equal 5, job.run
207
+ refute_equal Task::DEFAULT_NAME, job.name
208
+ end
209
+
210
+ def test_no_param_last_job_block
211
+ wf = Workflow.annonymous_workflow "TaskInputs" do
212
+ input :v1, :integer
213
+ input :v2, :integer
214
+ task :sum => :integer do |v1,v2|
215
+ v1 + v2
216
+ end
217
+
218
+ dep :sum do |jobname,options|
219
+ {inputs: options}
220
+ end
221
+ task :my_sum => :integer do
222
+ dependencies.last.load
223
+ end
224
+ end
225
+
226
+ job = wf.job(:my_sum, :v1 => 2, :v2 => "3")
227
+ assert_equal 5, job.run
228
+ refute_equal Task::DEFAULT_NAME, job.name
229
+ end
230
+
231
+
232
+ def test_override_inputs_block
233
+ wf = Workflow.annonymous_workflow "TaskInputs" do
234
+ input :input1, :string
235
+ task :step1 => :string do |i| i end
236
+
237
+ dep :step1, :input1 => 1 do |id,options|
238
+ {:inputs => options}
239
+ end
240
+ input :input2, :string
241
+ task :step2 => :string do |i| step(:step1).load end
242
+ end
243
+
244
+ job = wf.job(:step2, :input1 => 2)
245
+ assert_equal 1, job.run
246
+ assert_equal Task::DEFAULT_NAME, job.name
247
+ assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
248
+ end
249
+
250
+ def test_override_inputs_block_array
251
+ wf = Workflow.annonymous_workflow "TaskInputs" do
252
+ input :input1, :string
253
+ task :step1 => :string do |i| i end
254
+
255
+ dep :step1, :input1 => 1 do |id,options|
256
+ [{:inputs => options}]
257
+ end
258
+ input :input2, :string
259
+ task :step2 => :string do |i| step(:step1).load end
260
+ end
261
+
262
+ job = wf.job(:step2, :input1 => 2)
263
+ assert_equal 1, job.run
264
+ assert_equal Task::DEFAULT_NAME, job.name
265
+ assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
266
+ end
267
+
268
+ def test_override_inputs
269
+ wf = Workflow.annonymous_workflow "TaskInputs" do
270
+ input :input1, :string
271
+ task :step1 => :string do |i| i end
272
+
273
+ dep :step1, :input1 => 1
274
+ input :input2, :string
275
+ task :step2 => :string do |i| step(:step1).load end
276
+ end
277
+
278
+ job = wf.job(:step2, :input1 => 2)
279
+ assert_equal 1, job.run
280
+ assert_equal Task::DEFAULT_NAME, job.name
281
+ assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
282
+ end
283
+
284
+ def test_non_default_inputs
285
+ wf = Workflow.annonymous_workflow "TaskInputs" do
286
+ input :input1, :integer, "", 1
287
+ input :input2, :integer, "", 0
288
+ task :step1 => :string do |i1,i2| i1 + i2 end
289
+
290
+ dep :step1, :input2 => 1
291
+ task :step2 => :string do |i| step(:step1).load end
292
+
293
+ dep :step2
294
+ task :step3 => :string do |i| step(:step1).load end
295
+ end
296
+
297
+ job = wf.job(:step3, :input1 => 1)
298
+ assert_equal Task::DEFAULT_NAME, job.name
299
+ assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
300
+ assert_equal 2, job.run
301
+
302
+ job = wf.job(:step3, :input1 => 2)
303
+ assert_equal 3, job.run
304
+
305
+
306
+ job = wf.job(:step3)
307
+ assert_equal Task::DEFAULT_NAME, job.name
308
+ assert_not_equal Task::DEFAULT_NAME, job.step(:step1).name
309
+ end
310
+
175
311
  end
176
312
 
@@ -9,27 +9,54 @@ class TestWorkflowUsage < Test::Unit::TestCase
9
9
  self.name = "UsageWorkflow"
10
10
 
11
11
  self.title = "Workflow to test documentation"
12
- self.description = "Use this workflow to test if the documentation is correctly presented."
12
+ self.description = "Use this workflow to evaluate if the documentation is correctly presented."
13
13
 
14
14
  desc "Desc"
15
15
  input :array, :array, "Array"
16
- task :step1 => :string do
16
+ task :step1 => :string do |a|
17
+ a * ", "
17
18
  end
18
19
 
19
- dep :step1
20
20
  desc "Desc2"
21
+ dep :step1
22
+ input :float, :float, "Float"
23
+ task :step2 => :string do |f|
24
+ step(:step1).load + " " + f.to_s
25
+ end
26
+
27
+ desc "Desc2_fixed"
28
+ dep :step1, :array => %w(a b)
21
29
  input :float, :float, "Float"
22
- task :step2 => :string do
30
+ task :step2_fixed => :string do
31
+ end
32
+
33
+ desc 'Desc3'
34
+ task_alias :step3, UsageWorkflow, :step2
35
+
36
+ desc "Desc3"
37
+ dep :step3, :array => %w(a b)
38
+ task :step3_fixed => :string do
23
39
  end
24
40
  end
25
41
 
26
42
 
27
43
  def test_workflow_usage
28
- assert_match "test if the documentation", UsageWorkflow.usage
44
+ assert_match "evaluate if the documentation", UsageWorkflow.usage
29
45
  end
30
46
 
31
47
  def test_task_usage
32
- assert_match "Desc2", UsageWorkflow.tasks[:step2].usage
48
+ assert_match /Desc2/, UsageWorkflow.tasks[:step2].usage(UsageWorkflow)
49
+ assert_match /--array/, UsageWorkflow.tasks[:step2].usage(UsageWorkflow)
50
+ assert_match /Desc2_fixed/, UsageWorkflow.tasks[:step2_fixed].usage(UsageWorkflow)
51
+ assert_match /Desc3/, UsageWorkflow.tasks[:step3].usage(UsageWorkflow)
52
+ assert_match /--array/, UsageWorkflow.tasks[:step3].usage(UsageWorkflow)
53
+ end
54
+
55
+ def test_task_input_fixed
56
+ assert_match /Desc2_fixed/, UsageWorkflow.tasks[:step2_fixed].usage(UsageWorkflow)
57
+ refute_match /--array/, UsageWorkflow.tasks[:step2_fixed].usage(UsageWorkflow)
58
+ assert_match /Desc3/, UsageWorkflow.tasks[:step3_fixed].usage(UsageWorkflow)
59
+ refute_match /--array/, UsageWorkflow.tasks[:step3_fixed].usage(UsageWorkflow)
33
60
  end
34
61
  end
35
62
 
data/test/test_helper.rb CHANGED
@@ -33,12 +33,14 @@ class Test::Unit::TestCase
33
33
  end
34
34
 
35
35
  def tmpdir
36
- @tmpdir = Path.setup('tmp/test_tmpdir').find
36
+ @tmpdir ||= Path.setup('tmp/test_tmpdir').find
37
37
  end
38
38
 
39
39
  setup do
40
+ TmpFile.tmpdir = tmpdir.tmpfiles
40
41
  Log::ProgressBar.default_severity = 0
41
42
  Persist.cache_dir = tmpdir.var.cache
43
+ Persist::MEMORY_CACHE.clear
42
44
  Open.remote_cache_dir = tmpdir.var.cache
43
45
  Workflow.directory = tmpdir.var.jobs
44
46
  Workflow.workflows.each{|wf| wf.directory = Workflow.directory[wf.name] }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scout-gear
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0
4
+ version: 8.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-09 00:00:00.000000000 Z
11
+ date: 2023-05-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: term-ansicolor
@@ -114,17 +114,20 @@ files:
114
114
  - lib/scout/log/progress.rb
115
115
  - lib/scout/log/progress/report.rb
116
116
  - lib/scout/log/progress/util.rb
117
+ - lib/scout/log/trap.rb
117
118
  - lib/scout/meta_extension.rb
118
119
  - lib/scout/misc.rb
119
120
  - lib/scout/misc/digest.rb
120
121
  - lib/scout/misc/filesystem.rb
121
122
  - lib/scout/misc/format.rb
123
+ - lib/scout/misc/helper.rb
122
124
  - lib/scout/misc/insist.rb
123
125
  - lib/scout/misc/monitor.rb
124
126
  - lib/scout/misc/system.rb
125
127
  - lib/scout/named_array.rb
126
128
  - lib/scout/open.rb
127
129
  - lib/scout/open/lock.rb
130
+ - lib/scout/open/lock/lockfile.rb
128
131
  - lib/scout/open/remote.rb
129
132
  - lib/scout/open/stream.rb
130
133
  - lib/scout/open/util.rb
@@ -152,15 +155,26 @@ files:
152
155
  - lib/scout/simple_opt/setup.rb
153
156
  - lib/scout/tmpfile.rb
154
157
  - lib/scout/tsv.rb
158
+ - lib/scout/tsv/attach.rb
159
+ - lib/scout/tsv/change_id.rb
155
160
  - lib/scout/tsv/dumper.rb
156
161
  - lib/scout/tsv/index.rb
162
+ - lib/scout/tsv/open.rb
157
163
  - lib/scout/tsv/parser.rb
158
164
  - lib/scout/tsv/path.rb
159
165
  - lib/scout/tsv/persist.rb
160
166
  - lib/scout/tsv/persist/adapter.rb
167
+ - lib/scout/tsv/persist/fix_width_table.rb
168
+ - lib/scout/tsv/persist/serialize.rb
161
169
  - lib/scout/tsv/persist/tokyocabinet.rb
170
+ - lib/scout/tsv/transformer.rb
162
171
  - lib/scout/tsv/traverse.rb
163
172
  - lib/scout/tsv/util.rb
173
+ - lib/scout/tsv/util/filter.rb
174
+ - lib/scout/tsv/util/process.rb
175
+ - lib/scout/tsv/util/reorder.rb
176
+ - lib/scout/tsv/util/select.rb
177
+ - lib/scout/tsv/util/unzip.rb
164
178
  - lib/scout/work_queue.rb
165
179
  - lib/scout/work_queue/socket.rb
166
180
  - lib/scout/work_queue/worker.rb
@@ -173,7 +187,9 @@ files:
173
187
  - lib/scout/workflow/step/file.rb
174
188
  - lib/scout/workflow/step/info.rb
175
189
  - lib/scout/workflow/step/load.rb
190
+ - lib/scout/workflow/step/progress.rb
176
191
  - lib/scout/workflow/step/provenance.rb
192
+ - lib/scout/workflow/step/status.rb
177
193
  - lib/scout/workflow/task.rb
178
194
  - lib/scout/workflow/task/inputs.rb
179
195
  - lib/scout/workflow/usage.rb
@@ -234,19 +250,30 @@ files:
234
250
  - test/scout/test_work_queue.rb
235
251
  - test/scout/test_workflow.rb
236
252
  - test/scout/tsv/persist/test_adapter.rb
253
+ - test/scout/tsv/persist/test_fix_width_table.rb
237
254
  - test/scout/tsv/persist/test_tokyocabinet.rb
255
+ - test/scout/tsv/test_attach.rb
256
+ - test/scout/tsv/test_change_id.rb
238
257
  - test/scout/tsv/test_dumper.rb
239
258
  - test/scout/tsv/test_index.rb
259
+ - test/scout/tsv/test_open.rb
240
260
  - test/scout/tsv/test_parser.rb
241
261
  - test/scout/tsv/test_persist.rb
262
+ - test/scout/tsv/test_transformer.rb
242
263
  - test/scout/tsv/test_traverse.rb
243
264
  - test/scout/tsv/test_util.rb
265
+ - test/scout/tsv/util/test_filter.rb
266
+ - test/scout/tsv/util/test_process.rb
267
+ - test/scout/tsv/util/test_reorder.rb
268
+ - test/scout/tsv/util/test_select.rb
269
+ - test/scout/tsv/util/test_unzip.rb
244
270
  - test/scout/work_queue/test_socket.rb
245
271
  - test/scout/work_queue/test_worker.rb
246
272
  - test/scout/workflow/step/test_dependencies.rb
247
273
  - test/scout/workflow/step/test_info.rb
248
274
  - test/scout/workflow/step/test_load.rb
249
275
  - test/scout/workflow/step/test_provenance.rb
276
+ - test/scout/workflow/step/test_status.rb
250
277
  - test/scout/workflow/task/test_inputs.rb
251
278
  - test/scout/workflow/test_definition.rb
252
279
  - test/scout/workflow/test_documentation.rb