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