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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.vimproject +50 -30
  3. data/VERSION +1 -1
  4. data/lib/scout/association/index.rb +5 -1
  5. data/lib/scout/association/item.rb +1 -1
  6. data/lib/scout/association.rb +46 -11
  7. data/lib/scout/entity/format.rb +9 -4
  8. data/lib/scout/entity/identifiers.rb +4 -4
  9. data/lib/scout/entity/named_array.rb +13 -0
  10. data/lib/scout/entity/property.rb +3 -1
  11. data/lib/scout/entity.rb +7 -4
  12. data/lib/scout/knowledge_base/enrichment.rb +9 -0
  13. data/lib/scout/knowledge_base/entity.rb +143 -0
  14. data/lib/scout/knowledge_base/list.rb +95 -0
  15. data/lib/scout/knowledge_base/query.rb +96 -0
  16. data/lib/scout/knowledge_base/registry.rb +173 -0
  17. data/lib/scout/knowledge_base/traverse.rb +329 -0
  18. data/lib/scout/knowledge_base.rb +91 -0
  19. data/lib/scout/persist/tsv/adapter/base.rb +13 -1
  20. data/lib/scout/persist/tsv.rb +2 -1
  21. data/lib/scout/tsv/annotation.rb +4 -4
  22. data/lib/scout/tsv/attach.rb +10 -2
  23. data/lib/scout/tsv/change_id.rb +3 -0
  24. data/lib/scout/tsv/dumper.rb +34 -30
  25. data/lib/scout/tsv/index.rb +0 -2
  26. data/lib/scout/tsv/open.rb +1 -0
  27. data/lib/scout/tsv/parser.rb +21 -10
  28. data/lib/scout/tsv/path.rb +8 -0
  29. data/lib/scout/tsv/stream.rb +17 -10
  30. data/lib/scout/tsv/traverse.rb +12 -2
  31. data/lib/scout/tsv/util/process.rb +4 -1
  32. data/lib/scout/tsv/util/select.rb +8 -2
  33. data/lib/scout/tsv/util/sort.rb +23 -15
  34. data/lib/scout/tsv/util.rb +11 -2
  35. data/lib/scout/tsv.rb +25 -11
  36. data/lib/scout/workflow/definition.rb +3 -3
  37. data/lib/scout/workflow/deployment/orchestrator.rb +8 -5
  38. data/lib/scout/workflow/step/dependencies.rb +35 -11
  39. data/lib/scout/workflow/step/file.rb +2 -1
  40. data/lib/scout/workflow/step/info.rb +23 -2
  41. data/lib/scout/workflow/step/load.rb +5 -3
  42. data/lib/scout/workflow/step/progress.rb +6 -0
  43. data/lib/scout/workflow/step/provenance.rb +1 -1
  44. data/lib/scout/workflow/step/status.rb +10 -4
  45. data/lib/scout/workflow/step.rb +32 -12
  46. data/lib/scout/workflow/task/dependencies.rb +33 -24
  47. data/lib/scout/workflow/task/inputs.rb +40 -12
  48. data/lib/scout/workflow/task.rb +22 -10
  49. data/lib/scout/workflow/usage.rb +2 -2
  50. data/lib/scout/workflow.rb +1 -1
  51. data/scout-gear.gemspec +28 -4
  52. data/scout_commands/kb/config +33 -0
  53. data/scout_commands/kb/entities +35 -0
  54. data/scout_commands/kb/list +39 -0
  55. data/scout_commands/kb/query +78 -0
  56. data/scout_commands/kb/register +44 -0
  57. data/scout_commands/kb/show +37 -0
  58. data/scout_commands/kb/traverse +66 -0
  59. data/test/data/person/brothers +1 -1
  60. data/test/scout/entity/test_identifiers.rb +3 -3
  61. data/test/scout/entity/test_named_array.rb +21 -0
  62. data/test/scout/knowledge_base/test_enrichment.rb +0 -0
  63. data/test/scout/knowledge_base/test_entity.rb +38 -0
  64. data/test/scout/knowledge_base/test_list.rb +40 -0
  65. data/test/scout/knowledge_base/test_query.rb +39 -0
  66. data/test/scout/knowledge_base/test_registry.rb +16 -0
  67. data/test/scout/knowledge_base/test_traverse.rb +245 -0
  68. data/test/scout/persist/test_tsv.rb +20 -0
  69. data/test/scout/persist/tsv/adapter/test_base.rb +20 -0
  70. data/test/scout/test_association.rb +17 -3
  71. data/test/scout/test_entity.rb +0 -15
  72. data/test/scout/test_knowledge_base.rb +27 -0
  73. data/test/scout/test_tsv.rb +40 -0
  74. data/test/scout/tsv/test_dumper.rb +24 -0
  75. data/test/scout/tsv/test_path.rb +24 -0
  76. data/test/scout/tsv/test_stream.rb +93 -0
  77. data/test/scout/tsv/test_traverse.rb +99 -0
  78. data/test/scout/tsv/test_util.rb +2 -0
  79. data/test/scout/tsv/util/test_select.rb +22 -0
  80. data/test/scout/tsv/util/test_sort.rb +24 -0
  81. data/test/scout/workflow/step/test_dependencies.rb +26 -0
  82. data/test/scout/workflow/step/test_info.rb +35 -0
  83. data/test/scout/workflow/task/test_dependencies.rb +67 -1
  84. data/test/scout/workflow/task/test_inputs.rb +24 -7
  85. data/test/scout/workflow/test_task.rb +36 -0
  86. data/test/scout/workflow/test_usage.rb +0 -1
  87. data/test/test_helper.rb +17 -0
  88. 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 test_marriages_simple
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, :source => "Older=~Older (Alias)=>Name")
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
 
@@ -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
+
@@ -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
+