class CsvShaper::Encoder
Encoder
Takes a Header
and Array of Rows and converts them to a valid CSV formatted String Example: “‘ CsvShaper::Encoder.new
(@header, @rows).to_csv “`
Public Class Methods
Source
# File lib/csv_shaper/encoder.rb, line 11 def initialize(header, rows = []) if header.nil? raise MissingHeadersError, 'you must define some headers using csv.headers ...' end @header = header @rows = rows end
Public Instance Methods
Source
# File lib/csv_shaper/encoder.rb, line 24 def to_csv(local_config = nil) csv_options = options.merge(local_options(local_config)) rows = padded_rows.map do |data| CSV::Row.new(@header.mapped_columns, data, false) end if csv_options[:write_headers] && rows.empty? rows << CSV::Row.new(@header.mapped_columns, [], true) end table = CSV::Table.new(rows) csv_options.except!(*custom_options.keys) table.to_csv(**csv_options) end
Public: converts the Shaper
mapped headers and rows into a CSV String
Returns a String
Private Instance Methods
Source
# File lib/csv_shaper/encoder.rb, line 49 def custom_options CsvShaper::Config::CUSTOM_DEFAULT_OPTIONS end
Source
# File lib/csv_shaper/encoder.rb, line 45 def local_options(local_config) local_config && local_config.options || {} end
Source
# File lib/csv_shaper/encoder.rb, line 41 def options CsvShaper::Shaper.config && CsvShaper::Shaper.config.options || {} end
Source
# File lib/csv_shaper/encoder.rb, line 57 def padded_rows rows = @rows.map do |row| CSV::Row.new(row.cells.keys, row.cells.values) end table = CSV::Table.new(rows) table.values_at(*@header.columns) end
Internal: make use of ‘CSV#values_at` to pad out the cells into the correct columns for the headers
Returns an Array of Arrays