lib/listings/base.rb in listings-0.1.13 vs lib/listings/base.rb in listings-0.1.14
- old
+ new
@@ -175,29 +175,28 @@
def format
(params[:format] || :html).to_sym
end
- def to_array
- data = []
+ def send_csv(controller)
+ csv_filename = self.export_filename(:csv)
- data << self.columns.map { |c| c.human_name }
+ controller.headers["X-Accel-Buffering"] = "no"
+ controller.headers["Cache-Control"] = "no-cache"
+ controller.headers["Content-Type"] = "text/csv; charset=utf-8"
+ controller.headers["Content-Disposition"] = %(attachment; filename="#{csv_filename}")
+ controller.headers["Transfer-Encoding"] = "chunked"
+ controller.headers.delete("Content-Length")
- self.items.each do |item|
- row = []
- self.columns.each do |col|
- row << col.value_for(item)
- end
- data << row
- end
+ controller.response_body = Enumerator.new do |lines|
+ lines << self.columns.map { |c| c.human_name }.to_csv
- data
- end
-
- def to_csv
- CSV.generate do |csv|
- self.to_array.each do |row|
- csv << row
+ self.items.find_each do |item|
+ row = []
+ self.columns.each do |col|
+ row << col.value_for(item)
+ end
+ lines << row.to_csv
end
end
end
def method_missing(m, *args, &block)