Sha256: a81b81a5373d5dc2230b1f3e49697b2f8ee77877fba7359db6fc0436fe80abd4

Contents?: true

Size: 964 Bytes

Versions: 40

Compression:

Stored size: 964 Bytes

Contents

require 'arc-furnace/sink'

module ArcFurnace
  class FixedColumnCSVSink < Sink
    private_attr_reader :fields, :csv

    # Expects filename to a filename to open the csv
    # Expects fields to a hash of Column name => column count
    def initialize(filename: , fields: , encoding: 'UTF-8', force_quotes: false)
      @csv = CSV.open(filename, 'wb', encoding: encoding, headers: true, force_quotes: force_quotes)
      @fields = fields
      write_header
    end

    def write_header
      csv << fields.each_with_object([]) do |(key, count), result|
        count.times { result << key }
      end
    end

    def finalize
      csv.close
    end

    def row(hash)
      row = []
      fields.each do |column_name, count|
        values = Array.wrap(hash[column_name])
        (values.slice(0, count) || []).each do |value|
          row << value
        end
        (count - values.length).times { row << nil }
      end
      csv << row
    end
  end
end

Version data entries

40 entries across 40 versions & 1 rubygems

Version Path
arc-furnace-0.1.22 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.21 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.20 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.19 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.18 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.16 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.15 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.14 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.13 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.12 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.11 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.10 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.9 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.8 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.7 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.6 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.5 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.4 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.3 lib/arc-furnace/fixed_column_csv_sink.rb
arc-furnace-0.1.0 lib/arc-furnace/fixed_column_csv_sink.rb