rbbt-util 5.8.0 → 5.8.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d2929287d81291dd772ab9ee6f415b52bafad0db
4
- data.tar.gz: 61ad4ae0dade13e2cbc0e02c39107243d92a52e0
3
+ metadata.gz: d5612376bb0b3bc5345a607fd72cfb4f744eeba8
4
+ data.tar.gz: 8d8d53efd7203512d28462d609bf6f52a1c492c0
5
5
  SHA512:
6
- metadata.gz: 14285e88be1d35d8c23fb77ad038d2818ae1df04245bd2fd48bbab4f72b419eff1042764b8173b33c1d96955dee0df7ecfd27a84efb34171abb10bae05169b79
7
- data.tar.gz: d96daf9acd2d79ab8b9425d849fd9442b7fd4ee1d614d364d135b9a601d0b7de1278eba414cb464f92f325cb84ab131311dff1937c1bdc2a99d631e7ea5f146b
6
+ metadata.gz: f858ffbc83f9a199a22c9c1a49b1d40f0de1f1ea8e9979820901040a23a9eb3c7077f354aac6260876c7f04941bd2a2eea976262f6b73a1a46687421fbc441f7
7
+ data.tar.gz: 3dd1ed9a2dcf25fa5939935f27ad026df16c10a8e464743122e7f6725f8317db82cdee7c5f01b5c7866a442aee9ac9cfc963eca6e276eba372bacc6749ee84d2
@@ -196,6 +196,10 @@ module Path
196
196
  TSV.open(self.produce, *args)
197
197
  end
198
198
 
199
+ def traverse(options = {}, &block)
200
+ TSV::Parser.traverse(self.open, options, &block)
201
+ end
202
+
199
203
  def list
200
204
  Open.read(self.produce.find).split "\n"
201
205
  end
data/lib/rbbt/tsv.rb CHANGED
@@ -110,20 +110,11 @@ module TSV
110
110
  Parser.new stream, options
111
111
  end
112
112
  end
113
-
114
113
  def self.parse(stream, data, options = {})
115
- monitor, grep, invert_grep, head = Misc.process_options options, :monitor, :grep, :invert_grep, :head
116
-
117
- parser = Parser.new stream, options
118
114
 
119
- if grep
120
- stream.rewind
121
- stream = Open.grep(stream, grep, invert_grep)
122
- parser.first_line = stream.gets
123
- end
124
-
125
- line = parser.rescue_first_line
115
+ parser = TSV::Parser.new stream, options
126
116
 
117
+ # dump with tchmgr
127
118
  if defined? TokyoCabinet and TokyoCabinet::HDB === data and parser.straight and
128
119
  data.close
129
120
  begin
@@ -137,9 +128,11 @@ module TSV
137
128
  data.write
138
129
  end
139
130
 
131
+ # make TSV
140
132
  data.extend TSV unless TSV === data
141
133
  data.unnamed = true
142
134
 
135
+ # choose serializer
143
136
  if data.serializer == :type
144
137
  data.serializer = case
145
138
  when parser.cast.nil?
@@ -155,59 +148,11 @@ module TSV
155
148
  end
156
149
  end
157
150
 
158
- if monitor and (stream.respond_to?(:size) or (stream.respond_to?(:stat) and stream.stat.respond_to? :size)) and stream.respond_to?(:pos)
159
- size = case
160
- when stream.respond_to?(:size)
161
- stream.size
162
- else
163
- stream.stat.size
164
- end
165
- desc = "Parsing Stream"
166
- step = 100
167
- if Hash === monitor
168
- desc = monitor[:desc] if monitor.include? :desc
169
- step = monitor[:step] if monitor.include? :step
170
- end
171
- progress_monitor = Progress::Bar.new(size, 0, step, desc)
172
- else
173
- progress_monitor = nil
174
- end
175
-
176
- line_num = 1
177
- begin
178
- while not line.nil?
179
- begin
180
- progress_monitor.tick(stream.pos) if progress_monitor
181
-
182
- raise Parser::SKIP_LINE if line.empty?
183
-
184
- line = Misc.fixutf8(line)
185
- line = parser.process line
186
- parts = parser.chop_line line
187
- key, values = parser.get_values parts
188
- values = parser.cast_values values if parser.cast?
189
- parser.add_to_data data, key, values
190
- line = stream.gets
191
- line_num += 1
192
- raise Parser::END_PARSING if head and line_num > head.to_i
193
- rescue Parser::SKIP_LINE
194
- begin
195
- line = stream.gets
196
- next
197
- rescue IOError
198
- break
199
- end
200
- rescue Parser::END_PARSING
201
- break
202
- rescue IOError
203
- Log.exception $!
204
- break
205
- end
206
- end
207
- ensure
208
- stream.close unless stream.closed?
151
+ parser.traverse(options) do |key,values|
152
+ parser.add_to_data data, key, values
209
153
  end
