rbbt-util 3.2.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. data/README.rdoc +65 -0
  2. data/bin/run_workflow.rb +142 -69
  3. data/lib/rbbt-util.rb +3 -3
  4. data/lib/rbbt.rb +12 -3
  5. data/lib/rbbt/annotations.rb +215 -0
  6. data/lib/rbbt/{util/fix_width_table.rb → fix_width_table.rb} +17 -13
  7. data/lib/rbbt/persist.rb +164 -0
  8. data/lib/rbbt/persist/tsv.rb +135 -0
  9. data/lib/rbbt/resource.rb +100 -0
  10. data/lib/rbbt/resource/path.rb +180 -0
  11. data/lib/rbbt/resource/rake.rb +48 -0
  12. data/lib/rbbt/resource/util.rb +111 -0
  13. data/lib/rbbt/resource/with_key.rb +28 -0
  14. data/lib/rbbt/tsv.rb +134 -0
  15. data/lib/rbbt/tsv/accessor.rb +345 -0
  16. data/lib/rbbt/tsv/attach.rb +183 -0
  17. data/lib/rbbt/tsv/attach/util.rb +277 -0
  18. data/lib/rbbt/{util/tsv/filters.rb → tsv/filter.rb} +76 -37
  19. data/lib/rbbt/tsv/index.rb +453 -0
  20. data/lib/rbbt/tsv/manipulate.rb +361 -0
  21. data/lib/rbbt/tsv/parser.rb +231 -0
  22. data/lib/rbbt/tsv/serializers.rb +79 -0
  23. data/lib/rbbt/tsv/util.rb +67 -0
  24. data/lib/rbbt/util/R.rb +3 -3
  25. data/lib/rbbt/util/chain_methods.rb +64 -0
  26. data/lib/rbbt/util/cmd.rb +17 -13
  27. data/lib/rbbt/util/excel2tsv.rb +4 -3
  28. data/lib/rbbt/util/log.rb +1 -0
  29. data/lib/rbbt/util/misc.rb +296 -285
  30. data/lib/rbbt/util/open.rb +9 -2
  31. data/lib/rbbt/util/persistence.rb +1 -1
  32. data/lib/rbbt/util/task/job.rb +3 -1
  33. data/lib/rbbt/workflow.rb +193 -0
  34. data/lib/rbbt/workflow/accessor.rb +249 -0
  35. data/lib/rbbt/workflow/annotate.rb +60 -0
  36. data/lib/rbbt/workflow/soap.rb +100 -0
  37. data/lib/rbbt/workflow/step.rb +102 -0
  38. data/lib/rbbt/workflow/task.rb +76 -0
  39. data/test/rbbt/resource/test_path.rb +12 -0
  40. data/test/rbbt/test_annotations.rb +106 -0
  41. data/test/rbbt/{util/test_fix_width_table.rb → test_fix_width_table.rb} +8 -9
  42. data/test/rbbt/test_resource.rb +66 -0
  43. data/test/rbbt/test_tsv.rb +332 -0
  44. data/test/rbbt/test_workflow.rb +102 -0
  45. data/test/rbbt/tsv/test_accessor.rb +163 -0
  46. data/test/rbbt/{util/tsv → tsv}/test_attach.rb +86 -43
  47. data/test/rbbt/{util/tsv/test_filters.rb → tsv/test_filter.rb} +31 -13
  48. data/test/rbbt/tsv/test_index.rb +284 -0
  49. data/test/rbbt/{util/tsv → tsv}/test_manipulate.rb +35 -105
  50. data/test/rbbt/util/test_R.rb +1 -1
  51. data/test/rbbt/util/test_chain_methods.rb +22 -0
  52. data/test/rbbt/util/test_filecache.rb +0 -1
  53. data/test/rbbt/util/test_misc.rb +97 -79
  54. data/test/rbbt/util/test_open.rb +1 -0
  55. data/test/rbbt/util/test_tmpfile.rb +1 -1
  56. data/test/rbbt/workflow/test_soap.rb +103 -0
  57. data/test/rbbt/workflow/test_step.rb +142 -0
  58. data/test/rbbt/workflow/test_task.rb +84 -0
  59. data/test/test_helper.rb +7 -7
  60. metadata +80 -54
  61. data/lib/rbbt/util/rake.rb +0 -176
  62. data/lib/rbbt/util/resource.rb +0 -355
  63. data/lib/rbbt/util/task.rb +0 -183
  64. data/lib/rbbt/util/tc_hash.rb +0 -324
  65. data/lib/rbbt/util/tsv.rb +0 -236
  66. data/lib/rbbt/util/tsv/accessor.rb +0 -312
  67. data/lib/rbbt/util/tsv/attach.rb +0 -416
  68. data/lib/rbbt/util/tsv/index.rb +0 -419
  69. data/lib/rbbt/util/tsv/manipulate.rb +0 -300
  70. data/lib/rbbt/util/tsv/misc.rb +0 -41
  71. data/lib/rbbt/util/tsv/parse.rb +0 -324
  72. data/lib/rbbt/util/tsv/resource.rb +0 -88
  73. data/lib/rbbt/util/workflow.rb +0 -135
  74. data/lib/rbbt/util/workflow/soap.rb +0 -116
  75. data/test/rbbt/util/test_persistence.rb +0 -201
  76. data/test/rbbt/util/test_rake.rb +0 -54
  77. data/test/rbbt/util/test_resource.rb +0 -77
  78. data/test/rbbt/util/test_task.rb +0 -133
  79. data/test/rbbt/util/test_tc_hash.rb +0 -144
  80. data/test/rbbt/util/test_tsv.rb +0 -221
  81. data/test/rbbt/util/test_workflow.rb +0 -135
  82. data/test/rbbt/util/tsv/test_accessor.rb +0 -150
  83. data/test/rbbt/util/tsv/test_index.rb +0 -241
  84. data/test/rbbt/util/tsv/test_parse.rb +0 -87
  85. data/test/rbbt/util/tsv/test_resource.rb +0 -9
