class ArcFurnace::FixedColumnCSVSink
Public Class Methods
new(filename: , fields: , encoding: 'UTF-8', force_quotes: false)
click to toggle source
Expects filename to a filename to open the csv Expects fields to a hash of Column name => column count
# File lib/arc-furnace/fixed_column_csv_sink.rb, line 9 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
Public Instance Methods
finalize()
click to toggle source
# File lib/arc-furnace/fixed_column_csv_sink.rb, line 21 def finalize csv.close end
row(hash)
click to toggle source
# File lib/arc-furnace/fixed_column_csv_sink.rb, line 25 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
write_header()
click to toggle source
# File lib/arc-furnace/fixed_column_csv_sink.rb, line 15 def write_header csv << fields.each_with_object([]) do |(key, count), result| count.times { result << key } end end