class ReportsKits::ReportsController

Constants

VALID_PARAMS_PROPERTIES_KEYS

Public Instance Methods

index() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 10
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 Instance Methods

params_properties() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 50
def params_properties
  @params_properties ||= ActiveSupport::JSON.decode(params[:properties]).with_indifferent_access.slice(*VALID_PARAMS_PROPERTIES_KEYS)
end
properties() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 43
def properties
  @properties ||= begin
    properties = Reports::Properties.generate(self)
    properties.merge(params_properties).deep_symbolize_keys
  end
end
report_data() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 39
def report_data
  Reports::Data::Generate.new(properties, context_record: context_record, context_params: context_params).perform
end
report_filename() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 33
def report_filename
  report_filename_method = ReportsKits.configuration.report_filename_method
  return 'Report' unless report_filename_method
  instance_eval(&report_filename_method)
end
xls_string() click to toggle source
# File lib/reports_kits/reports_controller.rb, line 54
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