scout-gear 10.7.1 → 10.7.3
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/.vimproject +50 -30
- data/VERSION +1 -1
- data/lib/scout/association/index.rb +5 -1
- data/lib/scout/association/item.rb +1 -1
- data/lib/scout/association.rb +46 -11
- data/lib/scout/entity/format.rb +9 -4
- data/lib/scout/entity/identifiers.rb +4 -4
- data/lib/scout/entity/named_array.rb +13 -0
- data/lib/scout/entity/property.rb +3 -1
- data/lib/scout/entity.rb +7 -4
- data/lib/scout/knowledge_base/enrichment.rb +9 -0
- data/lib/scout/knowledge_base/entity.rb +143 -0
- data/lib/scout/knowledge_base/list.rb +95 -0
- data/lib/scout/knowledge_base/query.rb +96 -0
- data/lib/scout/knowledge_base/registry.rb +173 -0
- data/lib/scout/knowledge_base/traverse.rb +329 -0
- data/lib/scout/knowledge_base.rb +91 -0
- data/lib/scout/persist/tsv/adapter/base.rb +13 -1
- data/lib/scout/persist/tsv.rb +2 -1
- data/lib/scout/tsv/annotation.rb +4 -4
- data/lib/scout/tsv/attach.rb +10 -2
- data/lib/scout/tsv/change_id.rb +3 -0
- data/lib/scout/tsv/dumper.rb +34 -30
- data/lib/scout/tsv/index.rb +0 -2
- data/lib/scout/tsv/open.rb +1 -0
- data/lib/scout/tsv/parser.rb +21 -10
- data/lib/scout/tsv/path.rb +8 -0
- data/lib/scout/tsv/stream.rb +17 -10
- data/lib/scout/tsv/traverse.rb +12 -2
- data/lib/scout/tsv/util/process.rb +4 -1
- data/lib/scout/tsv/util/select.rb +8 -2
- data/lib/scout/tsv/util/sort.rb +23 -15
- data/lib/scout/tsv/util.rb +11 -2
- data/lib/scout/tsv.rb +25 -11
- data/lib/scout/workflow/definition.rb +3 -3
- data/lib/scout/workflow/deployment/orchestrator.rb +8 -5
- data/lib/scout/workflow/step/dependencies.rb +35 -11
- data/lib/scout/workflow/step/file.rb +2 -1
- data/lib/scout/workflow/step/info.rb +23 -2
- data/lib/scout/workflow/step/load.rb +5 -3
- data/lib/scout/workflow/step/progress.rb +6 -0
- data/lib/scout/workflow/step/provenance.rb +1 -1
- data/lib/scout/workflow/step/status.rb +10 -4
- data/lib/scout/workflow/step.rb +32 -12
- data/lib/scout/workflow/task/dependencies.rb +33 -24
- data/lib/scout/workflow/task/inputs.rb +40 -12
- data/lib/scout/workflow/task.rb +22 -10
- data/lib/scout/workflow/usage.rb +2 -2
- data/lib/scout/workflow.rb +1 -1
- data/scout-gear.gemspec +28 -4
- data/scout_commands/kb/config +33 -0
- data/scout_commands/kb/entities +35 -0
- data/scout_commands/kb/list +39 -0
- data/scout_commands/kb/query +78 -0
- data/scout_commands/kb/register +44 -0
- data/scout_commands/kb/show +37 -0
- data/scout_commands/kb/traverse +66 -0
- data/test/data/person/brothers +1 -1
- data/test/scout/entity/test_identifiers.rb +3 -3
- data/test/scout/entity/test_named_array.rb +21 -0
- data/test/scout/knowledge_base/test_enrichment.rb +0 -0
- data/test/scout/knowledge_base/test_entity.rb +38 -0
- data/test/scout/knowledge_base/test_list.rb +40 -0
- data/test/scout/knowledge_base/test_query.rb +39 -0
- data/test/scout/knowledge_base/test_registry.rb +16 -0
- data/test/scout/knowledge_base/test_traverse.rb +245 -0
- data/test/scout/persist/test_tsv.rb +20 -0
- data/test/scout/persist/tsv/adapter/test_base.rb +20 -0
- data/test/scout/test_association.rb +17 -3
- data/test/scout/test_entity.rb +0 -15
- data/test/scout/test_knowledge_base.rb +27 -0
- data/test/scout/test_tsv.rb +40 -0
- data/test/scout/tsv/test_dumper.rb +24 -0
- data/test/scout/tsv/test_path.rb +24 -0
- data/test/scout/tsv/test_stream.rb +93 -0
- data/test/scout/tsv/test_traverse.rb +99 -0
- data/test/scout/tsv/test_util.rb +2 -0
- data/test/scout/tsv/util/test_select.rb +22 -0
- data/test/scout/tsv/util/test_sort.rb +24 -0
- data/test/scout/workflow/step/test_dependencies.rb +26 -0
- data/test/scout/workflow/step/test_info.rb +35 -0
- data/test/scout/workflow/task/test_dependencies.rb +67 -1
- data/test/scout/workflow/task/test_inputs.rb +24 -7
- data/test/scout/workflow/test_task.rb +36 -0
- data/test/scout/workflow/test_usage.rb +0 -1
- data/test/test_helper.rb +17 -0
- metadata +27 -3
@@ -218,5 +218,98 @@ row2\tBB
|
|
218
218
|
assert_equal ["AAA"], tsv["row3"][0]
|
219
219
|
end
|
220
220
|
|
221
|
+
def test_concat_4_streams
|
222
|
+
|
223
|
+
text1=<<-EOF
|
224
|
+
#Key\tValueA
|
225
|
+
row1\tA
|
226
|
+
row2\tAA
|
227
|
+
EOF
|
228
|
+
|
229
|
+
text2=<<-EOF
|
230
|
+
#Key\tValueA
|
231
|
+
row3\tAAA
|
232
|
+
row2\tBB
|
233
|
+
EOF
|
234
|
+
|
235
|
+
text3=<<-EOF
|
236
|
+
#Key\tValueA
|
237
|
+
row4\tAAA
|
238
|
+
row5\tBB
|
239
|
+
EOF
|
240
|
+
|
241
|
+
text4=<<-EOF
|
242
|
+
#Key\tValueA
|
243
|
+
row6\tAAA
|
244
|
+
row7\tBB
|
245
|
+
EOF
|
246
|
+
|
247
|
+
s1 = StringIO.new text1
|
248
|
+
s2 = StringIO.new text2
|
249
|
+
s3 = StringIO.new text3
|
250
|
+
s4 = StringIO.new text4
|
251
|
+
tsv = TSV.open TSV.concat_streams([s1,s2,s3,s4]), :merge => true
|
252
|
+
assert_equal ["A"], tsv["row1"][0]
|
253
|
+
assert_equal ["AA","BB"], tsv["row2"][0]
|
254
|
+
assert_equal ["AAA"], tsv["row3"][0]
|
255
|
+
assert_equal ["BB"], tsv["row7"][0]
|
256
|
+
end
|
257
|
+
|
258
|
+
|
259
|
+
def test_paste_streams_repeat
|
260
|
+
text1=<<-EOF
|
261
|
+
YHR055C 856452|856450 YHR055C|YHR055C
|
262
|
+
YPR161C 856290 YPR161C
|
263
|
+
YOL138C 853982 YOL138C
|
264
|
+
YDR395W 852004 YDR395W
|
265
|
+
YGR129W 853030 YGR129W
|
266
|
+
YPR165W 856294 YPR165W
|
267
|
+
YPR098C 856213 YPR098C
|
268
|
+
YPL015C 856092 YPL015C
|
269
|
+
YCL050C 850307 YCL050C
|
270
|
+
YAL069W YAL069W
|
271
|
+
EOF
|
272
|
+
|
273
|
+
text2=<<-EOF
|
274
|
+
YHR055C CUP1-2 AAA34541
|
275
|
+
YHR055C CUP1-2 AAB68382
|
276
|
+
YHR055C CUP1-2 AAS56843
|
277
|
+
YHR055C CUP1-2 DAA06748
|
278
|
+
YHR055C CUP1-2 AAB68384
|
279
|
+
YHR055C CUP1-2 AAT93096
|
280
|
+
YHR055C CUP1-2 DAA06746
|
281
|
+
YPR161C SGV1 BAA14347
|
282
|
+
YPR161C SGV1 AAB59314
|
283
|
+
YPR161C SGV1 AAB68058
|
284
|
+
EOF
|
285
|
+
|
286
|
+
s1 = StringIO.new text1
|
287
|
+
s2 = StringIO.new text2
|
288
|
+
tsv = TSV.open(TSV.paste_streams([s1,s2], sort:true, one2one: false), merge: true, one2one: false)
|
289
|
+
assert_equal 2, tsv["YHR055C"][0].length
|
290
|
+
assert_equal %w(SGV1) * 3, tsv["YPR161C"][2]
|
291
|
+
end
|
292
|
+
|
293
|
+
def test_paste_stream_flat
|
294
|
+
text1=<<-EOF
|
295
|
+
#: :sep=" "
|
296
|
+
#Row LabelA LabelB LabelC
|
297
|
+
row1 A B C
|
298
|
+
row2 AA BB CC
|
299
|
+
row3 AAA BBB CCC
|
300
|
+
EOF
|
301
|
+
|
302
|
+
text2=<<-EOF
|
303
|
+
#: :sep=" "#:type=:flat
|
304
|
+
#Row Flat
|
305
|
+
row1 f1 f2 f3
|
306
|
+
EOF
|
307
|
+
|
308
|
+
|
309
|
+
s1 = StringIO.new text1
|
310
|
+
s2 = StringIO.new text2
|
311
|
+
tsv = TSV.open TSV.paste_streams([s1,s2], :sep => " ", :type => :double)
|
312
|
+
assert_include tsv["row1"], %w(f1 f2 f3)
|
313
|
+
end
|
221
314
|
end
|
222
315
|
|
@@ -275,5 +275,104 @@ row3 a
|
|
275
275
|
assert_equal %w(a aa aaa), data["row1"]
|
276
276
|
end
|
277
277
|
end
|
278
|
+
|
279
|
+
def test_traverse_entity_list
|
280
|
+
m = Module.new do
|
281
|
+
extend Entity
|
282
|
+
self.format = "ValueA"
|
283
|
+
end
|
284
|
+
|
285
|
+
content =<<-EOF
|
286
|
+
#Id ValueA
|
287
|
+
row1 a
|
288
|
+
row2 A
|
289
|
+
row3 a
|
290
|
+
EOF
|
291
|
+
|
292
|
+
TmpFile.with_file(content) do |filename|
|
293
|
+
tsv = TSV.open(File.open(filename), :sep => /\s+/, :type => :list)
|
294
|
+
data = {}
|
295
|
+
k, f = tsv.traverse "Id", ["ValueA"] do |k,v|
|
296
|
+
data[k] = v
|
297
|
+
end
|
298
|
+
assert_equal %w(a), data["row1"]
|
299
|
+
assert Annotation::AnnotatedObject === data["row1"]
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
def test_traverse_entity_double
|
304
|
+
m = Module.new do
|
305
|
+
extend Entity
|
306
|
+
self.format = "ValueA"
|
307
|
+
end
|
308
|
+
|
309
|
+
content =<<-EOF
|
310
|
+
#Id ValueA
|
311
|
+
row1 a|aa|aaa
|
312
|
+
row2 A
|
313
|
+
row3 a
|
314
|
+
EOF
|
315
|
+
|
316
|
+
TmpFile.with_file(content) do |filename|
|
317
|
+
tsv = TSV.open(File.open(filename), :sep => /\s+/)
|
318
|
+
data = {}
|
319
|
+
k, f = tsv.traverse "Id", ["ValueA"] do |k,v|
|
320
|
+
data[k] = v
|
321
|
+
end
|
322
|
+
assert_equal %w(a aa aaa), data["row1"][0]
|
323
|
+
assert NamedArray === data["row1"]
|
324
|
+
assert AnnotatedArray === data["row1"]["ValueA"]
|
325
|
+
end
|
326
|
+
end
|
327
|
+
|
328
|
+
|
329
|
+
def test_traverse_entity_flat
|
330
|
+
m = Module.new do
|
331
|
+
extend Entity
|
332
|
+
self.format = "ValueA"
|
333
|
+
end
|
334
|
+
|
335
|
+
content =<<-EOF
|
336
|
+
#Id ValueA
|
337
|
+
row1 a aa aaa
|
338
|
+
row2 A
|
339
|
+
row3 a
|
340
|
+
EOF
|
341
|
+
|
342
|
+
TmpFile.with_file(content) do |filename|
|
343
|
+
tsv = TSV.open(File.open(filename), :sep => /\s+/, :type => :flat)
|
344
|
+
data = {}
|
345
|
+
k, f = tsv.traverse "Id", ["ValueA"] do |k,v|
|
346
|
+
data[k] = v
|
347
|
+
end
|
348
|
+
assert_equal %w(a aa aaa), data["row1"]
|
349
|
+
assert AnnotatedArray === data["row1"]
|
350
|
+
assert Annotation::AnnotatedObject === data["row1"][0]
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def test_traverse_entity_single
|
355
|
+
m = Module.new do
|
356
|
+
extend Entity
|
357
|
+
self.format = "ValueA"
|
358
|
+
end
|
359
|
+
|
360
|
+
content =<<-EOF
|
361
|
+
#Id ValueA
|
362
|
+
row1 a
|
363
|
+
row2 A
|
364
|
+
row3 a
|
365
|
+
EOF
|
366
|
+
|
367
|
+
TmpFile.with_file(content) do |filename|
|
368
|
+
tsv = TSV.open(File.open(filename), :sep => /\s+/, :type => :single)
|
369
|
+
data = {}
|
370
|
+
k, f = tsv.traverse "Id", ["ValueA"] do |k,v|
|
371
|
+
data[k] = v
|
372
|
+
end
|
373
|
+
assert_equal "a", data["row1"]
|
374
|
+
assert Annotation::AnnotatedObject === data["row1"]
|
375
|
+
end
|
376
|
+
end
|
278
377
|
end
|
279
378
|
|
data/test/scout/tsv/test_util.rb
CHANGED
@@ -16,6 +16,8 @@ row2 a a id3
|
|
16
16
|
TSV.open(filename, :sep => " " )
|
17
17
|
end
|
18
18
|
assert_equal %w(row1 row2), tsv.collect{|k,v| k }
|
19
|
+
refute NamedArray === tsv.collect{|k,v| v }.first
|
20
|
+
tsv.unnamed = false
|
19
21
|
assert NamedArray === tsv.collect{|k,v| v }.first
|
20
22
|
assert "row1", tsv["row1"].key
|
21
23
|
end
|
@@ -23,6 +23,28 @@ row2 AA BB Id33
|
|
23
23
|
assert_equal ['row2'], s.keys
|
24
24
|
end
|
25
25
|
|
26
|
+
def test_select_invert
|
27
|
+
content =<<-'EOF'
|
28
|
+
#: :sep=/\s+/#:type=:double
|
29
|
+
#Id ValueA ValueB OtherID
|
30
|
+
row1 a|aa|aaa b Id1|Id2
|
31
|
+
row2 A B Id3
|
32
|
+
row2 AA BB Id33
|
33
|
+
EOF
|
34
|
+
|
35
|
+
tsv = TmpFile.with_file(content) do |filename|
|
36
|
+
TSV.open(filename, :persist => true)
|
37
|
+
end
|
38
|
+
|
39
|
+
s = tsv.select("ValueA" => 'a')
|
40
|
+
|
41
|
+
assert_equal ['row1'], s.keys
|
42
|
+
|
43
|
+
s = tsv.select({"ValueA" => 'a'}, true)
|
44
|
+
|
45
|
+
assert_equal ['row2'], s.keys
|
46
|
+
end
|
47
|
+
|
26
48
|
def test_select_values
|
27
49
|
content =<<-'EOF'
|
28
50
|
#: :sep=" "
|
@@ -46,5 +46,29 @@ row2 A b C
|
|
46
46
|
assert_equal %w(row1 row2), tsv.sort("ValueB"){|a,b| a[1] <=> b[1] }.collect{|k,v| k}
|
47
47
|
end
|
48
48
|
end
|
49
|
+
|
50
|
+
def test_sort_entity
|
51
|
+
content =<<-EOF
|
52
|
+
#ID ValueA ValueB Comment NumericValue
|
53
|
+
row1 a B c 20
|
54
|
+
row2 A b C 100
|
55
|
+
row3 A b C 3
|
56
|
+
EOF
|
57
|
+
|
58
|
+
m = Module.new do
|
59
|
+
extend Entity
|
60
|
+
self.format = "NumericValue"
|
61
|
+
|
62
|
+
def <=>(b)
|
63
|
+
self.to_f <=> b.to_f
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
TmpFile.with_file(content) do |filename|
|
69
|
+
tsv = TSV.open(File.open(filename), :type => :list, :sep => /\s/)
|
70
|
+
assert_equal %w(row3 row1 row2), tsv.sort("NumericValue", true)
|
71
|
+
end
|
72
|
+
end
|
49
73
|
end
|
50
74
|
|
@@ -89,5 +89,31 @@ class TestStepDependencies < Test::Unit::TestCase
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
92
|
+
|
93
|
+
def test_recursive_inputs_priority
|
94
|
+
tmpfile = tmpdir.test_step
|
95
|
+
step1 = Step.new tmpfile.step1, NamedArray.setup(["1"], %w(input1)) do |s|
|
96
|
+
s.length
|
97
|
+
end
|
98
|
+
|
99
|
+
step2 = Step.new tmpfile.step2, NamedArray.setup(["2"], %w(input1)) do |times|
|
100
|
+
step1 = dependencies.first
|
101
|
+
(step1.inputs.first + " has " + step1.load.to_s + " characters") * times
|
102
|
+
end
|
103
|
+
|
104
|
+
step3 = Step.new tmpfile.step2, NamedArray.setup([], %w()) do |times|
|
105
|
+
step1 = dependencies.first
|
106
|
+
(step1.inputs.first + " has " + step1.load.to_s + " characters") * times
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
step2.dependencies = [step1]
|
111
|
+
|
112
|
+
step3.dependencies = [step1, step2]
|
113
|
+
|
114
|
+
assert_equal "2", step2.inputs["input1"]
|
115
|
+
assert_equal "2", step2.recursive_inputs["input1"]
|
116
|
+
assert_equal "1", step3.recursive_inputs["input1"]
|
117
|
+
end
|
92
118
|
end
|
93
119
|
|
@@ -58,4 +58,39 @@ class TestStepInfo < Test::Unit::TestCase
|
|
58
58
|
assert_equal %w(Message1 Message2), step1.messages
|
59
59
|
end
|
60
60
|
end
|
61
|
+
|
62
|
+
def test_overriden_fixed
|
63
|
+
TmpFile.with_file("HELLO") do |file|
|
64
|
+
wf = Module.new do
|
65
|
+
extend Workflow
|
66
|
+
|
67
|
+
self.name = "TestWF"
|
68
|
+
|
69
|
+
task :message => :string do
|
70
|
+
"HI"
|
71
|
+
end
|
72
|
+
|
73
|
+
dep :message
|
74
|
+
task :say => :string do
|
75
|
+
"I say #{step(:message).load}"
|
76
|
+
end
|
77
|
+
|
78
|
+
task_alias :say_hello, self, :say, "TestWF#message" => file, :not_overriden => true
|
79
|
+
end
|
80
|
+
|
81
|
+
assert_equal "I say HI", wf.job(:say).run
|
82
|
+
|
83
|
+
job1 = wf.job(:say, "TestWF#message" => file)
|
84
|
+
assert_equal "I say HELLO", job1.run
|
85
|
+
|
86
|
+
job2 = wf.job(:say_hello)
|
87
|
+
assert_equal "I say HELLO", job2.run
|
88
|
+
|
89
|
+
assert job1.overriden?
|
90
|
+
refute job2.overriden?
|
91
|
+
|
92
|
+
assert job1.overriden_deps.any?
|
93
|
+
refute job2.overriden_deps.any?
|
94
|
+
end
|
95
|
+
end
|
61
96
|
end
|
@@ -353,5 +353,71 @@ class TestTaskDependencies < Test::Unit::TestCase
|
|
353
353
|
assert_equal "0", wf.job(:step2, :input1 => "-2").run
|
354
354
|
end
|
355
355
|
|
356
|
-
|
356
|
+
def test_jobname_input
|
357
|
+
wf = Workflow.annonymous_workflow "JobnameInput" do
|
358
|
+
input :input1, :string, "", nil, jobname: true
|
359
|
+
task :step1 => :string do |i1|
|
360
|
+
i1
|
361
|
+
end
|
362
|
+
|
363
|
+
input :input2, :string, "", "Hi"
|
364
|
+
dep :step1 do |jobname,options|
|
365
|
+
{jobname: options[:input2]}
|
366
|
+
end
|
367
|
+
task :step2 do
|
368
|
+
step(:step1).load
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
assert_equal "Hi", wf.job(:step2).run.strip
|
373
|
+
assert_equal "Hello", wf.job(:step2, input2: "Hello").run.strip
|
357
374
|
|
375
|
+
job = wf.job(:step2, input1: "Hello")
|
376
|
+
assert_equal "Hello", job.run
|
377
|
+
assert_equal "Default", job.clean_name
|
378
|
+
assert_equal "Hi", job.step(:step1).clean_name
|
379
|
+
end
|
380
|
+
|
381
|
+
def test_jobname_input_reset
|
382
|
+
wf = Workflow.annonymous_workflow "JobnameInput" do
|
383
|
+
input :input1, :string, "", nil, jobname: true
|
384
|
+
task :step1 => :string do |i1|
|
385
|
+
i1
|
386
|
+
end
|
387
|
+
|
388
|
+
input :input2, :string, "", "Hi", jobname: true
|
389
|
+
dep :step1, input1: "Name1", jobname: nil do |jobname,options|
|
390
|
+
{inputs: options}
|
391
|
+
end
|
392
|
+
task :step2 do
|
393
|
+
step(:step1).load
|
394
|
+
end
|
395
|
+
|
396
|
+
end
|
397
|
+
|
398
|
+
job = wf.job(:step2, input2: "Name2")
|
399
|
+
assert_equal "Name2", job.clean_name
|
400
|
+
assert_equal "Name1", job.step(:step1).clean_name
|
401
|
+
assert_equal "Name", wf.job(:step1, input1: "Name").clean_name
|
402
|
+
end
|
403
|
+
|
404
|
+
def test_non_default_inputs_ignore_hidden
|
405
|
+
wf = Workflow.annonymous_workflow "JobnameInput" do
|
406
|
+
input :input1, :string, "", nil, jobname: true
|
407
|
+
task :step1 => :string do |i1|
|
408
|
+
i1
|
409
|
+
end
|
410
|
+
|
411
|
+
dep :step1, jobname: nil, input1: :placeholder do |jobname,options|
|
412
|
+
{inputs: options.merge(input1: "TEST") }
|
413
|
+
end
|
414
|
+
task :step2 do
|
415
|
+
step(:step1).load
|
416
|
+
end
|
417
|
+
|
418
|
+
end
|
419
|
+
|
420
|
+
job = wf.job(:step2, input2: "Name2")
|
421
|
+
assert job.non_default_inputs.empty?
|
422
|
+
end
|
423
|
+
end
|
@@ -36,17 +36,17 @@ class TestTaskInput < Test::Unit::TestCase
|
|
36
36
|
def test_assign_inputs
|
37
37
|
task = self.example_task
|
38
38
|
|
39
|
-
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))
|
39
|
+
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))[1]
|
40
40
|
|
41
41
|
TmpFile.with_file("1\n2") do |integer_array_file|
|
42
|
-
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => integer_array_file)
|
42
|
+
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => integer_array_file)[1]
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_boolean
|
47
47
|
task = self.example_task
|
48
48
|
|
49
|
-
assert_equal [:boolean], task.assign_inputs(:string => "String", :integer => 1, :boolean => true)
|
49
|
+
assert_equal [:boolean], task.assign_inputs(:string => "String", :integer => 1, :boolean => true)[1]
|
50
50
|
|
51
51
|
TmpFile.with_file("1\n2") do |integer_array_file|
|
52
52
|
Open.open(integer_array_file) do |f|
|
@@ -60,7 +60,7 @@ class TestTaskInput < Test::Unit::TestCase
|
|
60
60
|
def test_keep_stream
|
61
61
|
task = self.example_task
|
62
62
|
|
63
|
-
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))
|
63
|
+
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))[1]
|
64
64
|
|
65
65
|
TmpFile.with_file("1\n2") do |integer_array_file|
|
66
66
|
Open.open(integer_array_file) do |f|
|
@@ -76,15 +76,15 @@ class TestTaskInput < Test::Unit::TestCase
|
|
76
76
|
task = self.example_task
|
77
77
|
|
78
78
|
TmpFile.with_file("2\n3") do |integer_array_file|
|
79
|
-
assert_equal task.process_inputs(:string => "String", :integer => 2, :integer_array => %w(2 3))
|
80
|
-
task.process_inputs(:string => "String", :integer => 2, :integer_array => integer_array_file)
|
79
|
+
assert_equal task.process_inputs(:string => "String", :integer => 2, :integer_array => %w(2 3))[1],
|
80
|
+
task.process_inputs(:string => "String", :integer => 2, :integer_array => integer_array_file)[1]
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
84
|
def test_digest_stream
|
85
85
|
task = self.example_task
|
86
86
|
|
87
|
-
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))
|
87
|
+
assert_equal [:integer], task.assign_inputs(:string => "String", :integer => 2, :integer_array => %w(1 2))[1]
|
88
88
|
|
89
89
|
TmpFile.with_file("1\n2") do |integer_array_file|
|
90
90
|
hash1 = Open.open(integer_array_file) do |f|
|
@@ -271,4 +271,21 @@ class TestTaskInput < Test::Unit::TestCase
|
|
271
271
|
|
272
272
|
assert w.tasks[:repeat_salute_miguel].recursive_inputs.empty?
|
273
273
|
end
|
274
|
+
|
275
|
+
def test_jobname
|
276
|
+
w = Module.new do
|
277
|
+
extend Workflow
|
278
|
+
|
279
|
+
self.name = "SaluteWF"
|
280
|
+
|
281
|
+
input :name, :string, "Name", "Peter", jobname: true
|
282
|
+
task :salute => :string do |name|
|
283
|
+
"Hi #{name}"
|
284
|
+
end
|
285
|
+
|
286
|
+
end
|
287
|
+
|
288
|
+
assert_equal [["Paul"], [:name], nil], w.tasks[:salute].assign_inputs({}, "Paul")
|
289
|
+
assert_equal [["Paul"], [:name], :name], w.tasks[:salute].assign_inputs({name: "Paul"}, "Paul")
|
290
|
+
end
|
274
291
|
end
|
@@ -47,4 +47,40 @@ class TestTask < Test::Unit::TestCase
|
|
47
47
|
wf.job(:task_499)
|
48
48
|
end
|
49
49
|
end
|
50
|
+
|
51
|
+
def test_dependencies_jobname_input
|
52
|
+
wf = Module.new do
|
53
|
+
extend Workflow
|
54
|
+
self.name = "TestWF"
|
55
|
+
|
56
|
+
input :name, :string, "Name", nil, jobname: true
|
57
|
+
task :step1 => :string do |name|
|
58
|
+
name
|
59
|
+
end
|
60
|
+
|
61
|
+
dep :step1
|
62
|
+
task :step2 => :string do
|
63
|
+
step(:step1).load
|
64
|
+
end
|
65
|
+
|
66
|
+
dep :step1, jobname: nil
|
67
|
+
task :step3 => :string do
|
68
|
+
step(:step1).load
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
Log.with_severity 0 do
|
73
|
+
job = wf.job(:step2, nil, name: "Name")
|
74
|
+
assert_equal "Name", job.run
|
75
|
+
assert_equal "Name", job.step(:step1).name
|
76
|
+
job = wf.job(:step2, "Name2", name: "Name")
|
77
|
+
assert_equal "Name", job.run
|
78
|
+
assert_equal "Name2", job.step(:step1).clean_name
|
79
|
+
job = wf.job(:step3, "Name2", name: "Name")
|
80
|
+
assert_equal "Name", job.run
|
81
|
+
assert_equal "Name", job.step(:step1).name
|
82
|
+
|
83
|
+
assert_equal "Name", wf.job(:step1, "Test", name: "Name").inputs[:name]
|
84
|
+
end
|
85
|
+
end
|
50
86
|
end
|
data/test/test_helper.rb
CHANGED
@@ -72,3 +72,20 @@ class Test::Unit::TestCase
|
|
72
72
|
Test::Unit::TestCase.datafile_test(file)
|
73
73
|
end
|
74
74
|
end
|
75
|
+
|
76
|
+
module Object::Person
|
77
|
+
extend Entity
|
78
|
+
|
79
|
+
annotation :language
|
80
|
+
|
81
|
+
property :salutation do
|
82
|
+
case language
|
83
|
+
when 'es'
|
84
|
+
"Hola #{self}"
|
85
|
+
else
|
86
|
+
"Hi #{self}"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
Object::Person.add_identifiers Test::Unit::TestCase.datafile_test(:person).identifiers
|
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: 10.7.
|
4
|
+
version: 10.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: scout-essentials
|
@@ -153,8 +153,16 @@ files:
|
|
153
153
|
- lib/scout/entity.rb
|
154
154
|
- lib/scout/entity/format.rb
|
155
155
|
- lib/scout/entity/identifiers.rb
|
156
|
+
- lib/scout/entity/named_array.rb
|
156
157
|
- lib/scout/entity/object.rb
|
157
158
|
- lib/scout/entity/property.rb
|
159
|
+
- lib/scout/knowledge_base.rb
|
160
|
+
- lib/scout/knowledge_base/enrichment.rb
|
161
|
+
- lib/scout/knowledge_base/entity.rb
|
162
|
+
- lib/scout/knowledge_base/list.rb
|
163
|
+
- lib/scout/knowledge_base/query.rb
|
164
|
+
- lib/scout/knowledge_base/registry.rb
|
165
|
+
- lib/scout/knowledge_base/traverse.rb
|
158
166
|
- lib/scout/offsite.rb
|
159
167
|
- lib/scout/offsite/exceptions.rb
|
160
168
|
- lib/scout/offsite/ssh.rb
|
@@ -236,6 +244,13 @@ files:
|
|
236
244
|
- scout_commands/doc
|
237
245
|
- scout_commands/find
|
238
246
|
- scout_commands/glob
|
247
|
+
- scout_commands/kb/config
|
248
|
+
- scout_commands/kb/entities
|
249
|
+
- scout_commands/kb/list
|
250
|
+
- scout_commands/kb/query
|
251
|
+
- scout_commands/kb/register
|
252
|
+
- scout_commands/kb/show
|
253
|
+
- scout_commands/kb/traverse
|
239
254
|
- scout_commands/log
|
240
255
|
- scout_commands/offsite
|
241
256
|
- scout_commands/rbbt
|
@@ -263,8 +278,15 @@ files:
|
|
263
278
|
- test/scout/association/test_item.rb
|
264
279
|
- test/scout/entity/test_format.rb
|
265
280
|
- test/scout/entity/test_identifiers.rb
|
281
|
+
- test/scout/entity/test_named_array.rb
|
266
282
|
- test/scout/entity/test_object.rb
|
267
283
|
- test/scout/entity/test_property.rb
|
284
|
+
- test/scout/knowledge_base/test_enrichment.rb
|
285
|
+
- test/scout/knowledge_base/test_entity.rb
|
286
|
+
- test/scout/knowledge_base/test_list.rb
|
287
|
+
- test/scout/knowledge_base/test_query.rb
|
288
|
+
- test/scout/knowledge_base/test_registry.rb
|
289
|
+
- test/scout/knowledge_base/test_traverse.rb
|
268
290
|
- test/scout/offsite/test_ssh.rb
|
269
291
|
- test/scout/offsite/test_step.rb
|
270
292
|
- test/scout/offsite/test_sync.rb
|
@@ -285,6 +307,7 @@ files:
|
|
285
307
|
- test/scout/persist/tsv/test_serialize.rb
|
286
308
|
- test/scout/test_association.rb
|
287
309
|
- test/scout/test_entity.rb
|
310
|
+
- test/scout/test_knowledge_base.rb
|
288
311
|
- test/scout/test_offsite.rb
|
289
312
|
- test/scout/test_semaphore.rb
|
290
313
|
- test/scout/test_tsv.rb
|
@@ -300,6 +323,7 @@ files:
|
|
300
323
|
- test/scout/tsv/test_index.rb
|
301
324
|
- test/scout/tsv/test_open.rb
|
302
325
|
- test/scout/tsv/test_parser.rb
|
326
|
+
- test/scout/tsv/test_path.rb
|
303
327
|
- test/scout/tsv/test_stream.rb
|
304
328
|
- test/scout/tsv/test_transformer.rb
|
305
329
|
- test/scout/tsv/test_traverse.rb
|
@@ -353,7 +377,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
353
377
|
- !ruby/object:Gem::Version
|
354
378
|
version: '0'
|
355
379
|
requirements: []
|
356
|
-
rubygems_version: 3.5.
|
380
|
+
rubygems_version: 3.5.23
|
357
381
|
signing_key:
|
358
382
|
specification_version: 4
|
359
383
|
summary: basic gear for scouts
|