Sha256: 8b20d52313e20a10dfa533bf515121a13034087b0cf5ea1ed0e09577e42b23ac

Contents?: true

Size: 905 Bytes

Versions: 3

Compression:

Stored size: 905 Bytes

Contents

require 'csv'

module RenderCsv
  module CsvRenderable
    # Converts an array to CSV formatted string
    # Options include:
    # :only => [:col1, :col2] # Specify which columns to include
    # :except => [:col1, :col2] # Specify which columns to exclude
    # :add_methods => [:method1, :method2] # Include addtional methods that aren't columns
    def to_csv(options = {})
      return '' if empty?
      return join(',') unless first.class.respond_to? :column_names

      columns = first.class.column_names
      columns &= options[:only].map(&:to_s) if options[:only]
      columns -= options[:except].map(&:to_s) if options[:except]
      columns += options[:add_methods].map(&:to_s) if options[:add_methods]

      CSV.generate(encoding: 'utf-8') do |row|
        row << columns
        self.each do |obj|
          row << columns.map { |c| obj.send(c) }
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
render_csv-2.1.0.beta1 lib/render_csv/csv_renderable.rb
render_csv-2.0.0 lib/render_csv/csv_renderable.rb
render_csv-2.0.0.beta2 lib/render_csv/csv_renderable.rb