Project

General

Profile

« Previous | Next » 

Revision a22bfc2d

Added by Tomer Brisker almost 7 years ago

Fixes #19588 - Allow setting custom headers in CSV export

View differences:

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