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