class CC::Config::Validation::FileValidator

Attributes

data[R]
errors[R]
path[R]
registry[R]
warnings[R]

Public Class Methods

new(path, registry) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 9
def initialize(path, registry)
  @path = path
  @registry = registry

  @errors = []
  @warnings = []

  validate
end

Public Instance Methods

valid?() click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 19
def valid?
  errors.none?
end

Private Instance Methods

denormalize_subvalidator(validator, prefix) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 31
def denormalize_subvalidator(validator, prefix)
  validator.errors.each do |msg|
    errors << "#{prefix}: #{msg}"
  end
  validator.warnings.each do |msg|
    warnings << "#{prefix}: #{msg}"
  end
end
engine_exists?(engine) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 79
def engine_exists?(engine)
  !registry.fetch_engine_details(engine).nil?
rescue CC::EngineRegistry::EngineDetailsNotFoundError
  false
end
validate() click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 27
def validate
  raise NotImplementedError, "use a subclass"
end
validate_checks() click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 85
def validate_checks
  return unless validate_key_type("checks", Hash)

  data.fetch("checks", {}).each do |check_name, check_data|
    validator = CheckValidator.new(check_data)
    denormalize_subvalidator(validator, "check #{check_name}")
  end
end
validate_engine_existence(engine_name, engine_data) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 60
def validate_engine_existence(engine_name, engine_data)
  if [true, false].include?(engine_data)
    engine_data = {
      "enabled" => true,
      "channel" => Engine::DEFAULT_CHANNEL,
    }
  end

  engine = Engine.new(
    engine_name,
    enabled: engine_data.fetch("enabled", true),
    channel: engine_data["channel"],
    config: engine_data["config"],
  )
  unless engine_exists?(engine)
    warnings << "unknown engine or channel <#{engine.name}:#{engine.channel}>"
  end
end
validate_engines(key, legacy: false) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 47
def validate_engines(key, legacy: false)
  return unless validate_key_type(key, Hash)

  data.fetch(key, {}).each do |engine_name, engine_data|
    engine_validator = EngineValidator.new(engine_data, legacy: legacy)
    denormalize_subvalidator(engine_validator, "engine #{engine_name}")

    if engine_validator.valid?
      validate_engine_existence(engine_name, engine_data)
    end
  end
end
validate_exclude_pattern(key, legacy: false) click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 94
def validate_exclude_pattern(key, legacy: false)
  types =
    if legacy
      [Array, String]
    else
      Array
    end
  return unless validate_key_type(key, types)

  Array(data.fetch(key, [])).each do |pattern|
    unless pattern.is_a?(String)
      errors << "each exclude pattern should be a string, but '#{pattern.inspect}' is a #{pattern.class.to_s.downcase}"
    end
  end
end
validate_prepare() click to toggle source
# File lib/cc/config/validation/file_validator.rb, line 40
def validate_prepare
  return unless validate_key_type("prepare", Hash)

  validator = PrepareValidator.new(data.fetch("prepare", {}))
  denormalize_subvalidator(validator, "prepare section")
end