lib/typus/controller/format.rb in typus-3.1.7 vs lib/typus/controller/format.rb in typus-3.1.8
- old
+ new
@@ -17,61 +17,42 @@
# TODO: Find in batches only works properly if it's used on models, not
# controllers, so in this action does nothing. We should find a way
# to be able to process large amounts of data.
#++
def generate_csv
- if can_export?(:csv)
- fields = @resource.typus_fields_for(:csv)
+ fields = @resource.typus_fields_for(:csv)
+ options = { :conditions => @conditions, :batch_size => 1000 }
- filename = Rails.root.join("tmp", "export-#{@resource.to_resource}-#{Time.zone.now.to_s(:number)}.csv")
-
- options = { :conditions => @conditions, :batch_size => 1000 }
-
- ::CSV.open(filename, 'w') do |csv|
- csv << fields.keys.map { |k| @resource.human_attribute_name(k) }
- @resource.find_in_batches(options) do |records|
- records.each do |record|
- csv << fields.map do |key, value|
- case value
- when :transversal
- a, b = key.split(".")
- record.send(a).send(b)
- when :belongs_to
- record.send(key).try(:to_label)
- else
- record.send(key)
- end
+ data = ::CSV.generate do |csv|
+ csv << fields.keys.map { |k| @resource.human_attribute_name(k) }
+ @resource.find_in_batches(options) do |records|
+ records.each do |record|
+ csv << fields.map do |key, value|
+ case value
+ when :transversal
+ a, b = key.split(".")
+ record.send(a).send(b)
+ when :belongs_to
+ record.send(key).try(:to_label)
+ else
+ record.send(key)
end
- end
+ end
end
end
-
- send_file filename
- else
- not_allowed
end
- end
- def generate_json
- export(:json)
+ send_data data, :filename => "export-#{@resource.to_resource}-#{Time.zone.now.to_s(:number)}.csv"
end
- def generate_xml
- can_export?(:xml) ? export(:xml) : not_allowed
- end
-
def export(format)
fields = @resource.typus_fields_for(format).map(&:first)
methods = fields - @resource.column_names
except = @resource.column_names - fields
get_paginated_data
render format => @items.send("to_#{format}", :methods => methods, :except => except)
- end
-
- def can_export?(format)
- @resource.typus_options_for(:export).extract_settings.include?(format.to_s)
end
end
end
end