210
154
 
155
+ # setup the TSV
211
156
  parser.setup data
212
157
 
213
158
  data.unnamed = false
@@ -1,7 +1,7 @@
1
1
  require 'rbbt/tsv'
2
2
 
3
3
  module TSV
4
- def self.change_key(tsv, format, options = {})
4
+ def self.change_key(tsv, format, options = {}, &block)
5
5
  options = Misc.add_defaults options, :persist => false, :identifiers => tsv.identifiers
6
6
 
7
7
  identifiers, persist_input = Misc.process_options options, :identifiers, :persist_input
@@ -21,18 +21,20 @@ module TSV
21
21
 
22
22
  tsv = tsv.to_flat if orig_type == :flat
23
23
 
24
+ tsv = tsv.to_list(&block) if orig_type == :list
25
+
24
26
  tsv
25
27
  else
26
28
  tsv.reorder(format)
27
29
  end
28
30
  end
29
31
 
30
- def change_key(format, options = {})
32
+ def change_key(format, options = {}, &block)
31
33
  options = Misc.add_defaults options, :identifiers => self.identifiers
32
- TSV.change_key(self, format, options)
34
+ TSV.change_key(self, format, options, &block)
33
35
  end
34
36
 
35
- def self.swap_id(tsv, field, format, options = {})
37
+ def self.swap_id(tsv, field, format, options = {}, &block)
36
38
  options = Misc.add_defaults options, :persist => false, :identifiers => tsv.identifiers
37
39
 
38
40
  identifiers, persist_input = Misc.process_options options, :identifiers, :persist
@@ -62,6 +64,8 @@ module TSV
62
64
 
63
65
  tsv = tsv.to_flat if orig_type == :flat
64
66
 
67
+ tsv = tsv.to_list(&block) if orig_type == :list
68
+
65
69
  tsv
66
70
  end
67
71
 
@@ -1,7 +1,7 @@
1
1
  require 'rbbt/util/cmd'
2
2
  module TSV
3
3
  class Parser
4
- attr_accessor :header_hash, :sep, :sep2, :type, :key_position, :field_positions, :cast, :key_field, :fields, :fix, :select, :serializer, :straight, :take_all, :zipped, :namespace, :first_line
4
+ attr_accessor :stream, :header_hash, :sep, :sep2, :type, :key_position, :field_positions, :cast, :key_field, :fields, :fix, :select, :serializer, :straight, :take_all, :zipped, :namespace, :first_line, :stream
5
5
 
6
6
  class SKIP_LINE < Exception; end
7
7
  class END_PARSING < Exception; end
@@ -52,9 +52,9 @@ module TSV
52
52
 
53
53
  def process(line)
54
54
  l = line.chomp
55
- raise Parser::SKIP_LINE if l[0] == "#"[0] or (Proc === @select and not @select.call l)
55
+ raise SKIP_LINE if l[0] == "#"[0] or (Proc === @select and not @select.call l)
56
56
  l = @fix.call l if Proc === @fix
57
- raise Parser::END_PARSING unless l
57
+ raise END_PARSING unless l
58
58
  l
59
59
  end
60
60
 
@@ -123,46 +123,66 @@ module TSV
123
123
  def get_values_flat(parts)
124
124
  if key_position and key_position != 0 and field_positions.nil?
125
125
  value = parts.shift
126
- keys = parts
126
+ keys = parts.dup
127
127
  return [keys, [value]]
128
128
  end
129
129
 
130
- return parts.shift.split(@sep2, -1), parts.collect{|value| value.split(@sep2, -1)} if
130
+ return parts.shift.split(@sep2, -1).first, parts.collect{|value| value.split(@sep2, -1)}.flatten if
131
131
  field_positions.nil? and (key_position.nil? or key_position == 0)
