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)