Sha256: 5d3631cf9398162a2134b7c1f5fca5880644f20f152817d2fc631c5f39dd65d4

Contents?: true

Size: 898 Bytes

Versions: 4

Compression:

Stored size: 898 Bytes

Contents

module Comma

  class Generator

    def initialize(instance, style)
      @instance = instance
      @style    = style
      @options  = {}

      if @style.is_a? Hash
        @options  = @style.clone
        @style    = @options.delete(:style) || :default
        @filename = @options.delete(:filename)
      end
    end

    def run(iterator_method)
      if @filename
        FasterCSV.open(@filename, 'w', @options){ |csv| append_csv(csv, iterator_method) } and return true
      else
        FasterCSV.generate(@options){ |csv| append_csv(csv, iterator_method) }
      end
    end

    private
    def append_csv(csv, iterator_method)
      return '' if @instance.empty?
      csv << @instance.first.to_comma_headers(@style) # REVISIT: request to optionally include headers
      @instance.send(iterator_method) do |object|
        csv << object.to_comma(@style)
      end
    end

  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
vibedeck-comma-0.4.2 lib/comma/generator.rb
comma-0.4.1 lib/comma/generator.rb
comma-0.4.0 lib/comma/generator.rb
comma-0.3.2 lib/comma/generator.rb