132
132
 
133
133
  keys = parts[key_position].split(@sep2, -1)
134
134
 
135
135
  if @take_all
136
- values = parts.collect{|value| value.split(@sep2, -1)}
136
+ values = parts.collect{|e| e.split(@sep2, -1) }.flatten
137
137
  else
138
+ if field_positions.nil?
139
+ parts.delete_at key_position
140
+ values = parts.first
141
+ else
142
+ values = parts[field_positions.first]
143
+ end
138
144
 
139
- values = if field_positions.nil?
140
- parts.tap{|o| o.delete_at key_position}
141
- else
142
- parts.values_at *field_positions
143
- end.collect{|value| value.split(@sep2, -1)}
145
+ values = values.split(@sep2, -1)
144
146
  end
145
- [keys, values]
147
+
148
+ [keys.first, values]
146
149
  end
147
150
 
148
151
  def add_to_data_no_merge_list(data, key, values)
149
152
  data[key] = values unless data.include? key
153
+ nil
150
154
  end
151
155
 
152
- def add_to_data_flat(data, keys, values)
156
+ def add_to_data_flat_keys(data, keys, values)
153
157
  keys.each do |key|
154
- data[key] = values.flatten unless data.include? key
158
+ data[key] = values unless data.include? key
155
159
  end
160
+ nil
161
+ end
162
+
163
+ def add_to_data_flat(data, key, values)
164
+ data[key] = values unless data.include? key
165
+ nil
156
166
  end
157
167
 
158
- def add_to_data_flat_merge(data, keys, values)
168
+ def add_to_data_flat_merge(data, key, values)
169
+ if data.include? key
170
+ data[key] = data[key].concat values
171
+ else
172
+ data[key] = values
173
+ end
174
+ nil
175
+ end
176
+
177
+ def add_to_data_flat_merge_keys(data, keys, values)
159
178
  keys.each do |key|
160
179
  if data.include? key
161
- data[key] = data[key].concat values.flatten
180
+ data[key] = data[key].concat values
162
181
  else
163
- data[key] = values.flatten
182
+ data[key] = values.dup
164
183
  end
165
184
  end
185
+ nil
166
186
  end
167
187
 
168
188
  def add_to_data_no_merge_double(data, keys, values)
@@ -170,6 +190,7 @@ module TSV
170
190
  next if data.include? key
171
191
  data[key] = values
172
192
  end
193
+ nil
173
194
  end
174
195
 
175
196
  def add_to_data_merge(data, keys, values)
@@ -184,6 +205,7 @@ module TSV
184
205
  data[key] = values
185
206
  end
186
207
  end
208
+ nil
187
209
  end
188
210
 
189
211
  def add_to_data_merge_zipped(data, keys, values)
@@ -207,6 +229,7 @@ module TSV
207
229
  data[key] = values.collect{|v| [v]}
208
230
  end
209
231
  end
232
+ nil
210
233
  end
211
234
 
212
235
  def add_to_data_zipped(data, keys, values)
@@ -224,6 +247,7 @@ module TSV
224
247
  next if data.include? key
225
248
  data[key] = values.collect{|v| [v]}
226
249
  end
250
+ nil
227
251
  end
228
252
 
229
253
 
@@ -317,6 +341,7 @@ module TSV
317
341
  def initialize(stream = nil, options = {})
318
342
  @header_hash = Misc.process_options(options, :header_hash) || "#"
319
343
  @sep = Misc.process_options(options, :sep) || "\t"
344
+ @stream = stream
320
345
 
321
346
  header_options = parse_header(stream)
322
347
  options = header_options.merge options
@@ -334,6 +359,9 @@ module TSV
334
359
  merge = @zipped if merge.nil?
335
360
  merge = false if merge.nil?
336
361
 
362
+ fields = options[:fields]
363
+ fix_fields(options)
364
+
337
365
  case @type
338
366
  when :double
339
367
  self.instance_eval do alias get_values get_values_double end
@@ -363,18 +391,24 @@ module TSV
363
391
  self.instance_eval do alias cast_values cast_values_list end
364
392
  self.instance_eval do alias add_to_data add_to_data_no_merge_list end
365
393
  when :flat
366
- @take_all = true if options[:fields].nil?
394
+ @take_all = true if field_positions.nil?
367
395
  self.instance_eval do alias get_values get_values_flat end
