rbbt-util 1.2.1 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/rbbt-util.rb +2 -1
- data/lib/rbbt/util/R.rb +18 -1
- data/lib/rbbt/util/cmd.rb +7 -6
- data/lib/rbbt/util/data_module.rb +31 -11
- data/lib/rbbt/util/fix_width_table.rb +209 -0
- data/lib/rbbt/util/log.rb +12 -2
- data/lib/rbbt/util/misc.rb +91 -12
- data/lib/rbbt/util/open.rb +18 -9
- data/lib/rbbt/util/path.rb +152 -0
- data/lib/rbbt/util/persistence.rb +282 -75
- data/lib/rbbt/util/pkg_data.rb +16 -59
- data/lib/rbbt/util/pkg_software.rb +15 -1
- data/lib/rbbt/util/rake.rb +5 -1
- data/lib/rbbt/util/tc_hash.rb +129 -59
- data/lib/rbbt/util/tsv.rb +109 -1284
- data/lib/rbbt/util/tsv/accessor.rb +273 -0
- data/lib/rbbt/util/tsv/attach.rb +228 -0
- data/lib/rbbt/util/tsv/index.rb +303 -0
- data/lib/rbbt/util/tsv/manipulate.rb +271 -0
- data/lib/rbbt/util/tsv/parse.rb +258 -0
- data/share/lib/R/util.R +5 -3
- data/test/rbbt/util/test_R.rb +9 -1
- data/test/rbbt/util/test_data_module.rb +5 -0
- data/test/rbbt/util/test_fix_width_table.rb +107 -0
- data/test/rbbt/util/test_misc.rb +43 -0
- data/test/rbbt/util/test_open.rb +0 -1
- data/test/rbbt/util/test_path.rb +10 -0
- data/test/rbbt/util/test_persistence.rb +63 -2
- data/test/rbbt/util/test_pkg_data.rb +29 -8
- data/test/rbbt/util/test_tc_hash.rb +52 -0
- data/test/rbbt/util/test_tsv.rb +55 -678
- data/test/rbbt/util/tsv/test_accessor.rb +109 -0
- data/test/rbbt/util/tsv/test_attach.rb +271 -0
- data/test/rbbt/util/tsv/test_index.rb +158 -0
- data/test/rbbt/util/tsv/test_manipulate.rb +226 -0
- data/test/rbbt/util/tsv/test_parse.rb +72 -0
- data/test/test_helper.rb +1 -0
- metadata +25 -4
@@ -0,0 +1,226 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/util/tsv'
|
3
|
+
require 'rbbt/util/tsv/manipulate'
|
4
|
+
|
5
|
+
class TestTSVManipulate < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_indentify_fields
|
8
|
+
content =<<-EOF
|
9
|
+
#ID ValueA ValueB Comment
|
10
|
+
row1 a b c
|
11
|
+
row2 A B C
|
12
|
+
EOF
|
13
|
+
|
14
|
+
TmpFile.with_file(content) do |filename|
|
15
|
+
tsv = TSV.new(File.open(filename), :double, :sep => /\s/)
|
16
|
+
assert_equal :key, tsv.identify_field("ID")
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def test_reorder_simple
|
22
|
+
content =<<-EOF
|
23
|
+
#Id ValueA ValueB OtherID
|
24
|
+
row1 a|aa|aaa b Id1|Id2
|
25
|
+
row2 A B Id3
|
26
|
+
row3 a C Id4
|
27
|
+
EOF
|
28
|
+
|
29
|
+
TmpFile.with_file(content) do |filename|
|
30
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
31
|
+
|
32
|
+
tsv1 = tsv.reorder("ValueA")
|
33
|
+
|
34
|
+
assert_equal "ValueA", tsv1.key_field
|
35
|
+
assert_equal %w(Id ValueB OtherID), tsv1.fields
|
36
|
+
assert_equal ["B"], tsv1["A"]["ValueB"]
|
37
|
+
assert_equal ["b","C"], tsv1["a"]["ValueB"]
|
38
|
+
assert_equal ["b"], tsv1["aa"]["ValueB"]
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_reorder_simple_headerless
|
44
|
+
content =<<-EOF
|
45
|
+
row1 a|aa|aaa b Id1|Id2
|
46
|
+
row2 A B Id3
|
47
|
+
row3 a C Id4
|
48
|
+
EOF
|
49
|
+
|
50
|
+
TmpFile.with_file(content) do |filename|
|
51
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
52
|
+
|
53
|
+
tsv1 = tsv.reorder 0
|
54
|
+
|
55
|
+
assert_nil tsv1.key_field
|
56
|
+
assert_equal ["B"], tsv1["A"][1]
|
57
|
+
assert_equal ["b","C"], tsv1["a"][1]
|
58
|
+
assert_equal ["b"], tsv1["aa"][1]
|
59
|
+
assert_equal ["row1"], tsv1["aa"][0]
|
60
|
+
assert_equal ["row1","row3"], tsv1["a"][0]
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def test_reorder_remove_field
|
66
|
+
content =<<-EOF
|
67
|
+
#Id ValueA ValueB OtherID
|
68
|
+
row1 a|aa|aaa b Id1|Id2
|
69
|
+
row2 A B Id3
|
70
|
+
row3 a C Id4
|
71
|
+
EOF
|
72
|
+
|
73
|
+
TmpFile.with_file(content) do |filename|
|
74
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
75
|
+
|
76
|
+
tsv1 = tsv.reorder("ValueA", ["ValueB", "Id"])
|
77
|
+
|
78
|
+
assert_equal "ValueA", tsv1.key_field
|
79
|
+
assert_equal %w(ValueB Id), tsv1.fields
|
80
|
+
assert_equal ["B"], tsv1["A"]["ValueB"]
|
81
|
+
assert_equal ["b","C"], tsv1["a"]["ValueB"]
|
82
|
+
assert_equal ["row1"], tsv1["aa"]["Id"]
|
83
|
+
assert_equal ["row1","row3"], tsv1["a"]["Id"]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_through
|
88
|
+
content =<<-EOF
|
89
|
+
#Id ValueA ValueB OtherID
|
90
|
+
row1 a|aa|aaa b Id1|Id2
|
91
|
+
row2 A B Id3
|
92
|
+
row3 a C Id4
|
93
|
+
EOF
|
94
|
+
|
95
|
+
TmpFile.with_file(content) do |filename|
|
96
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
97
|
+
|
98
|
+
tsv.through "ValueA" do |key, values|
|
99
|
+
assert(tsv.keys.include? values["Id"].first)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
def test_slice
|
106
|
+
content =<<-EOF
|
107
|
+
#ID ValueA ValueB Comment
|
108
|
+
row1 a b c
|
109
|
+
row2 A B C
|
110
|
+
EOF
|
111
|
+
|
112
|
+
TmpFile.with_file(content) do |filename|
|
113
|
+
tsv = TSV.new(File.open(filename), :double, :sep => /\s/)
|
114
|
+
assert_equal [["a"],["c"]], tsv.reorder(:key, ["ValueA", "Comment"])["row1"]
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_sort
|
119
|
+
content =<<-EOF
|
120
|
+
#Id ValueA ValueB OtherID Pos
|
121
|
+
row1 a|aa|aaa b Id1|Id2 2
|
122
|
+
row2 A B Id3 1
|
123
|
+
row3 A|AA|AAA|AAA B Id3 3
|
124
|
+
EOF
|
125
|
+
|
126
|
+
TmpFile.with_file(content) do |filename|
|
127
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
128
|
+
assert_equal %w(row1 row2 row3), tsv.sort
|
129
|
+
assert_equal %w(row1 row2 row3), tsv.sort(:key)
|
130
|
+
assert_equal %w(row2 row1 row3), tsv.sort("Pos")
|
131
|
+
assert_equal %w(row3 row2 row1), tsv.sort("ValueA") do |values| values["ValueA"].length end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_select
|
136
|
+
content =<<-EOF
|
137
|
+
#Id ValueA ValueB OtherID
|
138
|
+
row1 a|aa|aaa b Id1|Id2
|
139
|
+
row2 A B Id3
|
140
|
+
row3 a C Id4
|
141
|
+
EOF
|
142
|
+
|
143
|
+
TmpFile.with_file(content) do |filename|
|
144
|
+
tsv = TSV.new(filename + '#:sep=/\s+/')
|
145
|
+
assert tsv.type == :double
|
146
|
+
|
147
|
+
new = tsv.select %w(b Id4)
|
148
|
+
assert_equal %w(row1 row3).sort, new.keys
|
149
|
+
|
150
|
+
new = tsv.select "ValueB" => %w(b Id4)
|
151
|
+
assert_equal %w(row1).sort, new.keys
|
152
|
+
|
153
|
+
new = tsv.select /b|Id4/
|
154
|
+
assert_equal %w(row1 row3).sort, new.keys
|
155
|
+
|
156
|
+
new = tsv.select "ValueB" => /b|Id4/
|
157
|
+
assert_equal %w(row1).sort, new.keys
|
158
|
+
|
159
|
+
tsv = TSV.new(filename + '#:sep=/\s+/#:type=:flat')
|
160
|
+
assert tsv.type != :double
|
161
|
+
|
162
|
+
new = tsv.select %w(b Id4)
|
163
|
+
assert_equal %w(row1 row3).sort, new.keys.sort
|
164
|
+
|
165
|
+
|
166
|
+
new = tsv.select do |k,v| v["ValueA"].include? "A" end
|
167
|
+
assert_equal %w(row2).sort, new.keys.sort
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_process
|
172
|
+
content =<<-EOF
|
173
|
+
#Id ValueA ValueB OtherID
|
174
|
+
row1 a|aa|aaa b Id1|Id2
|
175
|
+
row2 A B Id3
|
176
|
+
row3 a C Id4
|
177
|
+
EOF
|
178
|
+
|
179
|
+
TmpFile.with_file(content) do |filename|
|
180
|
+
tsv = TSV.new(File.open(filename), :sep => /\s+/)
|
181
|
+
|
182
|
+
tsv.process "ValueA" do |field_values,key,values|
|
183
|
+
field_values.collect{|v| "Pref:#{v}"}
|
184
|
+
end
|
185
|
+
|
186
|
+
assert_equal ["Pref:A"], tsv["row2"]["ValueA"]
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_add_field
|
191
|
+
content =<<-EOF
|
192
|
+
#Id LetterValue:ValueA LetterValue:ValueB OtherID
|
193
|
+
row1 a|aa|aaa b Id1|Id2
|
194
|
+
row2 A B Id3
|
195
|
+
row3 a C Id4
|
196
|
+
EOF
|
197
|
+
|
198
|
+
TmpFile.with_file(content) do |filename|
|
199
|
+
tsv = TSV.new(filename + '#:sep=/\s+/')
|
200
|
+
tsv.add_field "Str length" do |k,v|
|
201
|
+
(v.flatten * " ").length
|
202
|
+
end
|
203
|
+
|
204
|
+
assert tsv.fields.include?("Str length")
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def test_slice_namespace
|
209
|
+
content =<<-EOF
|
210
|
+
#Id LetterValue:ValueA LetterValue:ValueB OtherID
|
211
|
+
row1 a|aa|aaa b Id1|Id2
|
212
|
+
row2 A B Id3
|
213
|
+
row3 a C Id4
|
214
|
+
EOF
|
215
|
+
|
216
|
+
TmpFile.with_file(content) do |filename|
|
217
|
+
tsv = TSV.new(filename + '#:sep=/\s+/')
|
218
|
+
|
219
|
+
tsv_ns = tsv.slice_namespace "LetterValue"
|
220
|
+
assert_equal %w(LetterValue:ValueA LetterValue:ValueB), tsv_ns.fields
|
221
|
+
end
|
222
|
+
|
223
|
+
end
|
224
|
+
|
225
|
+
end
|
226
|
+
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/util/tsv/parse'
|
3
|
+
|
4
|
+
class TestTSVParse < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_keep_empty
|
7
|
+
content =<<-EOF
|
8
|
+
#Id ValueA ValueB Comment
|
9
|
+
row1 a|aa|aaa b c
|
10
|
+
row2 A B
|
11
|
+
EOF
|
12
|
+
|
13
|
+
TmpFile.with_file(content) do |filename|
|
14
|
+
data = {}
|
15
|
+
data, extra = TSV.parse(File.open(filename), :sep => /\s+/, :keep_empty => true)
|
16
|
+
assert_equal ["ValueA", "ValueB", "Comment"], extra[:fields]
|
17
|
+
assert_equal ["c"], data["row1"][2]
|
18
|
+
assert_equal [""], data["row2"][2]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_break_with_fix
|
23
|
+
content =<<-EOF
|
24
|
+
#Id ValueA ValueB OtherID
|
25
|
+
row1 a|aa|aaa b Id1|Id2
|
26
|
+
row2 A B Id3
|
27
|
+
row3 a C Id4
|
28
|
+
EOF
|
29
|
+
|
30
|
+
TmpFile.with_file(content) do |filename|
|
31
|
+
tsv = TSV.parse(File.open(filename), :sep => /\s+/, :fix => proc{|l| l =~ /^row2/? nil : l})
|
32
|
+
assert_equal %w(row1), tsv.first.keys
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_hash
|
37
|
+
content =<<-EOF
|
38
|
+
#Id ValueA ValueB
|
39
|
+
row1 a|aa|aaa b
|
40
|
+
row2 A B
|
41
|
+
EOF
|
42
|
+
|
43
|
+
TmpFile.with_file(content) do |filename|
|
44
|
+
data = {}
|
45
|
+
data, extra = TSV.parse(File.open(filename), :sep => /\s+/)
|
46
|
+
assert_equal "Id", extra[:key_field]
|
47
|
+
assert_equal ["ValueA", "ValueB"], extra[:fields]
|
48
|
+
assert_equal ["a", "aa", "aaa"], data["row1"][0]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_options_line
|
53
|
+
content =<<-EOF
|
54
|
+
#: :sep=/\\s+/#:case_insensitive=true
|
55
|
+
#Id ValueA ValueB
|
56
|
+
row1 a|aa|aaa b
|
57
|
+
row2 A B
|
58
|
+
EOF
|
59
|
+
|
60
|
+
TmpFile.with_file(content) do |filename|
|
61
|
+
data = {}
|
62
|
+
data, extra = TSV.parse(File.open(filename))
|
63
|
+
assert_equal "Id", extra[:key_field]
|
64
|
+
assert_equal true, extra[:case_insensitive]
|
65
|
+
assert_equal ["ValueA", "ValueB"], extra[:fields]
|
66
|
+
assert_equal ["a", "aa", "aaa"], data["row1"][0]
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
end
|
72
|
+
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
-
- 1
|
8
7
|
- 2
|
8
|
+
- 0
|
9
9
|
- 1
|
10
|
-
version:
|
10
|
+
version: 2.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Miguel Vazquez
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-02-09 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -108,9 +108,11 @@ files:
|
|
108
108
|
- lib/rbbt/util/data_module.rb
|
109
109
|
- lib/rbbt/util/excel2tsv.rb
|
110
110
|
- lib/rbbt/util/filecache.rb
|
111
|
+
- lib/rbbt/util/fix_width_table.rb
|
111
112
|
- lib/rbbt/util/log.rb
|
112
113
|
- lib/rbbt/util/misc.rb
|
113
114
|
- lib/rbbt/util/open.rb
|
115
|
+
- lib/rbbt/util/path.rb
|
114
116
|
- lib/rbbt/util/persistence.rb
|
115
117
|
- lib/rbbt/util/pkg_config.rb
|
116
118
|
- lib/rbbt/util/pkg_data.rb
|
@@ -121,6 +123,11 @@ files:
|
|
121
123
|
- lib/rbbt/util/tc_hash.rb
|
122
124
|
- lib/rbbt/util/tmpfile.rb
|
123
125
|
- lib/rbbt/util/tsv.rb
|
126
|
+
- lib/rbbt/util/tsv/accessor.rb
|
127
|
+
- lib/rbbt/util/tsv/attach.rb
|
128
|
+
- lib/rbbt/util/tsv/index.rb
|
129
|
+
- lib/rbbt/util/tsv/manipulate.rb
|
130
|
+
- lib/rbbt/util/tsv/parse.rb
|
124
131
|
- lib/rbbt/util/workflow.rb
|
125
132
|
- share/install/software/lib/install_helpers
|
126
133
|
- share/lib/R/util.R
|
@@ -130,8 +137,10 @@ files:
|
|
130
137
|
- test/rbbt/util/test_data_module.rb
|
131
138
|
- test/rbbt/util/test_excel2tsv.rb
|
132
139
|
- test/rbbt/util/test_filecache.rb
|
140
|
+
- test/rbbt/util/test_fix_width_table.rb
|
133
141
|
- test/rbbt/util/test_misc.rb
|
134
142
|
- test/rbbt/util/test_open.rb
|
143
|
+
- test/rbbt/util/test_path.rb
|
135
144
|
- test/rbbt/util/test_persistence.rb
|
136
145
|
- test/rbbt/util/test_pkg_data.rb
|
137
146
|
- test/rbbt/util/test_rake.rb
|
@@ -141,6 +150,11 @@ files:
|
|
141
150
|
- test/rbbt/util/test_tmpfile.rb
|
142
151
|
- test/rbbt/util/test_tsv.rb
|
143
152
|
- test/rbbt/util/test_workflow.rb
|
153
|
+
- test/rbbt/util/tsv/test_accessor.rb
|
154
|
+
- test/rbbt/util/tsv/test_attach.rb
|
155
|
+
- test/rbbt/util/tsv/test_index.rb
|
156
|
+
- test/rbbt/util/tsv/test_manipulate.rb
|
157
|
+
- test/rbbt/util/tsv/test_parse.rb
|
144
158
|
- test/test_helper.rb
|
145
159
|
- test/test_pkg.rb
|
146
160
|
- test/test_rbbt.rb
|
@@ -187,8 +201,10 @@ test_files:
|
|
187
201
|
- test/rbbt/util/test_data_module.rb
|
188
202
|
- test/rbbt/util/test_excel2tsv.rb
|
189
203
|
- test/rbbt/util/test_filecache.rb
|
204
|
+
- test/rbbt/util/test_fix_width_table.rb
|
190
205
|
- test/rbbt/util/test_misc.rb
|
191
206
|
- test/rbbt/util/test_open.rb
|
207
|
+
- test/rbbt/util/test_path.rb
|
192
208
|
- test/rbbt/util/test_persistence.rb
|
193
209
|
- test/rbbt/util/test_pkg_data.rb
|
194
210
|
- test/rbbt/util/test_rake.rb
|
@@ -198,6 +214,11 @@ test_files:
|
|
198
214
|
- test/rbbt/util/test_tmpfile.rb
|
199
215
|
- test/rbbt/util/test_tsv.rb
|
200
216
|
- test/rbbt/util/test_workflow.rb
|
217
|
+
- test/rbbt/util/tsv/test_accessor.rb
|
218
|
+
- test/rbbt/util/tsv/test_attach.rb
|
219
|
+
- test/rbbt/util/tsv/test_index.rb
|
220
|
+
- test/rbbt/util/tsv/test_manipulate.rb
|
221
|
+
- test/rbbt/util/tsv/test_parse.rb
|
201
222
|
- test/test_helper.rb
|
202
223
|
- test/test_pkg.rb
|
203
224
|
- test/test_rbbt.rb
|