Sha256: 9d3cf4540c6f5a056d16f645d65d90287b32fe46c3684120bb0d0cc4736186f9
Contents?: true
Size: 1.71 KB
Versions: 2
Compression:
Stored size: 1.71 KB
Contents
require 'csv' require 'spreadsheet' module ReportsKit class ReportsController < ReportsKit::BaseController VALID_PARAMS_PROPERTIES_KEYS = [:ui_filters] def index respond_to do |format| format.json do render json: { data: report_data } end format.csv do properties[:format] = 'csv' csv = CSV.generate do |csv| report_data[:table_data].each do |row| csv << row end end send_data csv, filename: "#{report_filename}.csv" end format.xls do properties[:format] = 'csv' send_data xls_string, filename: "#{report_filename}.xls", type: 'application/vnd.ms-excel' end end end private def report_filename report_filename_method = ReportsKit.configuration.report_filename_method return 'Report' unless report_filename_method instance_eval(&report_filename_method) end def report_data Reports::Data::Generate.new(properties, context_record: context_record).perform end def properties @properties ||= begin properties = Reports::Properties.generate(self) properties.merge(params_properties).deep_symbolize_keys end end def params_properties @params_properties ||= ActiveSupport::JSON.decode(params[:properties]).with_indifferent_access.slice(*VALID_PARAMS_PROPERTIES_KEYS) 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
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
reports_kit-0.3.3 | lib/reports_kit/reports_controller.rb |
reports_kit-0.3.2 | lib/reports_kit/reports_controller.rb |