368
396
  self.instance_eval do alias cast_values cast_values_double end
369
397
  if merge
370
- self.instance_eval do alias add_to_data add_to_data_flat_merge end
398
+ if key_position and key_position != 0 and field_positions.nil?
399
+ self.instance_eval do alias add_to_data add_to_data_flat_merge_keys end
400
+ else
401
+ self.instance_eval do alias add_to_data add_to_data_flat_merge end
402
+ end
371
403
  else
372
- self.instance_eval do alias add_to_data add_to_data_flat end
404
+ if key_position and key_position != 0 and field_positions.nil?
405
+ self.instance_eval do alias add_to_data add_to_data_flat_keys end
406
+ else
407
+ self.instance_eval do alias add_to_data add_to_data_flat end
408
+ end
373
409
  end
374
410
  end
375
411
 
376
- fields = options[:fields]
377
- fix_fields(options)
378
412
 
379
413
  @straight = false if @sep != "\t" or not @cast.nil? or merge or (@type == :flat and fields)
380
414
  end
@@ -388,5 +422,87 @@ module TSV
388
422
  data.cast = @cast if Symbol === @cast
389
423
  data
390
424
  end
425
+
426
+ def traverse(options = {})
427
+ monitor, grep, invert_grep, head = Misc.process_options options, :monitor, :grep, :invert_grep, :head
428
+ raise "No block given in TSV::Parser#traverse" unless block_given?
429
+
430
+ stream = @stream
431
+ # get parser
432
+
433
+ # grep
434
+ if grep
435
+ stream.rewind
436
+ stream = Open.grep(stream, grep, invert_grep)
437
+ self.first_line = stream.gets
438
+ end
439
+
440
+ # first line
441
+ line = self.rescue_first_line
442
+
443
+ # setup monitor
444
+ if monitor and (stream.respond_to?(:size) or (stream.respond_to?(:stat) and stream.stat.respond_to? :size)) and stream.respond_to?(:pos)
445
+ size = case
446
+ when stream.respond_to?(:size)
447
+ stream.size
448
+ else
449
+ stream.stat.size
450
+ end
451
+ desc = "Parsing Stream"
452
+ step = 100
453
+ if Hash === monitor
454
+ desc = monitor[:desc] if monitor.include? :desc
455
+ step = monitor[:step] if monitor.include? :step
456
+ end
457
+ progress_monitor = Progress::Bar.new(size, 0, step, desc)
458
+ else
459
+ progress_monitor = nil
460
+ end
461
+
462
+ # parser
463
+ line_num = 1
464
+ begin
465
+ while not line.nil?
466
+ begin
467
+ progress_monitor.tick(stream.pos) if progress_monitor
468
+
469
+ raise SKIP_LINE if line.empty?
470
+
471
+ line = Misc.fixutf8(line)
472
+ line = self.process line
473
+ parts = self.chop_line line
474
+ key, values = self.get_values parts
475
+ values = self.cast_values values if self.cast?
476
+
477
+ yield key, values, self
478
+
479
+ line = stream.gets
480
+ line_num += 1
481
+ raise END_PARSING if head and line_num > head.to_i
482
+ rescue SKIP_LINE
483
+ begin
484
+ line = stream.gets
485
+ next
486
+ rescue IOError
487
+ break
488
+ end
489
+ rescue END_PARSING
490
+ break
491
+ rescue IOError
492
+ Log.exception $!
493
+ break
494
+ end
495
+ end
496
+ ensure
497
+ stream.close unless stream.closed?
498
+ end
499
+
500
+ self
501
+ end
502
+
503
+ def self.traverse(stream, options = {}, &block)
504
+ parser = Parser.new(stream, options)
505
+ parser.traverse(options, &block)
506
+ end
391
507
  end
392
508
  end
data/lib/rbbt/util/log.rb CHANGED
@@ -31,10 +31,11 @@ module Log
31
31
  return str || "" if nocolor
32
32
  color = SEVERITY_COLOR[severity] if Fixnum === severity
33
33
  color = Term::ANSIColor.send(severity) if Symbol === severity and Term::ANSIColor.respond_to? severity
34
+ color ||= ""
34
35
  if str.nil?
35
36
  color
36
37
  else
37
- color + str + color(0)
38
+ color + str + self.color(0)
38
39
  end
