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.
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