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.
Files changed (38) hide show
  1. data/lib/rbbt-util.rb +2 -1
  2. data/lib/rbbt/util/R.rb +18 -1
  3. data/lib/rbbt/util/cmd.rb +7 -6
  4. data/lib/rbbt/util/data_module.rb +31 -11
  5. data/lib/rbbt/util/fix_width_table.rb +209 -0
  6. data/lib/rbbt/util/log.rb +12 -2
  7. data/lib/rbbt/util/misc.rb +91 -12
  8. data/lib/rbbt/util/open.rb +18 -9
  9. data/lib/rbbt/util/path.rb +152 -0
  10. data/lib/rbbt/util/persistence.rb +282 -75
  11. data/lib/rbbt/util/pkg_data.rb +16 -59
  12. data/lib/rbbt/util/pkg_software.rb +15 -1
  13. data/lib/rbbt/util/rake.rb +5 -1
  14. data/lib/rbbt/util/tc_hash.rb +129 -59
  15. data/lib/rbbt/util/tsv.rb +109 -1284
  16. data/lib/rbbt/util/tsv/accessor.rb +273 -0
  17. data/lib/rbbt/util/tsv/attach.rb +228 -0
  18. data/lib/rbbt/util/tsv/index.rb +303 -0
  19. data/lib/rbbt/util/tsv/manipulate.rb +271 -0
  20. data/lib/rbbt/util/tsv/parse.rb +258 -0
  21. data/share/lib/R/util.R +5 -3
  22. data/test/rbbt/util/test_R.rb +9 -1
  23. data/test/rbbt/util/test_data_module.rb +5 -0
  24. data/test/rbbt/util/test_fix_width_table.rb +107 -0
  25. data/test/rbbt/util/test_misc.rb +43 -0
  26. data/test/rbbt/util/test_open.rb +0 -1
  27. data/test/rbbt/util/test_path.rb +10 -0
  28. data/test/rbbt/util/test_persistence.rb +63 -2
  29. data/test/rbbt/util/test_pkg_data.rb +29 -8
  30. data/test/rbbt/util/test_tc_hash.rb +52 -0
  31. data/test/rbbt/util/test_tsv.rb +55 -678
  32. data/test/rbbt/util/tsv/test_accessor.rb +109 -0
  33. data/test/rbbt/util/tsv/test_attach.rb +271 -0
  34. data/test/rbbt/util/tsv/test_index.rb +158 -0
  35. data/test/rbbt/util/tsv/test_manipulate.rb +226 -0
  36. data/test/rbbt/util/tsv/test_parse.rb +72 -0
  37. data/test/test_helper.rb +1 -0
  38. 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
@@ -7,6 +7,7 @@ require 'fileutils'
7
7
 
8
8
  class Test::Unit::TestCase
9
9
  include FileUtils
10
+
10
11
  def test_datafile(file)
11
12
  File.join(File.dirname(__FILE__), 'data', file)
12
13
  end
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: 29
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
- - 1
8
7
  - 2
8
+ - 0
9
9
  - 1
10
- version: 1.2.1
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-01-30 00:00:00 +01:00
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