module SciolyFF::Validator::Sections

Generic tests for (sub-)sections and types. Including classes must have two hashes REQUIRED and OPTIONAL (see other files in this dir for examples)

Public Instance Methods

all_required_sections?(rep, logger) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 13
def all_required_sections?(rep, logger)
  missing = self.class::REQUIRED.keys - rep.keys
  return true if missing.empty?

  logger.error "missing required sections: #{missing.join ', '}"
end
no_extra_sections?(rep, logger) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 20
def no_extra_sections?(rep, logger)
  extra = rep.keys - (self.class::REQUIRED.keys + self.class::OPTIONAL.keys)
  return true if extra.empty?

  logger.error "extra section(s) found: #{extra.join ', '}"
end
rep_is_hash?(rep, logger) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 7
def rep_is_hash?(rep, logger)
  return true if rep.instance_of? Hash

  logger.error "entry in #{section_name} is not a Hash"
end
sections_are_correct_type?(rep, logger) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 27
def sections_are_correct_type?(rep, logger)
  correct_types = self.class::REQUIRED.merge self.class::OPTIONAL
  rep.all? do |key, value|
    type = correct_types[key]
    next true if correct_type?(type, value)

    logger.error "#{key}: #{value} is not #{type}"
  end
end

Private Instance Methods

correct_date?(type, value) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 46
def correct_date?(type, value)
  type == Date && Date.parse(value)
rescue StandardError
  false
end
correct_type?(type, value) click to toggle source
# File lib/sciolyff/validator/sections.rb, line 39
def correct_type?(type, value)
  type.nil? ||
    (type.instance_of?(Array) && type.include?(value)) ||
    (type.instance_of?(Class) && value.instance_of?(type)) ||
    correct_date?(type, value)
end
section_name() click to toggle source
# File lib/sciolyff/validator/sections.rb, line 52
def section_name
  self.class.to_s.split('::').last
end