Sha256: daf9132f946634fa9aa0bd1b30cc268b9939bbc875115e1c3e7abc4be650bf14

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

require 'csv'

module Typus
  module Controller
    module Format

      protected

      # This is crazy, but I want to have support for Kaminari, WillPaginate
      # and whatever other pagination system which comes.
      def get_paginated_data
        items_per_page = @resource.typus_options_for(:per_page)

        @items = if defined?(Kaminari)
          @resource.page(params[:page]).per(items_per_page)
        elsif defined?(WillPaginate)
          @resource.paginate(:page => params[:page], :per_page => items_per_page)
        else
          @resource.limit(items_per_page) # Pagination is disabled, so just in case limit to 50 records.
        end
      end

      alias_method :generate_html, :get_paginated_data

      def generate_csv
        fields = @resource.typus_fields_for(:csv)

        data = ::CSV.generate do |csv|
          csv << fields.keys.map { |k| @resource.human_attribute_name(k) }
          @resource.all.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

        send_data data, :filename => "export-#{@resource.to_resource}-#{Time.zone.now.to_s(:number)}.csv"
      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

    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
typus-3.1.10 lib/typus/controller/format.rb
typus-3.1.9 lib/typus/controller/format.rb