Sha256: 77c4fa27f64b826c839d88301c5aab4ce3ebe47e43b3ac532ca8d68823e19880

Contents?: true

Size: 725 Bytes

Versions: 1

Compression:

Stored size: 725 Bytes

Contents

require "csv"

module Koine
  module Csv
    class MappedColumnsParser < CsvParser
      attr_reader :column_names

      def initialize(options = {})
        @column_names = options.fetch(:column_names)
        options.delete(:column_names)
        super(options)
      end

      def parse(contents, &block)
        mapped = []
        CSV.parse(contents, parser_options) do |row|
          new_row = {}
          row.each_with_index do |value, index|
            new_row[column_name(index)] = value
          end
          mapped << new_row
        end
        block_given? ? mapped.each(&block) : mapped
      end

      private

      def column_name(index)
        column_names.fetch(index)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
koine-csv-0.2.2 lib/koine/csv/mapped_columns_parser.rb