@@ -0,0 +1,163 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+ require 'rbbt/tsv'
3
+ require 'rbbt/util/tmpfile'
4
+ require 'test/unit'
5
+
6
+ class TestTSV < Test::Unit::TestCase
7
+
8
+ def _test_tsv
9
+ content =<<-EOF
10
+ #Id ValueA ValueB OtherID
11
+ row1 a|aa|aaa b Id1|Id2
12
+ row2 A B Id3
13
+ EOF
14
+
15
+ TmpFile.with_file(content) do |filename|
16
+ tsv = TSV.open(filename, :sep => /\s+/)
17
+ assert_equal 2, tsv.keys.length
18
+ assert_equal 2, tsv.values.length
19
+ assert_equal 2, tsv.collect.length
20
+ end
21
+ end
22
+
23
+ def _test_named_values
24
+ content =<<-EOF
25
+ #Id ValueA ValueB OtherID
26
+ row1 a|aa|aaa b Id1|Id2
27
+ row2 A B Id3
28
+ EOF
29
+
30
+ TmpFile.with_file(content) do |filename|
31
+ tsv = TSV.open(filename, :sep => /\s+/)
32
+ assert_equal ["A"], tsv["row2"]["ValueA"]
33
+ end
34
+ end
35
+
36
+ def _test_to_s
37
+ content =<<-EOF
38
+ #Id ValueA ValueB OtherID
39
+ row1 a|aa|aaa b Id1|Id2
40
+ row2 A B Id3
41
+ EOF
42
+
43
+ TmpFile.with_file(content) do |filename|
44
+ tsv = TSV.open(filename, :sep => /\s+/)
45
+ assert tsv.to_s =~ /row1\ta|aa|aaa/
46
+ assert tsv.to_s =~ /:type=:double/
47
+ end
48
+ end
49
+
50
+ def _test_entries
51
+ content =<<-EOF
52
+ #Id ValueA ValueB OtherID
53
+ row1 a|aa|aaa b Id1|Id2
54
+ row2 A B Id3
55
+ EOF
56
+
57
+ TmpFile.with_file(content) do |filename|
58
+ tsv = TSV.open(filename, :sep => /\s+/)
59
+ assert_equal filename, tsv.options[:filename]
60
+ end
61
+
62
+ end
63
+
64
+ def _test_marshal
65
+ content =<<-EOF
66
+ #Id ValueA ValueB OtherID
67
+ row1 a|aa|aaa b Id1|Id2
68
+ row2 A B Id3
69
+ EOF
70
+
71
+ TmpFile.with_file(content) do |filename|
72
+ tsv = TSV.open(filename, :sep => /\s+/, :persist_serializer => :marshal, :persist => true)
73
+ assert_equal filename, tsv.options[:filename]
74
+ end
75
+ end
76
+
77
+ def _test_zip_fields
78
+ a = [%w(1 2), %w(a b)]
79
+ assert_equal a, TSV.zip_fields(TSV.zip_fields(a))
80
+ end
81
+
82
+ def _test_indentify_fields
83
+ content =<<-EOF
84
+ #ID ValueA ValueB Comment
85
+ row1 a b c
86
+ row2 A B C
87
+ EOF
88
+
89
+ TmpFile.with_file(content) do |filename|
90
+ tsv = TSV.open(File.open(filename), :double, :sep => /\s/)
91
+ assert_equal :key, tsv.identify_field("ID")
92
+ end
93
+ end
94
+
95
+ def _test_sort
96
+ content =<<-EOF
97
+ #ID ValueA ValueB Comment
98
+ row1 a B c
99
+ row2 A b C
100
+ EOF
101
+
102
+ TmpFile.with_file(content) do |filename|
103
+ tsv = TSV.open(File.open(filename), :double, :sep => /\s/)
104
+ assert_equal %w(row2 row1), tsv.sort{|a,b|
105
+ a[1]["ValueA"] <=> b[1]["ValueA"]
106
+ }.collect{|k,v| k}
107
+ assert_equal %w(row1 row2), tsv.sort{|a,b|
108
+ a[1]["ValueB"] <=> b[1]["ValueB"]
109
+ }.collect{|k,v| k}
110
+ end
111
+ end
112
+
113
+ def _test_sort_by
114
+ content =<<-EOF
115
+ #ID ValueA ValueB Comment
116
+ row1 a B c
117
+ row2 A b C
118
+ EOF
119
+
120
+ TmpFile.with_file(content) do |filename|
121
+ tsv = TSV.open(File.open(filename), :list, :sep => /\s/)
122
+ assert_equal %w(row2 row1), tsv.sort_by("ValueA").collect{|k,v| k}
123
+ assert_equal %w(row1 row2), tsv.sort_by("ValueB").collect{|k,v| k}
124
+ end
125
+ end
126
+
127
+
128
+ def test_page
129
+ content =<<-EOF
130
+ #ID ValueA ValueB Comment
131
+ row1 a B f
132
+ row2 A b e
133
+ row3 A b d
134
+ row4 A b c
135
+ row5 A b b
136
+ row6 A b a
137
+ EOF
138
+
139
+ TmpFile.with_file(content) do |filename|
140
+ tsv = TSV.open(File.open(filename), :list, :sep => /\s/)
141
+ assert_equal 3, tsv.page(1,3).size
142
+ assert_equal %w(row1 row2 row3).sort, tsv.page(1,3).keys.sort
143
+ assert_equal %w(row6 row5 row4).sort, tsv.page(1,3, "Comment").keys.sort
144
+ assert_equal %w(row4 row3).sort, tsv.page(2,2, "Comment").keys.sort
145
+ end
146
+ end
147
+
148
+
149
+ def _test_sort_by_with_proc
150
+ content =<<-EOF
151
+ #Id ValueA ValueB OtherID Pos
152
+ row1 a|aa|aaa b Id1|Id2 2
153
+ row2 aA B Id3 1
154
+ row3 A|AA|AAA|AAA B Id3 3
155
+ EOF
156
+
157
+ TmpFile.with_file(content) do |filename|
158
+ tsv = TSV.open(File.open(filename), :sep => /\s+/)
159
+ assert_equal %w(row3 row1 row2), (tsv.sort_by("ValueA") do |key, value| value.length end).collect{|k,v| k}.reverse
160
+ end
161
+ end
162
+
163
+ end
@@ -1,6 +1,6 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
2
- require 'rbbt/util/tsv'
3
- require 'rbbt/util/tsv/attach'
1
+ require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
2
+ require 'rbbt/tsv'
3
+ require 'rbbt/tsv/attach'
4
4
  require 'rbbt'
