Sha256: 2f622dac757b0504ad7ee6b542123601ba89a8ee2b45dda02f123bd51d08bb59

Contents?: true

Size: 779 Bytes

Versions: 1

Compression:

Stored size: 779 Bytes

Contents

module SimpleCsv
  class Writer < Base
    DEFAULTS = { force_quotes: true }.freeze

    def initialize(path, **opts, &block)
      settings merge: DEFAULTS.merge(opts)
      CSV.open(File.expand_path(path), 'w', @settings) do |csv|
        @csv = csv
        @current_row = []
        instance_eval(&block)
      end
    end

    private

    def respond_to_missing?(mtd, include_private = false)
      super
    end

    def method_missing(mtd, *args, &block)
      super unless @headers.include? mtd.to_s

      @current_row << args[0]
      row_complete = @current_row.count == @headers.count
      (@csv << @current_row) && @current_row = [] if row_complete
    end

    def headers(*column_names)
      super
      @csv << @headers if @csv
      @headers
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simple_csv-0.1.0 lib/simple_csv/writer.rb