39
40
  end
40
41
 
@@ -94,29 +94,40 @@ class Step
94
94
  set_info(:messages, (messages || []) << message)
95
95
  end
96
96
 
97
- attr_accessor :last_log
98
- def last_log
99
- @last_log ||= Time.now
100
- end
101
-
102
- def log(status, message = nil)
103
- if message
97
+ def self.log(status, message, path, &block)
98
+ if block_given?
99
+ start = Time.now
100
+ Log.medium do
101
+ now = Time.now
102
+ str = "#{ Log.color :cyan, status.to_s }"
103
+ str << ": #{ message }" if message
104
+ str << " -- #{Log.color :blue, path.to_s}" if path
105
+ str
106
+ end
107
+ res = yield
108
+ eend = Time.now
104
109
  Log.medium do
105
110
  now = Time.now
106
- str = "+#{(now - last_log).to_i} #{ Log.color :cyan, status.to_s }: #{ message } -- #{path}"
107
- @last_log = now
111
+ str = "#{ Log.color :cyan, status.to_s } +#{Log.color :green, "%.1g" % (eend - start)}"
112
+ str << " -- #{Log.color :blue, path.to_s}" if path
108
113
  str
109
114
  end
110
- else
111
- Log.medium do
115
+ res
116
+ else
117
+ Log.medium do
112
118
  now = Time.now
113
- str = "+#{(now - last_log).to_i} #{ Log.color :cyan, status.to_s } -- #{path}"
114
- @last_log = now
119
+ str = "#{ Log.color :cyan, status.to_s }"
120
+ str << ": #{ message }" if message
121
+ str << " -- #{Log.color :blue, path.to_s}" if path
115
122
  str
116
123
  end
117
124
  end
118
125
  end
119
126
 
127
+ def log(status, message = nil, &block)
128
+ Step.log(status, message, path, &block)
129
+ end
130
+
120
131
  def started?
121
132
  Open.exists? info_file
122
133
  end
@@ -225,27 +236,8 @@ end
225
236
 
226
237
  module Workflow
227
238
 
228
- attr_accessor :last_log
229
- def last_log
230
- @@last_log ||= Time.now
231
- end
232
-
233
- def log(status, message = nil)
234
- if message
235
- Log.medium do
236
- now = Time.now
237
- str = "+#{(now - last_log).to_i} #{ Log.color :cyan, status.to_s }: #{ message }"
238
- @@last_log = now
239
- str
240
- end
241
- else
242
- Log.medium do
243
- now = Time.now
244
- str = "+#{(now - last_log).to_i} #{ Log.color :cyan, status.to_s }"
245
- @@last_log = now
246
- str
247
- end
248
- end
239
+ def log(status, message = nil, &block)
240
+ Step.log(status, message, nil, &block)
249
241
  end
250
242
 
251
243
  def task_info(name)
@@ -41,9 +41,9 @@ class Step
41
41
  class << self
42
42
  attr_accessor :relay_step
43
43
  alias original_log log
44
- def log(status, message = nil, do_log = true)
45
- original_log(status, message, do_log)
46
- relay_step.log([task.name.to_s, status.to_s] * ">", message.nil? ? nil : [task.name.to_s, message] * ">", false)
44
+ def log(status, message = nil)
45
+ original_log(status, message)
46
+ relay_step.log([task.name.to_s, status.to_s] * ">", message.nil? ? nil : [task.name.to_s, message] * ">")
47
47
  end
48
48
  end
49
49
  end
@@ -117,6 +117,7 @@ class Step
117
117
  log(:error, "Exception processing dependency #{dependency.path}")
118
118
  log(:error, "#{$!.class}: #{$!.message}")
119
119
  log(:error, "backtrace: #{$!.backtrace.first}")
120
+ Log.exception $!
120
121
  raise "Exception processing dependency #{dependency.path}"
121
122
  end
