class FlatKit::Sort

Attributes

compare_fields[R]
reader[R]
writer[R]

Public Class Methods

new(input:, input_fallback: "auto", output:, output_fallback: "auto", compare_fields:) click to toggle source
# File lib/flat_kit/sort.rb, line 7
def initialize(input:, input_fallback: "auto",
               output:, output_fallback: "auto",
               compare_fields:)

  @compare_fields = compare_fields
  @reader = ::FlatKit::Reader.create_reader_from_path(path: input, compare_fields: @compare_fields,
                                                      fallback: input_fallback)
  @writer = ::FlatKit::Writer.create_writer_from_path(path: output, fallback: output_fallback,
                                                      reader_format: @reader.format_name)
end

Public Instance Methods

call() click to toggle source
# File lib/flat_kit/sort.rb, line 18
def call
  ::FlatKit.logger.info "Sorting #{reader.source} into #{writer.destination} using key #{compare_fields.join(", ")}"
  records = Array.new.tap do |a|
    reader.each do |r|
      a << r
    end
  end
  ::FlatKit.logger.info "Read #{reader.count} records into #{records.size} element array"
  records.sort!
  ::FlatKit.logger.info "Sorted #{records.size} records"
  records.each do |r|
    writer.write(r)
  end
  writer.close
  ::FlatKit.logger.info "Wrote #{writer.count} records to #{writer.destination}"
end