5
5
 
6
6
  class TestAttach < Test::Unit::TestCase
@@ -19,11 +19,11 @@ row3 B Id3
19
19
 
20
20
  tsv1 = tsv2 = nil
21
21
  TmpFile.with_file(content1) do |filename|
22
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
22
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
23
23
  end
24
24
 
25
25
  TmpFile.with_file(content2) do |filename|
26
- tsv2 = TSV.new(File.open(filename), :double, :sep => /\s+/)
26
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
27
27
  end
28
28
 
29
29
  tsv1.attach_same_key tsv2, "OtherID"
@@ -32,7 +32,7 @@ row3 B Id3
32
32
  assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
33
33
 
34
34
  TmpFile.with_file(content1) do |filename|
35
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
35
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
36
36
  end
37
37
 
38
38
  tsv1.attach_same_key tsv2
@@ -41,11 +41,11 @@ row3 B Id3
41
41
 
42
42
  tsv1 = tsv2 = nil
43
43
  TmpFile.with_file(content1) do |filename|
44
- tsv1 = TSV.new(File.open(filename), :list, :sep => /\s+/)
44
+ tsv1 = TSV.open(File.open(filename), :list, :sep => /\s+/)
45
45
  end
46
46
 
47
47
  TmpFile.with_file(content2) do |filename|
