module Bismas::Filter

Public Instance Methods

run(klass, options, &block) click to toggle source
# File lib/bismas/filter.rb, line 35
def run(klass, options, &block)
  execute = execute(options.values_at(*%[execute execute_mapped]), &block)
  mapping = mapping(options[:mapping], &block)

  key_format = options[:key_format]

  writer_options = {
    encoding:        encoding = options[:output_encoding],
    key:             options[:output_key],
    sort:            options[:sort],
    padding_length:  options[:padding_length],
    category_length: options[:category_length]
  }

  reader_options = {
    encoding:        options[:input_encoding],
    key:             options[:input_key],
    strict:          options[:strict],
    silent:          options[:silent],
    legacy:          options[:legacy],
    category_length: options[:category_length]
  }

  klass.open(options[:output], writer_options) { |writer|
    Reader.parse_file(options[:input], reader_options) { |id, record|
      execute[0][bind = binding]
      record = mapping.apply(encode(record, encoding))

      execute[1][bind]
      writer[key_format % id] = record
    }
  }
end