Sha256: 6fd245124d3906186260455358a0b14e7a9a3fcc16d025c5c2992dd193aefdd8

Contents?: true

Size: 1.82 KB

Versions: 1

Compression:

Stored size: 1.82 KB

Contents

require 'csv'

module Typus
  module Controller
    module Format

      protected

      def generate_html
        items_per_page = @resource.typus_options_for(:per_page)
        @items = @resource.page(params[:page]).per(items_per_page)
      end

      #--
      # 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
        fields = @resource.typus_fields_for(:csv)

        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
          @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
      end

      def generate_json
        export(:json)
      end

      def generate_xml
        export(:xml)
      end

      def export(format)
        fields = @resource.typus_fields_for(format).map { |i| i.first }
        methods = fields - @resource.column_names
        except = @resource.column_names - fields
        render format => @resource.send("to_#{format}", :methods => methods, :except => except)
      end

    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
typus-3.1.0.rc18 lib/typus/controller/format.rb