class Ruby::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

Attributes

csv_options[R]

Public Class Methods

new(*args) click to toggle source
Calls superclass method Ruby::Reports::BaseReport::new
# File lib/ruby/reports/csv_report.rb, line 14
def initialize(*args)
  config.extension = :csv
  super
  @csv_options = config.csv_options
end

Public Instance Methods

error_message(error) click to toggle source
# File lib/ruby/reports/csv_report.rb, line 59
      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
progress_message(*args) click to toggle source
# File lib/ruby/reports/csv_report.rb, line 55
def progress_message(*args)
  'Выгрузка отчета в CSV'
end
write(io, force = false) click to toggle source
# File lib/ruby/reports/csv_report.rb, line 20
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, csv_options) do |csv|
    write_line csv, table.build_header

    iterator.data_each(force) do |data_element|
      begin
        write_line csv, table.build_row(data_element)
      rescue
        events_handler.error
      end

      events_handler.progress(progress += 1, iterator.data_size)
    end

    events_handler.progress(progress, iterator.data_size, true)
  end
end
write_line(csv, row_cells) click to toggle source
# File lib/ruby/reports/csv_report.rb, line 46
def write_line(csv, row_cells)
  csv << row_cells
end