48
- tsv2 = TSV.new(File.open(filename), :double, :sep => /\s+/)
48
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
49
49
  end
50
50
 
51
51
  tsv1.attach_same_key tsv2, "OtherID"
@@ -69,11 +69,11 @@ B Id3
69
69
 
70
70
  tsv1 = tsv2 = nil
71
71
  TmpFile.with_file(content1) do |filename|
72
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
72
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
73
73
  end
74
74
 
75
75
  TmpFile.with_file(content2) do |filename|
76
- tsv2 = TSV.new(File.open(filename), :double, :sep => /\s+/)
76
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
77
77
  end
78
78
 
79
79
  tsv1.attach_source_key tsv2, "ValueB"
@@ -82,7 +82,7 @@ B Id3
82
82
  assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
83
83
 
84
84
  TmpFile.with_file(content1) do |filename|
85
- tsv1 = TSV.new(File.open(filename), :list, :sep => /\s+/)
85
+ tsv1 = TSV.open(File.open(filename), :list, :sep => /\s+/)
86
86
  end
87
87
 
88
88
  tsv1.attach_source_key tsv2, "ValueB"
@@ -113,15 +113,15 @@ row2 E
113
113
 
114
114
  tsv1 = tsv2 = index = nil
115
115
  TmpFile.with_file(content1) do |filename|
116
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
116
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
117
117
  end
118
118
 
119
119
  TmpFile.with_file(content2) do |filename|
120
- tsv2 = TSV.new(File.open(filename), :double, :sep => /\s+/)
120
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
121
121
  end
122
122
 
123
123
  TmpFile.with_file(content_index) do |filename|
124
- index = TSV.new(File.open(filename), :flat, :sep => /\s+/)
124
+ index = TSV.open(File.open(filename), :flat, :sep => /\s+/)
125
125
  end
126
126
 
127
127
  tsv1.attach_index tsv2, index
@@ -130,7 +130,7 @@ row2 E
130
130
  assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
131
131
 
132
132
  TmpFile.with_file(content1) do |filename|
133
- tsv1 = TSV.new(File.open(filename), :list, :sep => /\s+/)
133
+ tsv1 = TSV.open(File.open(filename), :list, :sep => /\s+/)
134
134
  end
135
135
 
136
136
  tsv1.attach_index tsv2, index
@@ -159,15 +159,15 @@ B Id3
159
159
  EOF
160
160
  tsv1 = tsv2 = tsv3 = nil
161
161
  TmpFile.with_file(content1) do |filename|
162
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
162
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
163
163
  end
164
164
 
165
165
  TmpFile.with_file(content2) do |filename|
166
- tsv2 = TSV.new(File.open(filename), :double, :sep => /\s+/)
166
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
167
167
  end
168
168
 
169
169
  TmpFile.with_file(content3) do |filename|
170
- tsv3 = TSV.new(File.open(filename), :double, :sep => /\s+/)
170
+ tsv3 = TSV.open(File.open(filename), :double, :sep => /\s+/)
171
171
  end
172
172
 
173
173
  tsv1.attach tsv2, "OtherID"
@@ -176,7 +176,7 @@ B Id3
176
176
  assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
177
177
 
178
178
  TmpFile.with_file(content1) do |filename|
179
- tsv1 = TSV.new(File.open(filename), :double, :sep => /\s+/)
179
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
180
180
  end
181
181
 
182
182
  tsv1.attach tsv3
@@ -188,12 +188,14 @@ B Id3
188
188
 
