class Valigator::CSV::Error
Attributes
details[R]
field[R]
message[R]
row[R]
type[R]
Public Class Methods
new(error)
click to toggle source
# File lib/valigator/csv/error.rb, line 13 def initialize(error) case error when Hash build_from_hash error when StandardError build_from_error error end end
Public Instance Methods
==(other)
click to toggle source
# File lib/valigator/csv/error.rb, line 22 def ==(other) row == other.row && message == other.message && type == other.type && field == other.field && details == other.details end
to_hash()
click to toggle source
# File lib/valigator/csv/error.rb, line 26 def to_hash { row: row, type: type, message: message, field: field, details: details } end
Private Instance Methods
build(type, message, row, field = nil, details = nil)
click to toggle source
# File lib/valigator/csv/error.rb, line 56 def build(type, message, row, field = nil, details = nil) @type = type @row = row @message = message @field = field @details = details end
build_from_error(error)
click to toggle source
# File lib/valigator/csv/error.rb, line 42 def build_from_error(error) error_message = standardize_message(error.message) build map_to_type(error_message), error_message, determine_row(error_message) end
build_from_hash(error)
click to toggle source
# File lib/valigator/csv/error.rb, line 38 def build_from_hash(error) build error[:type], error[:message], error[:row], error[:field], error[:details] end
determine_row(message)
click to toggle source
# File lib/valigator/csv/error.rb, line 51 def determine_row(message) matches = /line (?<lineno>\d+)/.match(message) matches[:lineno].to_i if matches end
map_to_type(message)
click to toggle source
# File lib/valigator/csv/error.rb, line 64 def map_to_type(message) case message when /Unquoted fields do not allow/ 'line_breaks' when /Missing or stray quote/, /Illegal quoting/, /Any value after quoted field isn't allowed/ 'illegal_quoting' when /Field size exceeded/ 'field_size' when /Unclosed quoted field/ 'unclosed_quote' when /invalid byte sequence/i, /incompatible encoding/i, /incompatible character encodings/i 'invalid_encoding' else 'unknown_error' end end
standardize_message(message)
click to toggle source
# File lib/valigator/csv/error.rb, line 47 def standardize_message(message) message.sub('Do not allow except col_sep_split_separator after quoted fields', 'Missing or stray quote') end