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