Sha256: dd7d627681d486edf5313a7d575a98282216295789ccbea3ca491a539dd7a06f

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

require 'csv'
require 'spreadsheet'

module ReportsKit
  class ReportsController < ReportsKit::BaseController
    def index
      respond_to do |format|
        format.json do
          render json: { data: report_data }
        end
        format.csv do
          properties[:format] = 'table'
          csv = CSV.generate do |csv|
            report_data[:table_data].each do |row|
              csv << row
            end
          end
          send_data csv, filename: "Report.csv"
        end
        format.xls do
          properties[:format] = 'table'
          send_data xls_string, filename: 'Report.xls', type:  'application/vnd.ms-excel'
        end
      end
    end

    private

    def report_data
      Reports::Data::Generate.new(properties, context_record: context_record).perform
    end

    def properties
      @properties ||= ActiveSupport::JSON.decode(params[:properties])
    end

    def xls_string
      spreadsheet = Spreadsheet::Workbook.new
      sheet = spreadsheet.create_worksheet
      report_data[:table_data].each_with_index do |row, index|
        sheet.update_row(index, *row)
      end
      io = StringIO.new
      spreadsheet.write(io)
      io.string
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
reports_kit-0.2.0 lib/reports_kit/reports_controller.rb