189
189
  def test_attach_using_index
190
190
  content1 =<<-EOF
191
+ #: :sep=/\\s+/
191
192
  #Id ValueA ValueB
192
193
  row1 a|aa|aaa b
193
194
  row2 A B
194
195
  EOF
195
196
 
196
197
  content2 =<<-EOF
198
+ #: :sep=/\\s+/
197
199
  #ValueE OtherID
198
200
  e Id1|Id2
199
201
  E Id3
@@ -206,19 +208,19 @@ row1 e
206
208
  row2 E
207
209
  EOF
208
210
 
209
- Rbbt.tmp.test.test1.data.define_as_string content1
210
- Rbbt.tmp.test.test2.data.define_as_string content2
211
- Rbbt.tmp.test.test2.identifiers.define_as_string content_index
211
+ Rbbt.claim Rbbt.tmp.test.test1.data, :string, content1
212
+ Rbbt.claim Rbbt.tmp.test.test2.data, :string, content2
213
+ Rbbt.claim Rbbt.tmp.test.test2.identifiers, :string, content_index
212
214
 
213
215
  tsv1 = tsv2 = nil
214
216
 
215
217
  tsv1 = Rbbt.tmp.test.test1.data.tsv :double, :sep => /\s+/
216
218
  tsv2 = Rbbt.tmp.test.test2.data.tsv :double, :sep => /\s+/
217
219
 
218
- tsv2.identifiers = Rbbt.tmp.test.test2.identifiers.produce
219
-
220
- tsv1.attach tsv2, "OtherID", :in_namespace => false
220
+ tsv2.identifiers = Rbbt.tmp.test.test2.identifiers.produce.find.to_s
221
221
 
222
+ tsv1.attach tsv2, :fields => ["OtherID"], :persist_input => true
223
+
222
224
  assert_equal tsv1.fields,%w(ValueA ValueB OtherID)
223
225
  assert_equal %w(Id1 Id2), tsv1["row1"]["OtherID"]
224
226
  end
@@ -247,24 +249,25 @@ row2 E
247
249
 
248
250
  tsv1 = tsv2 = identifiers = nil
249
251
  TmpFile.with_file(content1) do |filename|
250
- tsv1 = TSV.new(File.open(filename), :key => "Id")
252
+ tsv1 = TSV.open(Path.setup(filename), :key => "Id")
251
253
  end
252
254
 
253
255
  TmpFile.with_file(content2) do |filename|
254
- tsv2 = TSV.new(File.open(filename), :double)
256
+ tsv2 = TSV.open(Path.setup(filename), :double)
255
257
  end
256
258
 
257
259
  TmpFile.with_file(content_identifiers) do |filename|
258
- identifiers = TSV.new(File.open(filename), :flat, :sep => /\s+/)
260
+ identifiers = TSV.open(Path.setup(filename), :flat, :sep => /\s+/)
259
261
  end
260
262
 
261
263
  tsv1.identifiers = identifiers
264
+
262
265
  tsv1.attach tsv2
263
266
 
264
267
  assert_equal %w(ValueA ValueB ValueE), tsv1.fields
265
268
  end
266
269
 
267
- def test_paste
270
+ def test_merge_different_rows
268
271
  file1 =<<-EOF
269
272
  row6 dd dd ee
270
273
  row1 a b c
@@ -287,12 +290,12 @@ row6 dd dd ee
287
290
  EOF
288
291
 
289
292
  TmpFile.with_file do |f|
290
- TSV.paste(StringIO.new(file1), StringIO.new(file2), f, " ")
293
+ TSV.merge_different_fields(StringIO.new(file1), StringIO.new(file2), f, " ")
291
294
  assert_equal result, Open.read(f)
292
295
  end
293
296
  end
294
297
 
295
- def test_paste
298
+ def test_merge_different_rows_tsv
296
299
  file1 =<<-EOF
297
300
  row6 dd dd ee
298
301
  row1 a b c
@@ -315,14 +318,14 @@ row6 dd dd ee
315
318
  EOF
316
319
 
317
320
  TmpFile.with_file do |f|
318
- tsv1 = TSV.new StringIO.new(file1), :sep => " "
319
- tsv2 = TSV.new StringIO.new(file2), :sep => " "
320
- tsv_r = tsv1.paste tsv2
321
+ tsv1 = TSV.open StringIO.new(file1), :sep => " "
322
+ tsv2 = TSV.open StringIO.new(file2), :sep => " "
323
+ tsv_r = tsv1.merge_different_fields tsv2
321
324
  assert_equal result, tsv_r.to_s(tsv_r.keys.sort, true).gsub(/\t/,' ')
