scout-gear 7.2.0 → 8.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.
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