Revision a22bfc2d
Added by Tomer Brisker almost 7 years ago
app/services/csv_exporter.rb | ||
---|---|---|
require 'csv'
|
||
|
||
module CsvExporter
|
||
def self.export(resources, columns)
|
||
header = csv_header(columns)
|
||
def self.export(resources, columns, header = default_header(columns))
|
||
raise ArgumentError, "Columns and header row aren't the same length" unless columns.length == header.length
|
||
Enumerator.new do |csv|
|
||
csv << header
|
||
columns.map!{|c| c.to_s.split('.').map(&:to_sym)}
|
||
csv << CSV.generate_line(header)
|
||
|
||
columns.map!{|c| c.to_s.split('.').map(&:to_sym)}
|
||
resources.uncached do
|
||
resources.reorder(nil).limit(nil).find_each do |obj|
|
||
csv << CSV.generate_line(columns.map{|c| c.inject(obj, :try)})
|
||
... | ... | |
end
|
||
end
|
||
|
||
def self.csv_header(columns)
|
||
CSV.generate_line(columns.map{|c| c.to_s.titleize})
|
||
def self.default_header(columns)
|
||
columns.map{|c| c.to_s.titleize}
|
||
end
|
||
end
|
test/unit/csv_exporter_test.rb | ||
---|---|---|
result.next
|
||
end
|
||
end
|
||
|
||
test 'accepts custom column headers' do
|
||
result = CsvExporter.export(Host::Managed, [:id], ['My Lovely Header'])
|
||
assert_equal "My Lovely Header\n", result.next
|
||
end
|
||
|
||
test 'ensures correct number of headers' do
|
||
assert_raises ArgumentError do
|
||
CsvExporter.export(Host::Managed, [:id, :name], ['Not Enough Headers!'])
|
||
end
|
||
end
|
||
end
|
Also available in: Unified diff
Fixes #19588 - Allow setting custom headers in CSV export