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
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/knowledge_base'
|
5
|
+
|
6
|
+
|
7
|
+
class TestKnowledgeBaseQuery < Test::Unit::TestCase
|
8
|
+
def test_types
|
9
|
+
TmpFile.with_dir do |dir|
|
10
|
+
kb = KnowledgeBase.new dir
|
11
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
12
|
+
kb.register :parents, datafile_test(:person).parents
|
13
|
+
|
14
|
+
assert_include kb.all_databases, :brothers
|
15
|
+
|
16
|
+
assert_equal Person, kb.target_type(:parents)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_options
|
21
|
+
TmpFile.with_dir do |dir|
|
22
|
+
kb = KnowledgeBase.new dir
|
23
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
24
|
+
kb.entity_options = { "Person" => {language: "es"} }
|
25
|
+
|
26
|
+
assert_include kb.entity_options_for("Person"), :language
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_identify
|
31
|
+
TmpFile.with_dir do |dir|
|
32
|
+
kb = KnowledgeBase.new dir
|
33
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
34
|
+
|
35
|
+
assert_equal "Miki", kb.identify(:brothers, "001")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/knowledge_base'
|
5
|
+
class TestKnowledgeBaseQuery < Test::Unit::TestCase
|
6
|
+
def test_entity_list
|
7
|
+
TmpFile.with_dir do |dir|
|
8
|
+
kb = KnowledgeBase.new dir
|
9
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
10
|
+
kb.register :parents, datafile_test(:person).parents
|
11
|
+
|
12
|
+
list = kb.subset(:brothers, :all).target_entity
|
13
|
+
|
14
|
+
kb.save_list("bro_and_sis", list)
|
15
|
+
assert_equal list, kb.load_list("bro_and_sis")
|
16
|
+
|
17
|
+
assert_include kb.list_files["Person"], "bro_and_sis"
|
18
|
+
kb.delete_list("bro_and_sis")
|
19
|
+
|
20
|
+
refute kb.list_files["simple"]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_simple_list
|
25
|
+
list = ["Miki", "Isa"]
|
26
|
+
TmpFile.with_dir do |dir|
|
27
|
+
kb = KnowledgeBase.new dir
|
28
|
+
|
29
|
+
kb.save_list("bro_and_sis", list)
|
30
|
+
|
31
|
+
assert_equal list, kb.load_list("bro_and_sis")
|
32
|
+
|
33
|
+
assert_include kb.list_files["simple"], "bro_and_sis"
|
34
|
+
|
35
|
+
kb.delete_list("bro_and_sis")
|
36
|
+
|
37
|
+
refute kb.list_files["simple"]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/knowledge_base'
|
5
|
+
|
6
|
+
|
7
|
+
class TestKnowledgeBaseQuery < Test::Unit::TestCase
|
8
|
+
def test_query
|
9
|
+
TmpFile.with_dir do |dir|
|
10
|
+
kb = KnowledgeBase.new dir
|
11
|
+
kb.entity_options = {"Person" => {language: "es"}}
|
12
|
+
|
13
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
14
|
+
kb.register :parents, datafile_test(:person).parents, entity_options: {"Person" => {language: "en"}}
|
15
|
+
|
16
|
+
assert_include kb.all_databases, :brothers
|
17
|
+
|
18
|
+
matches = kb.subset(:parents, :all)
|
19
|
+
assert_include matches, "Clei~Domingo"
|
20
|
+
|
21
|
+
matches = kb.subset(:parents, target: :all, source: ["Miki"])
|
22
|
+
assert_include matches, "Miki~Juan"
|
23
|
+
|
24
|
+
|
25
|
+
assert_include kb.children(:parents, "Miki").target, "Juan"
|
26
|
+
assert_include kb.children(:brothers, "Miki").target, "Isa"
|
27
|
+
|
28
|
+
parents = matches.target_entity
|
29
|
+
|
30
|
+
assert_include parents, "Juan"
|
31
|
+
assert Person === parents.first
|
32
|
+
assert_equal "en", parents.first.language
|
33
|
+
|
34
|
+
|
35
|
+
matches = kb.subset(:brothers, target: :all, source: ["Miki"])
|
36
|
+
assert_equal "es", matches.first.source_entity.language
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/knowledge_base'
|
5
|
+
|
6
|
+
class TestKnowlegeBase < Test::Unit::TestCase
|
7
|
+
def test_registry
|
8
|
+
TmpFile.with_dir do |dir|
|
9
|
+
brothers = datafile_test(:person).brothers
|
10
|
+
kb = KnowledgeBase.new dir
|
11
|
+
kb.register :brothers, brothers
|
12
|
+
assert_include kb.all_databases, :brothers
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,245 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/knowledge_base'
|
5
|
+
class TestKnowledgeBaseTraverse < Test::Unit::TestCase
|
6
|
+
def test_traverse_single
|
7
|
+
TmpFile.with_dir do |dir|
|
8
|
+
kb = KnowledgeBase.new dir
|
9
|
+
kb.entity_options = {"TestKnowledgeBaseQuery::Person" => {test: "Default"}}
|
10
|
+
|
11
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
12
|
+
kb.register :parents, datafile_test(:person).parents, entity_options: {"TestKnowledgeBaseQuery::Person" => {test: "Parents"}}
|
13
|
+
|
14
|
+
rules = []
|
15
|
+
rules << "Miki brothers ?1"
|
16
|
+
res = kb.traverse rules
|
17
|
+
assert_include res.first["?1"], "Isa"
|
18
|
+
|
19
|
+
rules = []
|
20
|
+
rules << "Miki parents ?1"
|
21
|
+
entities, paths = kb.traverse rules
|
22
|
+
assert_include paths.first.first.info, "Type of parent"
|
23
|
+
|
24
|
+
rules = []
|
25
|
+
rules << "?1 parents Domingo"
|
26
|
+
entities, paths = kb.traverse rules
|
27
|
+
assert_include entities["?1"], "Clei"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_traverse_multiple
|
32
|
+
TmpFile.with_dir do |dir|
|
33
|
+
kb = KnowledgeBase.new dir
|
34
|
+
|
35
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
36
|
+
kb.register :parents, datafile_test(:person).parents
|
37
|
+
kb.register :marriages, datafile_test(:person).marriages, source: "=>Alias", target: "=>Alias"
|
38
|
+
|
39
|
+
rules = []
|
40
|
+
rules << "Miki marriages ?1"
|
41
|
+
rules << "?1 brothers ?2"
|
42
|
+
res = kb.traverse rules
|
43
|
+
assert_include res.first["?2"], "Guille"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_traverse_condition
|
48
|
+
TmpFile.with_dir do |dir|
|
49
|
+
kb = KnowledgeBase.new dir
|
50
|
+
|
51
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
52
|
+
kb.register :parents, datafile_test(:person).parents
|
53
|
+
kb.register :marriages, datafile_test(:person).marriages, source: "=>Alias", target: "=>Alias"
|
54
|
+
|
55
|
+
rules = []
|
56
|
+
rules << "Miki parents ?1 - 'Type of parent=father'"
|
57
|
+
entities, paths = kb.traverse rules
|
58
|
+
assert_equal entities["?1"], ["Juan"]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_traverse_identify
|
63
|
+
TmpFile.with_dir do |dir|
|
64
|
+
kb = KnowledgeBase.new dir
|
65
|
+
kb.entity_options = {"TestKnowledgeBaseQuery::Person" => {test: "Default"}}
|
66
|
+
|
67
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
68
|
+
kb.register :parents, datafile_test(:person).parents, entity_options: {"TestKnowledgeBaseQuery::Person" => {test: "Parents"}}
|
69
|
+
|
70
|
+
rules = []
|
71
|
+
rules << "001 brothers ?1"
|
72
|
+
res = kb.traverse rules
|
73
|
+
assert_include res.first["?1"], "Isa"
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_traverse_target
|
78
|
+
TmpFile.with_dir do |dir|
|
79
|
+
kb = KnowledgeBase.new dir
|
80
|
+
|
81
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
82
|
+
kb.register :parents, datafile_test(:person).parents
|
83
|
+
|
84
|
+
rules = []
|
85
|
+
rules << "?target =brothers 001"
|
86
|
+
rules << "?1 brothers ?target"
|
87
|
+
res = kb.traverse rules
|
88
|
+
assert_include res.first["?1"], "Isa"
|
89
|
+
assert_include res.first["?target"], "Miki"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_traverse_translate_multiple
|
94
|
+
TmpFile.with_dir do |dir|
|
95
|
+
kb = KnowledgeBase.new dir
|
96
|
+
|
97
|
+
kb.register :brothers, datafile_test(:person).brothers, undirected: true
|
98
|
+
kb.register :parents, datafile_test(:person).parents
|
99
|
+
kb.register :marriages, datafile_test(:person).marriages, undirected: true
|
100
|
+
|
101
|
+
rules = []
|
102
|
+
rules << "Guille brothers ?1"
|
103
|
+
rules << "?2 =marriages ?1"
|
104
|
+
rules << "?2 marriages ?3"
|
105
|
+
entities, paths = kb.traverse rules
|
106
|
+
assert_include entities["?3"], "001"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
|
113
|
+
#require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
114
|
+
#require 'rbbt/knowledge_base/traverse'
|
115
|
+
#require 'rbbt/workflow'
|
116
|
+
#
|
117
|
+
#class TestKnowledgeBaseTraverse < Test::Unit::TestCase
|
118
|
+
# def with_kb(&block)
|
119
|
+
# keyword_test :organism do
|
120
|
+
# require 'rbbt/sources/organism'
|
121
|
+
# organism = Organism.default_code("Hsa")
|
122
|
+
# TmpFile.with_file do |tmpdir|
|
123
|
+
# kb = KnowledgeBase.new tmpdir
|
124
|
+
# kb.namespace = organism
|
125
|
+
# kb.format = {"Gene" => "Associated Gene Name"}
|
126
|
+
#
|
127
|
+
# kb.register :gene_ages, datadir_test.gene_ages, :source => "=>Associated Gene Name"
|
128
|
+
#
|
129
|
+
# kb.register :CollecTRI, datadir_test.CollecTRI,
|
130
|
+
# :source => "Transcription Factor=~Associated Gene Name",
|
131
|
+
# :target => "Target Gene=~Associated Gene Name",
|
132
|
+
# :fields => ["[ExTRI] Confidence", "[ExTRI] PMID"]
|
133
|
+
#
|
134
|
+
# yield kb
|
135
|
+
# end
|
136
|
+
# end
|
137
|
+
# end
|
138
|
+
#
|
139
|
+
# def test_traverse_simple
|
140
|
+
# with_kb do |kb|
|
141
|
+
# rules = []
|
142
|
+
# rules << "SMAD4 gene_ages ?1"
|
143
|
+
# res = kb.traverse rules
|
144
|
+
# assert_include res.first["?1"], "Bilateria"
|
145
|
+
# end
|
146
|
+
# end
|
147
|
+
#
|
148
|
+
# def test_traverse_CollecTRI
|
149
|
+
# with_kb do |kb|
|
150
|
+
# rules = []
|
151
|
+
# rules << "SMAD4 CollecTRI ?1 - '[ExTRI] Confidence=High'"
|
152
|
+
# res = kb.traverse rules
|
153
|
+
# assert res.last.any?
|
154
|
+
# end
|
155
|
+
# end
|
156
|
+
#
|
157
|
+
#
|
158
|
+
# def test_traverse
|
159
|
+
# with_kb do |kb|
|
160
|
+
# rules = []
|
161
|
+
# rules << "?1 CollecTRI SMAD7"
|
162
|
+
# rules << "?1 gene_ages ?2"
|
163
|
+
# rules << "SMAD4 gene_ages ?2"
|
164
|
+
# res = kb.traverse rules
|
165
|
+
# assert res.first["?1"].include? "MYC"
|
166
|
+
# end
|
167
|
+
# end
|
168
|
+
#
|
169
|
+
# def test_target
|
170
|
+
# with_kb do |kb|
|
171
|
+
# rules = []
|
172
|
+
# rules << "?target =CollecTRI SMAD7"
|
173
|
+
# rules << "?1 CollecTRI ?target"
|
174
|
+
# rules << "?1 gene_ages ?2"
|
175
|
+
# rules << "SMAD4 gene_ages ?2"
|
176
|
+
# res = kb.traverse rules
|
177
|
+
# assert res.first["?1"].include? "MYC"
|
178
|
+
# end
|
179
|
+
# end
|
180
|
+
#
|
181
|
+
# def test_target_translate
|
182
|
+
# with_kb do |kb|
|
183
|
+
# rules = []
|
184
|
+
# rules << "?target =CollecTRI ENSG00000101665"
|
185
|
+
# rules << "?1 CollecTRI ?target"
|
186
|
+
# res = kb.traverse rules
|
187
|
+
# assert res.first["?1"].include? "MYC"
|
188
|
+
# end
|
189
|
+
# end
|
190
|
+
#
|
191
|
+
# def test_target_attribute
|
192
|
+
# with_kb do |kb|
|
193
|
+
# rules = []
|
194
|
+
# rules << "?1 CollecTRI SMAD7"
|
195
|
+
# all = kb.traverse rules
|
196
|
+
#
|
197
|
+
# rules = []
|
198
|
+
# rules << "?1 CollecTRI SMAD7 - '[ExTRI] Confidence'=High"
|
199
|
+
# low = kb.traverse rules
|
200
|
+
#
|
201
|
+
# assert low.last.length < all.last.length
|
202
|
+
# end
|
203
|
+
# end
|
204
|
+
#
|
205
|
+
# def test_traverse_same_age
|
206
|
+
# with_kb do |kb|
|
207
|
+
# rules_str=<<-EOF
|
208
|
+
#?target1 =gene_ages SMAD7
|
209
|
+
#?target2 =gene_ages SMAD4
|
210
|
+
#?target1 gene_ages ?age
|
211
|
+
#?target2 gene_ages ?age
|
212
|
+
#?1 gene_ages ?age
|
213
|
+
# EOF
|
214
|
+
# rules = rules_str.split "\n"
|
215
|
+
# res = kb.traverse rules
|
216
|
+
# assert_include res.first["?1"], "MET"
|
217
|
+
# end
|
218
|
+
# end
|
219
|
+
#
|
220
|
+
# def test_traverse_same_age_acc
|
221
|
+
# with_kb do |kb|
|
222
|
+
# rules_str=<<-EOF
|
223
|
+
#?target1 =gene_ages SMAD7
|
224
|
+
#?target2 =gene_ages SMAD4
|
225
|
+
#?age{
|
226
|
+
# ?target1 gene_ages ?age
|
227
|
+
# ?target2 gene_ages ?age
|
228
|
+
#}
|
229
|
+
#?1 gene_ages ?age
|
230
|
+
# EOF
|
231
|
+
# rules = rules_str.split "\n"
|
232
|
+
# res = kb.traverse rules
|
233
|
+
# assert_include res.first["?1"], "MET"
|
234
|
+
# end
|
235
|
+
# end
|
236
|
+
#
|
237
|
+
# def test_wildcard_db
|
238
|
+
# with_kb do |kb|
|
239
|
+
# rules = []
|
240
|
+
# rules << "SMAD4 ?db ?1"
|
241
|
+
# res = kb.traverse rules
|
242
|
+
# end
|
243
|
+
# end
|
244
|
+
#end
|
245
|
+
#
|
@@ -40,6 +40,7 @@ row2 a a id3
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
assert_include tsv.fields, "ValueA"
|
43
44
|
assert_include tsv.keys, 'row1'
|
44
45
|
assert_include tsv.keys, 'row2'
|
45
46
|
end
|
@@ -67,6 +68,7 @@ row2 a a id3
|
|
67
68
|
end
|
68
69
|
refute Open.exists?(tk)
|
69
70
|
assert Open.exists?(data.persistence_path)
|
71
|
+
refute tsv.fields.nil?
|
70
72
|
end
|
71
73
|
|
72
74
|
assert_include tsv.keys, 'row1'
|
@@ -142,5 +144,23 @@ row2 a a id3
|
|
142
144
|
assert_include tsv.keys, 'row1'
|
143
145
|
assert_include tsv.keys, 'row2'
|
144
146
|
end
|
147
|
+
|
148
|
+
def test_tsv_open_persist
|
149
|
+
content =<<-'EOF'
|
150
|
+
#Id ValueA ValueB OtherID
|
151
|
+
row1 a|aa|aaa b Id1|Id2
|
152
|
+
row2 A B Id3
|
153
|
+
row2 a a id3
|
154
|
+
EOF
|
155
|
+
|
156
|
+
|
157
|
+
tsv = nil
|
158
|
+
TmpFile.with_file(content) do |filename|
|
159
|
+
tsv = TSV.open(filename, sep: /\s+/, type: :double, persist: true, merge: true)
|
160
|
+
assert Array === tsv.fields
|
161
|
+
tsv = TSV.open(filename, sep: /\s+/, type: :double, persist: true, merge: true)
|
162
|
+
assert Array === tsv.fields
|
163
|
+
end
|
164
|
+
end
|
145
165
|
end
|
146
166
|
|
@@ -39,5 +39,25 @@ class TestTSVAdapter < Test::Unit::TestCase
|
|
39
39
|
assert_equal [1, 2, 3], tsv["a"]
|
40
40
|
assert_equal [1, 2, 3], Marshal.load(tsv.orig_get("a"))
|
41
41
|
end
|
42
|
+
|
43
|
+
def test_persist_annotations
|
44
|
+
content =<<-'EOF'
|
45
|
+
#: :sep=/\s+/#:type=:double#:merge=:concat
|
46
|
+
#Id ValueA ValueB OtherID
|
47
|
+
row1 a|aa|aaa b Id1|Id2
|
48
|
+
row2 A B Id3
|
49
|
+
row2 a a id3
|
50
|
+
EOF
|
51
|
+
|
52
|
+
TmpFile.with_file(content) do |tsv_file|
|
53
|
+
pid = Process.fork do
|
54
|
+
tsv = TSV.open tsv_file, persist: true
|
55
|
+
end
|
56
|
+
Process.waitpid pid
|
57
|
+
tsv = TSV.open tsv_file, persist: true
|
58
|
+
refute tsv.fields.nil?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
42
62
|
end
|
43
63
|
|
@@ -4,12 +4,21 @@ require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1
|
|
4
4
|
require 'scout/tsv'
|
5
5
|
class TestAssociation < Test::Unit::TestCase
|
6
6
|
|
7
|
-
def
|
8
|
-
database = Association.database(datadir_test.person.marriages, :source => "Wife", :target => "Husband")
|
7
|
+
def test_marriages_simple_no_persist
|
8
|
+
database = Association.database(datadir_test.person.marriages, :source => "Wife", :target => "Husband", persist: false)
|
9
9
|
assert_equal "001", database["002"]["Husband"]
|
10
10
|
assert_equal "2021", database["002"]["Date"]
|
11
|
+
refute database.respond_to?(:persistence_path)
|
11
12
|
end
|
12
13
|
|
14
|
+
def test_marriages_simple_persist
|
15
|
+
database = Association.database(datadir_test.person.marriages, :source => "Wife", :target => "Husband", persist: true)
|
16
|
+
assert_equal "001", database["002"]["Husband"]
|
17
|
+
assert_equal "2021", database["002"]["Date"]
|
18
|
+
assert database.respond_to?(:persistence_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
|
13
22
|
def test_marriages_open
|
14
23
|
database = Association.database(datadir_test.person.marriages, :source => "Wife (ID)=>Alias", :target => "Husband (ID)=>Name")
|
15
24
|
assert_equal "Miguel", database["Clei"]["Husband"]
|
@@ -38,7 +47,7 @@ class TestAssociation < Test::Unit::TestCase
|
|
38
47
|
end
|
39
48
|
|
40
49
|
def test_brothers_rename
|
41
|
-
database = Association.database(datadir_test.person.brothers, :
|
50
|
+
database = Association.database(datadir_test.person.brothers, source: "Older=~Older (Alias)=>Name")
|
42
51
|
assert_equal "Older (Name)", database.key_field
|
43
52
|
end
|
44
53
|
|
@@ -47,5 +56,10 @@ class TestAssociation < Test::Unit::TestCase
|
|
47
56
|
database = Association.database(tsv)
|
48
57
|
assert_equal database["Miki"], %w(Juan Mariluz)
|
49
58
|
end
|
59
|
+
|
60
|
+
def test_persist
|
61
|
+
database = Association.database(datadir_test.person.brothers, source: "Older=~Older (Alias)=>Name", persist: true)
|
62
|
+
assert database.respond_to?(:persistence_path)
|
63
|
+
end
|
50
64
|
end
|
51
65
|
|
data/test/scout/test_entity.rb
CHANGED
@@ -7,21 +7,6 @@ class TestEntity < Test::Unit::TestCase
|
|
7
7
|
Entity.entity_property_cache = tmpdir.property_cache
|
8
8
|
end
|
9
9
|
|
10
|
-
module Person
|
11
|
-
extend Entity
|
12
|
-
|
13
|
-
annotation :language
|
14
|
-
|
15
|
-
property :salutation do
|
16
|
-
case language
|
17
|
-
when 'es'
|
18
|
-
"Hola #{self}"
|
19
|
-
else
|
20
|
-
"Hi #{self}"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
10
|
module EmptyEntity
|
26
11
|
extend Entity
|
27
12
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
class TestKnowlegeBase < Test::Unit::TestCase
|
5
|
+
def test_no_namespace
|
6
|
+
TmpFile.with_dir do |dir|
|
7
|
+
kb = KnowledgeBase.new dir
|
8
|
+
assert_nil kb.namespace
|
9
|
+
kb.save
|
10
|
+
|
11
|
+
kb = KnowledgeBase.load dir
|
12
|
+
assert_nil kb.namespace
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_namespace
|
17
|
+
TmpFile.with_dir do |dir|
|
18
|
+
kb = KnowledgeBase.new dir, "Hsa"
|
19
|
+
assert_equal "Hsa", kb.namespace
|
20
|
+
kb.save
|
21
|
+
|
22
|
+
kb = KnowledgeBase.load dir
|
23
|
+
assert_equal "Hsa", kb.namespace
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
data/test/scout/test_tsv.rb
CHANGED
@@ -387,4 +387,44 @@ row2 A B Id3
|
|
387
387
|
tsv = TSV.open(filename, :sep => /\s+/, :identifiers => Scout.share.identifiers)
|
388
388
|
end
|
389
389
|
end
|
390
|
+
|
391
|
+
def test_identifier_file_auto
|
392
|
+
content =<<-EOF
|
393
|
+
#Id ValueA ValueB OtherID
|
394
|
+
row1 a|aa|aaa b Id1|Id2
|
395
|
+
row2 A B Id3
|
396
|
+
EOF
|
397
|
+
|
398
|
+
ids =<<-EOF
|
399
|
+
#Id Alias
|
400
|
+
row1 r1
|
401
|
+
row2 r2
|
402
|
+
EOF
|
403
|
+
|
404
|
+
TmpFile.with_dir do |dir|
|
405
|
+
Path.setup(dir)
|
406
|
+
Open.write(dir.tsv_file, content)
|
407
|
+
Open.write(dir.identifiers, ids)
|
408
|
+
tsv = TSV.open(dir.tsv_file)
|
409
|
+
assert_equal dir.identifiers, tsv.identifiers
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
def test_single_field
|
414
|
+
content =<<-EOF
|
415
|
+
#Id ValueA ValueB OtherID
|
416
|
+
row1 a|aa|aaa b Id1|Id2
|
417
|
+
row2 A B Id3
|
418
|
+
EOF
|
419
|
+
|
420
|
+
TmpFile.with_file(content) do |filename|
|
421
|
+
tsv = TSV.open(filename, :sep => /\s+/, field: "ValueB")
|
422
|
+
assert_equal "b", tsv["row1"]
|
423
|
+
end
|
424
|
+
|
425
|
+
TmpFile.with_file(content) do |filename|
|
426
|
+
tsv = TSV.open(filename, :sep => /\s+/, field: "ValueA", type: :flat)
|
427
|
+
assert_equal %w(a aa aaa), tsv["row1"]
|
428
|
+
end
|
429
|
+
end
|
390
430
|
end
|
@@ -78,5 +78,29 @@ b\t2|22\t3|33
|
|
78
78
|
assert tsv2.filename
|
79
79
|
end
|
80
80
|
|
81
|
+
def test_compact
|
82
|
+
dumper = TSV::Dumper.new :key_field => "Key", :fields => %w(Field1 Field2), :type => :double, compact: true
|
83
|
+
dumper.init
|
84
|
+
t = Thread.new do
|
85
|
+
dumper.add "a", [["1", "11"], ["2", "22"]]
|
86
|
+
dumper.add "b", [[nil, nil], ["3", "33"]]
|
87
|
+
dumper.close
|
88
|
+
end
|
89
|
+
|
90
|
+
tsv = TSV.open(dumper.stream)
|
91
|
+
assert_equal [], tsv["b"]["Field1"]
|
92
|
+
|
93
|
+
dumper = TSV::Dumper.new :key_field => "Key", :fields => %w(Field1 Field2), :type => :double, compact: false
|
94
|
+
dumper.init
|
95
|
+
t = Thread.new do
|
96
|
+
dumper.add "a", [["1", "11"], ["2", "22"]]
|
97
|
+
dumper.add "b", [[nil, nil], ["3", "33"]]
|
98
|
+
dumper.close
|
99
|
+
end
|
100
|
+
|
101
|
+
tsv = TSV.open(dumper.stream)
|
102
|
+
assert_equal ["", ""], tsv["b"]["Field1"]
|
103
|
+
end
|
104
|
+
|
81
105
|
end
|
82
106
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
class TestTsvPath < Test::Unit::TestCase
|
5
|
+
def test_tsv_open_persist
|
6
|
+
content =<<-'EOF'
|
7
|
+
#Id ValueA ValueB OtherID
|
8
|
+
row1 a|aa|aaa b Id1|Id2
|
9
|
+
row2 A B Id3
|
10
|
+
row2 a a id3
|
11
|
+
EOF
|
12
|
+
|
13
|
+
|
14
|
+
tsv = nil
|
15
|
+
TmpFile.with_file(content) do |filename|
|
16
|
+
Path.setup(filename)
|
17
|
+
tsv = filename.tsv persist: true, merge: true, type: :list, sep: /\s+/
|
18
|
+
assert_equal %w(ValueA ValueB OtherID), tsv.fields
|
19
|
+
tsv = filename.tsv persist: true, merge: true, type: :list, sep: /\s+/
|
20
|
+
assert_equal %w(ValueA ValueB OtherID), tsv.fields
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|