class Traject::MarcReader

## Example

In a configuration file:

require 'traject/marc_reader'

settings do
  provide "reader_class_name", "Traject::MarcReader"
  provide "marc_source.type", "xml"
end

Attributes

input_stream[R]
settings[R]

Public Class Methods

new(input_stream, settings) click to toggle source
# File lib/traject/marc_reader.rb, line 61
def initialize(input_stream, settings)
  @settings = Traject::Indexer::Settings.new settings
  @input_stream = input_stream
end

Public Instance Methods

each(*args, &block) click to toggle source
# File lib/traject/marc_reader.rb, line 86
def each(*args, &block)
  self.internal_reader.each(*args, &block)
end
internal_reader() click to toggle source

Creates proper kind of ruby MARC reader, depending on settings or guesses.

# File lib/traject/marc_reader.rb, line 68
def internal_reader
  unless defined? @internal_reader
    @internal_reader =
      case settings["marc_source.type"]
      when "xml"
        parser = settings["marc_reader.xml_parser"] || @@best_xml_parser
        MARC::XMLReader.new(self.input_stream, :parser=> parser)
      when 'json'
        Traject::NDJReader.new(self.input_stream, settings)
      else
        args = { :invalid => :replace }
        args[:external_encoding] = settings["marc_source.encoding"]
        MARC::Reader.new(self.input_stream, args)
      end
  end
  return @internal_reader
end