class CsvValidator
Constants
- DIMENSIONS
Public Instance Methods
validate_each(record, attribute, value)
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 11 def validate_each(record, attribute, value) assert_valid_dimensions! assert_valid_checks! assign_attr_readers(record, attribute, csv_dimensions(value.path)) valid? rescue CSV::MalformedCSVError record.errors.add(attribute, *error_message) end
Private Instance Methods
assert_valid_dimensions!()
click to toggle source
rubocop:disable Layout/LineLength, Style/GuardClause
# File lib/lite/validators/csv_validator.rb, line 23 def assert_valid_dimensions! if dimensions.empty? raise ArgumentError, "Missing atleast one dimension of #{DIMENSIONS.map(&:inspect).join(', ')} attribute for comparison." else assert_valid_option!(:dimensions, DIMENSIONS) end end
checks()
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 43 def checks dimension_options = options.slice(:columns, :rows).values dimension_options.flat_map(&:keys) & CHECKS.keys end
csv_dimensions(path)
click to toggle source
rubocop:enable Layout/LineLength, Style/GuardClause
# File lib/lite/validators/csv_validator.rb, line 32 def csv_dimensions(path) dimension = { columns: 0, rows: 0 } CSV.foreach(path) do |row| dimension[:columns] = row.size if dimension[:rows].zero? dimension[:rows] += 1 end dimension end
dimensions()
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 48 def dimensions options.keys end
error_message_for(dimension, check, check_value)
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 52 def error_message_for(dimension, check, check_value) options[:message] || I18n.t( "errors.messages.csv.#{check}", **error_options(check_value).merge(dimension: dimension) ) end
valid_attr?()
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 59 def valid_attr? options.slice(*DIMENSIONS).each do |dimension, dimension_value| dimension_value.each do |check, check_value| validate_check(dimension, check, check_value) end end end
validate_check(dimension, check, check_value)
click to toggle source
# File lib/lite/validators/csv_validator.rb, line 67 def validate_check(dimension, check, check_value) return if valid_size?(value[dimension], check, check_value) record.errors.add(attribute, error_message_for(dimension, check, check_value)) end