Sha256: f73bf3c44d05afcabf40194b893db12627fa5af4cb56bbee017f59565949ab4a

Contents?: true

Size: 854 Bytes

Versions: 4

Compression:

Stored size: 854 Bytes

Contents

# frozen_string_literal: true

# simple class to build scv files

# csv = CsvWriter.new
# csv.add a: 1, b: 'a', c: '"a'
# csv.add a: ',', b: 'foo, bar'
# csv.to_s

class SimpleCsvWriter
  def initialize(delimiter: nil)
    @data      = []
    @delimiter = delimiter || "\t"
  end

  # add hash or list
  def add(data)
    list = if data.class == Hash
             @keys ||= data.keys
             @keys.map { |key| data[key] }
           else
             data
           end

    @data.push list.map { |el| fmt(el) }.join(@delimiter)
  end

  def to_s
    if @keys
      @keys.map(&:to_s).join(@delimiter) + "\n" +
        @data.join($RS)
    else
      @data.join($RS)
    end
  end

  private

  def fmt(item)
    item = item.to_s.gsub($RS, '\\n').gsub('"', '""')

    item.include?(@delimiter) || item.include?('\\') ? "\"#{item}\"" : item
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
flowcommerce_spree-0.0.4 lib/simple_csv_writer.rb
flowcommerce_spree-0.0.3 lib/simple_csv_writer.rb
flowcommerce_spree-0.0.2 lib/simple_csv_writer.rb
flowcommerce_spree-0.0.1 lib/simple_csv_writer.rb