Class: Bulkrax::ValidationErrorCsvBuilder
- Inherits:
-
Object
- Object
- Bulkrax::ValidationErrorCsvBuilder
- Defined in:
- app/services/bulkrax/validation_error_csv_builder.rb
Overview
Builds a CSV string containing all validation errors from a guided import. File-level errors (missing required columns, unrecognized headers, empty columns, missing files) appear first as summary rows with a blank ‘row` cell. Row-level errors follow, one output row per errored data row.
Usage:
csv = Bulkrax::ValidationErrorCsvBuilder.build(
headers: result[:headers],
csv_data: result[:raw_csv_data],
row_errors: result[:rowErrors],
file_errors: {
missing_required: result[:missingRequired],
unrecognized: result[:unrecognized],
empty_columns: result[:emptyColumns],
missing_files: result[:missingFiles]
}
)
Class Method Summary collapse
Instance Method Summary collapse
- #build ⇒ Object
-
#initialize(headers:, csv_data:, row_errors:, file_errors:) ⇒ ValidationErrorCsvBuilder
constructor
A new instance of ValidationErrorCsvBuilder.
Constructor Details
#initialize(headers:, csv_data:, row_errors:, file_errors:) ⇒ ValidationErrorCsvBuilder
Returns a new instance of ValidationErrorCsvBuilder.
38 39 40 41 42 43 |
# File 'app/services/bulkrax/validation_error_csv_builder.rb', line 38 def initialize(headers:, csv_data:, row_errors:, file_errors:) @headers = headers @csv_data = csv_data @row_errors = row_errors @file_errors = file_errors end |
Class Method Details
.build(headers:, csv_data:, row_errors:, file_errors: {}) ⇒ String
Returns CSV content.
34 35 36 |
# File 'app/services/bulkrax/validation_error_csv_builder.rb', line 34 def self.build(headers:, csv_data:, row_errors:, file_errors: {}) new(headers: headers, csv_data: csv_data, row_errors: row_errors, file_errors: file_errors).build end |
Instance Method Details
#build ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/services/bulkrax/validation_error_csv_builder.rb', line 45 def build errors_by_row = group_errors_by_row blank_data = Array.new(@headers.length) CSV.generate(force_quotes: false) do |csv| csv << ['row', 'errors'] + @headers file_level_error_rows.each do || csv << [nil, ] + blank_data end @csv_data.each_with_index do |record, index| row_number = index + 2 # header is row 1; first data row is row 2 = errors_by_row[row_number]&.map { |e| e[:message] }&.join(' | ') raw_row = record[:raw_row] || {} csv << [row_number, ] + @headers.map { |h| raw_row[h] } end end end |