class Bismas::Reader

Constants

DEFAULT_IO

Attributes

records[R]

Public Class Methods

parse(*args, &block) click to toggle source
# File lib/bismas/reader.rb, line 37
def parse(*args, &block)
  reader = new(args.extract_options!).parse(*args, &block)
  block ? reader : reader.records
end
parse_file(*args, &block) click to toggle source
# File lib/bismas/reader.rb, line 42
def parse_file(*args, &block)
  file_method(:parse, 'rb', *args, &block)
end

Public Instance Methods

parse(io = io(), &block) click to toggle source
# File lib/bismas/reader.rb, line 55
def parse(io = io(), &block)
  unless block
    records, block = @records, amend_block { |id, record|
      records[id] = record
    }
  end

  Parser.parse(io, @options) { |record|
    block[key ? record[key].join : auto_id.call, record] }

  self
end
reset() click to toggle source
Calls superclass method Bismas::Base#reset
# File lib/bismas/reader.rb, line 50
def reset
  super
  @records = {}
end

Private Instance Methods

amend_block(&block) click to toggle source
# File lib/bismas/reader.rb, line 70
def amend_block(&block)
  return block unless $VERBOSE && k = @key

  r, i = block.binding.eval('_ = records, io')

  l = i.respond_to?(:lineno)
  s = i.respond_to?(:path) ? i.path :
    Object.instance_method(:inspect).bind(i).call

  lambda { |id, *args|
    if (r ||= block.binding.eval('records')).key?(id)
      warn "Duplicate record in #{s}#{":#{i.lineno}" if l}: »#{k}:#{id}«"
    end

    block[id, *args]
  }
end