322
325
  end
323
326
  end
324
327
 
325
- def test_paste_merge
328
+ def test_merge_different_rows_split_lines
326
329
  file1 =<<-EOF
327
330
  row6,dd,dd,ee
328
331
  row1,a,b,c
@@ -336,23 +339,34 @@ row1,d,e
336
339
  row2,D,E
337
340
  row4,x,y
338
341
  EOF
339
- result =<<-EOF
342
+
343
+ # Might be slightly different ...
344
+ result1 =<<-EOF
340
345
  row1,aa|a,bb|b,cc|c,d,e
341
346
  row2,A,B,C,D,E
342
347
  row20,,,,rr,rr
343
348
  row3,1,2,3,,
344
349
  row4,,,,x,y
350
+ row6,dd,dd,ee,,
351
+ EOF
352
+ result2 =<<-EOF
353
+ row1,a|aa,b|bb,c|cc,d,e
354
+ row2,A,B,C,D,E
355
+ row20,,,,rr,rr
356
+ row3,1,2,3,,
357
+ row4,,,,x,y
345
358
  row6,dd,dd,ee,,
346
359
  EOF
347
360
 
348
361
  TmpFile.with_file do |f|
349
- TSV.paste_merge StringIO.new(file1), StringIO.new(file2), f, ','
362
+ TSV.merge_different_fields StringIO.new(file1), StringIO.new(file2), f, ','
350
363
 
351
- assert_equal result, Open.read(f)
364
+ # ... so check for either
365
+ assert(Open.read(f) == result1 || Open.read(f) == result2)
352
366
  end
353
367
  end
354
368
 
355
- def test_paste
369
+ def test_merge_different_rows_split_lines_tsv
356
370
  file1 =<<-EOF
357
371
  row6,dd,dd,ee
358
372
  row1,a,b,c
@@ -376,9 +390,9 @@ row6,dd,dd,ee,,
376
390
  EOF
377
391
 
378
392
  TmpFile.with_file do |f|
379
- data1 = TSV.new StringIO.new(file1), :sep => ',', :merge => true
380
- data2 = TSV.new StringIO.new(file2), :sep => ',', :merge => true
381
- data3 = data1.paste(data2)
393
+ data1 = TSV.open StringIO.new(file1), :sep => ',', :merge => true
394
+ data2 = TSV.open StringIO.new(file2), :sep => ',', :merge => true
395
+ data3 = data1.merge_different_fields(data2)
382
396
  data3.each do |key, list|
383
397
  list.each do |l| l.replace l.sort_by{|v| v.length}.reverse end
384
398
  end
@@ -396,12 +410,41 @@ row3,1,2,3
396
410
  EOF
397
411
  TmpFile.with_file(file1) do |input|
398
412
  TmpFile.with_file() do |output|
399
- TSV.merge_rows Open.open(input), output
413
+ TSV.merge_row_fields Open.open(input), output
400
414
  assert Open.read(output) =~ /a|aa/
401
415
  end
402
416
  end
403
417
 
404
418
 
405
419
  end
420
+
421
+ def test_one2one
422
+ content1 =<<-EOF
423
+ #Id ValueA ValueB
424
+ row1 a|aa|aaa b
425
+ row2 A B
426
+ row3 A b|bb
427
+ EOF
428
+
429
+ content2 =<<-EOF
430
+ #ValueB OtherID
431
+ b Id1|Id2
432
+ B Id3
433
+ bb Id4
434
+ EOF
435
+ tsv1 = tsv2 = nil
436
+ TmpFile.with_file(content1) do |filename|
437
+ tsv1 = TSV.open(File.open(filename), :double, :sep => /\s+/)
438
+ end
439
+
440
+ TmpFile.with_file(content2) do |filename|
441
+ tsv2 = TSV.open(File.open(filename), :double, :sep => /\s+/)
442
+ end
443
+
444
+ tsv1.attach tsv2, :one2one => true
445
+
446
+ assert_equal %w(ValueA ValueB OtherID), tsv1.fields
447
+ assert_equal %w(Id1 Id4), tsv1["row3"]["OtherID"]
448
+ end
406
449
  end
407
450