3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# File 'lib/to_csv-rails.rb', line 3
def to_csv(options = {})
return '' if self.empty?
options.reverse_merge!(:header => true)
if options[:only]
columns = Array(options[:only]).map(&:to_sym)
else
columns = self.first.class.column_names.map(&:to_sym) - Array(options[:except]).map(&:to_sym)
end
return '' if columns.empty?
data = []
if options[:header]
header_columns = options[:header_columns].blank? ? columns.map(&:to_s).map(&:humanize) : options[:header_columns]
data << header_columns.join(',')
end
self.each do |obj|
data << columns.map{ |column| obj.send(column) }.join(',')
end
data.join("\n")
end
|