Sha256: 5c83aeec2cfd623516b83091c5d093b545953b826cbeb5776e734f6626c5b8cb
Contents?: true
Size: 1.04 KB
Versions: 2
Compression:
Stored size: 1.04 KB
Contents
require 'csv' module UsefulRenderers 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 # :translate => boolean # Translate headers def to_csv(options = {}) klass = first.class return '' if empty? return join(',') unless klass.respond_to? :column_names columns = options[:only] ? options[:only].map(&:to_s) : klass.column_names columns -= options[:except].map(&:to_s) if options[:except] headers = columns.dup headers.map!{|col| klass.human_attribute_name col } if options[:translate] csv_options = { encoding: 'utf-8', headers: headers, write_headers: true } CSV.generate(csv_options) do |row| self.each do |obj| row << columns.map do |column| column.to_s.split('.').inject(obj) { |o, m| o.try(m) } end end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
useful_renderers-0.3.0 | lib/useful_renderers/csv_renderable.rb |
useful_renderers-0.2.0 | lib/useful_renderers/csv_renderable.rb |