class Midos::Reader
Constants
- DEFAULT_IO
Attributes
records[R]
Public Class Methods
parse(*args, &block)
click to toggle source
# File lib/midos/reader.rb 37 def parse(*args, &block) 38 reader = new(args.extract_options!).parse(*args, &block) 39 block ? reader : reader.records 40 end
parse_file(*args, &block)
click to toggle source
# File lib/midos/reader.rb 42 def parse_file(*args, &block) 43 file_method(:parse, 'r', *args, &block) 44 end
transform(value, nl, vs, ovs = nil)
click to toggle source
# File lib/midos/reader.rb 46 def transform(value, nl, vs, ovs = nil) 47 rnl, rvs = replacements_for(*[nl, ovs].compact) 48 49 value.gsub!(nl, "\n") 50 value.gsub!(rnl, nl) 51 52 !value.index(vs) ? 53 replace!(value, rvs, ovs) || value : 54 value.split(vs).each { |v| replace!(v, rvs, ovs) } 55 end
Private Class Methods
replace!(value, rvs, ovs)
click to toggle source
# File lib/midos/reader.rb 59 def replace!(value, rvs, ovs) 60 value.gsub!(rvs, ovs) if rvs 61 end
Public Instance Methods
parse(io = io(), &block)
click to toggle source
# File lib/midos/reader.rb 77 def parse(io = io(), &block) 78 unless block 79 records, block = @records, amend_block { |id, record| 80 records[id] = record 81 } 82 end 83 84 id, record = nil, {} 85 86 io.each { |line| 87 line = line.chomp(le) 88 89 if line == rs 90 block[key ? id : auto_id.call, record] 91 id, record = nil, {} 92 else 93 k, v = line.split(fs, 2) 94 record[k] = k == key ? id = v : transform(v) if k && v 95 end 96 } 97 98 self 99 end
reset()
click to toggle source
Calls superclass method
Midos::Base#reset
# File lib/midos/reader.rb 67 def reset 68 super 69 @records = {} 70 end
vs=(vs)
click to toggle source
# File lib/midos/reader.rb 72 def vs=(vs) 73 @vs = vs.is_a?(Regexp) ? (@ovs = nil; vs) : 74 %r{\s*#{Regexp.escape(@ovs = vs)}\s*} 75 end
Private Instance Methods
amend_block(&block)
click to toggle source
# File lib/midos/reader.rb 107 def amend_block(&block) 108 return block unless $VERBOSE && k = @key 109 110 r, i = block.binding.eval('_ = records, io') 111 112 l = i.respond_to?(:lineno) 113 s = i.respond_to?(:path) ? i.path : 114 Object.instance_method(:inspect).bind(i).call 115 116 lambda { |id, *args| 117 if (r ||= block.binding.eval('records')).key?(id) 118 warn "Duplicate record in #{s}#{":#{i.lineno}" if l}: »#{k}:#{id}«" 119 end 120 121 block[id, *args] 122 } 123 end
transform(value)
click to toggle source
# File lib/midos/reader.rb 103 def transform(value) 104 self.class.transform(value, nl, vs, @ovs) 105 end