122
123
  }
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt-util'
4
+
5
+ require 'rbbt/sources/organism'
6
+
7
+ Misc.benchmark(10) do
8
+ Organism.identifiers("Hsa").tsv
9
+ end
10
+
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt'
4
+ require 'rbbt/util/simpleopt'
5
+
6
+ require 'rbbt/util/R'
7
+
8
+ $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
9
+
10
+ options = SOPT.setup <<EOF
11
+ Take absolute value
12
+
13
+ $ rbbt stat density <file>
14
+
15
+ Display summary information. Works with Tokyocabinet HDB and DBD as well.
16
+
17
+ -tch--tokyocabinet File is a TC HDB
18
+ -tcb--tokyocabinet_bd File is a TC BDB
19
+ -t--type* Type of tsv (single, list, double, flat)
20
+ -h--header_hash* Change the character used to mark the header line (defaults to #)
21
+ -f--field Field to change
22
+ -h--help Help
23
+ EOF
24
+
25
+ SOPT.usage if options[:help]
26
+
27
+ file = ARGV.shift
28
+
29
+ if file == '-' or file.nil?
30
+ file = STDIN
31
+ else
32
+ file = Open.open file
33
+ end
34
+
35
+ parser = TSV::Parser.new file, options
36
+
37
+ options[:fields] = [options.delete(:field) || 0]
38
+ puts TSV.header_lines(parser.key_field, parser.fields)
39
+ parser.traverse(options.merge(:type => :list)) do |k,v|
40
+ v = v.first
41
+ v = Array === v ? v.collect{|e| e.to_f.abs } : [v.to_f.abs]
42
+ puts [k,v].flatten * "\t"
43
+ end
@@ -16,10 +16,6 @@ Display summary information. Works with Tokyocabinet HDB and DBD as well.
16
16
 
17
17
  -tch--tokyocabinet File is a TC HDB
18
18
  -tcb--tokyocabinet_bd File is a TC BDB
19
- -t--type* Type of tsv (single, list, double, flat)
20
- -h--header_hash* Change the character used to mark the header line (defaults to #)
21
- -k--key_field* Change the key field
22
- -f--fields* Change the fields to load
23
19
  -h--help Help
24
20
  EOF
25
21
 
@@ -33,7 +29,6 @@ else
33
29
  file = Open.open file
34
30
  end
35
31
 
36
-
37
32
  values = file.read.split("\n").collect{|v| v.to_f}
38
33
 
39
34
  res = TmpFile.with_file do |tmp|
@@ -0,0 +1,43 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt'
4
+ require 'rbbt/util/simpleopt'
5
+
6
+ require 'rbbt/util/R'
7
+
8
+ $0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands
9
+
10
+ options = SOPT.setup <<EOF
11
+ Take logs
12
+
13
+ $ rbbt stat density <file>
14
+
15
+ Display summary information. Works with Tokyocabinet HDB and DBD as well.
16
+
17
+ -tch--tokyocabinet File is a TC HDB
18
+ -tcb--tokyocabinet_bd File is a TC BDB
19
+ -t--type* Type of tsv (single, list, double, flat)
20
+ -h--header_hash* Change the character used to mark the header line (defaults to #)
21
+ -f--field Field to change
22
+ -h--help Help
23
+ EOF
24
+
25
+ SOPT.usage if options[:help]
26
+
27
+ file = ARGV.shift
28
+
29
+ if file == '-' or file.nil?
30
+ file = STDIN
31
+ else
32
+ file = Open.open file
33
+ end
34
+
35
+ parser = TSV::Parser.new file, options
36
+
37
+ options[:fields] = [options.delete(:field) || 0]
38
+ puts TSV.header_lines(parser.key_field, parser.fields)
39
+ parser.traverse(options.merge(:type => :list)) do |k,v|
40
+ v = v.first
41
+ v = Array === v ? v.collect{|e| Math.log(e.to_f) } : [Math.log(v.to_f)]
42
+ puts [k,v].flatten * "\t"
43
+ end
@@ -54,21 +54,6 @@ row2 A B Id3
54
54
  end
55
55
  end
56
56
 
57
- def test_headerless_fields
58
- content =<<-EOF
59
- #Id ValueA ValueB OtherID
60
- row1 a|aa|aaa b Id1|Id2
61
- row2 A B Id3
62
- EOF
63
-
64
- TmpFile.with_file(content) do |filename|
65
- tsv = TSV.open(filename, :sep => /\s+/, :fields => 1)
66
- assert_equal ["a", "aa", "aaa"], tsv["row1"][0]
67
- assert_equal :double, tsv.type
68
- assert_equal [%w(a aa aaa)], tsv["row1"]
69
- end
70
- end
71
-
72
57
  def test_headerless_fields
73
58
  content =<<-EOF
74
59
  row1 a|aa|aaa b Id1|Id2
@@ -33,10 +33,17 @@ aa xx
33
33
  def setup
34
34
  @f1 = tsv(FILE1)
35
35
  @f2 = tsv(FILE2)
36
+ @f3 = tsv(FILE2, :key_field => "Y")
36
37
  @id = tsv(IDENTIFIERS)
37
38
  end
38
39
 
39
- def test_change_id
40
+ def test_swap_id
41
+ @f3.identifiers = @id
42
+ assert_equal "a", @f3.swap_id("X","A")["y"]["A"]
43
+ end
44
+
45
+
46
+ def test_change_key
40
47
  @f1.identifiers = @id
41
48
  assert @f1.change_key("X").include? "x"
42
49
  end
@@ -0,0 +1,34 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), '../..', 'test_helper.rb'))
2
+ require 'rbbt/tsv'
3
+
4
+ class TestTSVParser < Test::Unit::TestCase
5
+ def test_traverse
6
+
7
+ content =<<-EOF
8
+ row1 a|aa|aaa b Id1|Id2
9
+ EOF
10
+
11
+ TmpFile.with_file(content) do |filename|
12
+ TSV::Parser.traverse(Open.open(filename), :sep => /\s+/, :fields => [1], :type => :double) do |k,v|
13
+ assert_equal ["row1"], k
14
+ assert_equal [%w(a aa aaa)], v
15
+ end
16
+
17
+ TSV::Parser.traverse(Open.open(filename), :sep => /\s+/, :fields => [1], :type => :list) do |k,v|
18
+ assert_equal "row1", k
19
+ assert_equal ["a|aa|aaa"], v
20
+ end
21
+
22
+ TSV::Parser.traverse(Open.open(filename), :sep => /\s+/, :fields => [1], :type => :single) do |k,v|
23
+ assert_equal "row1", k
24
+ assert_equal "a|aa|aaa", v
25
+ end
26
+
27
+ TSV::Parser.traverse(Open.open(filename), :sep => /\s+/, :fields => [1], :type => :flat) do |k,v|
28
+ assert_equal "row1", k
29
+ assert_equal %w(a aa aaa), v
30
+ end
31
+ end
32
+ end
33
+ end
34
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.8.0
4
+ version: 5.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-11 00:00:00.000000000 Z
11
+ date: 2014-03-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -200,6 +200,7 @@ files:
200
200
  - share/rbbt_commands/app/start
