rbbt-util 5.8.0 → 5.8.1

Sign up to get free protection for your applications and to get access to all the features.
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