rbbt-util 1.2.1 → 2.0.1
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.
- 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
|