Sha256: 57d4eb5daa748918f5c3579778a523a820a5a9c71d15d50a5cdde4b4c5c00baa

Contents?: true

Size: 1.37 KB

Versions: 3

Compression:

Stored size: 1.37 KB

Contents

require 'csv'

require 'simple_csv/version'
require 'simple_csv/settings'
require 'simple_csv/base'
require 'simple_csv/reader'
require 'simple_csv/writer'

module SimpleCsv
  @converters_initialized = false

  class RowNotComplete < StandardError; end
  class UnparseableCsv < StandardError; end
  class HeadersNotSet < UnparseableCsv; end
  class NotEnoughHeaders < UnparseableCsv; end

  def self.row_not_complete!(mtd, value)
    raise RowNotComplete,
          "Row not complete! #{mtd} called twice with value #{value}"
  end

  def self.csv_not_enough_headers!
    raise NotEnoughHeaders, 'Not enough headers defined!'
  end

  def self.csv_manually_set_headers!
    raise HeadersNotSet,
          ['CSV does not contain headers',
           'please add headers in them manually or in the file'].join(', ')
  end

  def self.read(path, **options, &block)
    initialize_converters unless converters_initialized
    Reader.new path, options, &block
  end

  def self.generate(path, **options, &block)
    initialize_converters unless converters_initialized
    Writer.new path, options, &block
  end

  def self.initialize_converters
    CSV::Converters[:blank_to_nil] = ->(f) { f && f.empty? ? nil : f }
    CSV::Converters[:null_to_nil] = ->(f) { f && f == 'NULL' ? nil : f }
    @converters_initialized = true
  end

  def self.converters_initialized
    @converters_initialized
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
simple_csv-0.2.2 lib/simple_csv.rb
simple_csv-0.2.1 lib/simple_csv.rb
simple_csv-0.2.0 lib/simple_csv.rb