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
29
30
31
32
33
34
35
36
|
# File 'lib/to_csv-rails.rb', line 4
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 do |column|
begin
column_value = obj.send(column).to_s
column_value.include?(",") ? "\"#{column_value}\"" : column_value
rescue
''
end
end.join(',')
end
data.join("\n")
end
|