201
201
  - share/rbbt_commands/app/template
202
202
  - share/rbbt_commands/benchmark/pthrough
203
+ - share/rbbt_commands/benchmark/tsv
203
204
  - share/rbbt_commands/color
204
205
  - share/rbbt_commands/conf/web_user/add
205
206
  - share/rbbt_commands/conf/web_user/list
@@ -211,7 +212,9 @@ files:
211
212
  - share/rbbt_commands/resource/find
212
213
  - share/rbbt_commands/resource/get
213
214
  - share/rbbt_commands/resource/produce
215
+ - share/rbbt_commands/stat/abs
214
216
  - share/rbbt_commands/stat/density
217
+ - share/rbbt_commands/stat/log
215
218
  - share/rbbt_commands/study/task
216
219
  - share/rbbt_commands/system/purge
217
220
  - share/rbbt_commands/system/report
@@ -264,6 +267,7 @@ files:
264
267
  - test/rbbt/tsv/test_index.rb
265
268
  - test/rbbt/tsv/test_manipulate.rb
266
269
  - test/rbbt/tsv/test_parallel.rb
270
+ - test/rbbt/tsv/test_parser.rb
267
271
  - test/rbbt/tsv/test_util.rb
268
272
  - test/rbbt/util/concurrency/processes/test_socket.rb
269
273
  - test/rbbt/util/concurrency/test_processes.rb
@@ -357,6 +361,7 @@ test_files:
357
361
  - test/rbbt/tsv/test_parallel.rb
358
362
  - test/rbbt/tsv/test_index.rb
359
363
  - test/rbbt/tsv/test_change_id.rb
364
+ - test/rbbt/tsv/test_parser.rb
360
365
  - test/rbbt/tsv/test_util.rb
361
366
  - test/rbbt/tsv/test_accessor.rb
362
367
  - test/rbbt/tsv/test_filter.rb