class Bmg::Writer::Csv

Constants

DEFAULT_OPTIONS

Attributes

csv_options[R]
output_preferences[R]

Public Class Methods

new(csv_options, output_preferences = nil) click to toggle source
# File lib/bmg/writer/csv.rb, line 9
def initialize(csv_options, output_preferences = nil)
  @csv_options = DEFAULT_OPTIONS.merge(csv_options)
  @output_preferences = OutputPreferences.dress(output_preferences)
end

Public Instance Methods

call(relation, string_or_io = nil) click to toggle source
# File lib/bmg/writer/csv.rb, line 15
def call(relation, string_or_io = nil)
  require 'csv'
  string_or_io, to_s = string_or_io.nil? ? [StringIO.new, true] : [string_or_io, false]
  headers, csv = infer_headers(relation.type), nil
  relation.each do |tuple|
    if csv.nil?
      headers = infer_headers(tuple) if headers.nil?
      csv_opts = csv_options.merge(headers: headers)
      csv = CSV.new(string_or_io, **csv_opts)
    end
    csv << headers.map{|h| tuple[h] }
  end
  to_s ? string_or_io.string : string_or_io
end