class Resque::Reports::CsvReport

Class to inherit from for custom CSV reports To make your custom report you must define at least:

1. directory, is where to write reports to
2. source, is symbol of method that retrieves report data
3. table, report table configuration using DSL

Constants

DEFAULT_CSV_OPTIONS

Attributes

csv_options[RW]
options[RW]

Public Class Methods

new(*args) click to toggle source
Calls superclass method Resque::Reports::BaseReport::new
# File lib/resque/reports/csv_report.rb, line 26
def initialize(*args)
  csv_options DEFAULT_CSV_OPTIONS.merge(options || Hash.new)

  super(*args)
end

Public Instance Methods

error_message(error) click to toggle source
# File lib/resque/reports/csv_report.rb, line 66
      def error_message(error)
        error_message = []
        error_message << 'Выгрузка отчета невозможна. '
        error_message << case error
                         when Encoding::UndefinedConversionError
                           <<-ERR_MSG.gsub(/^ {29}/, '')
                             Символ #{error.error_char} не поддерживается
                             заданной кодировкой
                           ERR_MSG
                         when EncodingError
                           'Ошибка преобразования в заданную кодировку'
                         else
                           fail error
                         end
        error_message * ' '
      end
write(io, force = false) click to toggle source
# File lib/resque/reports/csv_report.rb, line 32
def write(io, force = false)
  # You must use ancestor methods to work with report data:
  #   1) data_size => returns source data size
  #   2) data_each => yields given block for each source data element
  #   3) build_table_header => returns Array of report column names
  #   4) build_table_row(object) => returns Array of report cell values
  #                                 (same order as header)
  progress = 0

  CSV(io, options) do |csv|
    write_line csv, build_table_header

    data_each(force) do |data_element|
      begin
        write_line csv, build_table_row(data_element)
      rescue
        handle_error
      end

      handle_progress(progress += 1, data_size)
    end

    handle_progress(progress, data_size, true)
  end
end
write_line(csv, row_cells) click to toggle source
# File lib/resque/reports/csv_report.rb, line 58
def write_line(csv, row_cells)
  csv << row_cells
end