lib/cc/config/validation/engine_validator.rb (75 lines of code) (raw):
module CC
class Config
module Validation
class EngineValidator
include HashValidations
RECOGNIZED_KEYS = %w[
enabled
channel
checks
config
exclude_fingerprints
exclude_patterns
].freeze
attr_reader :errors, :warnings
def initialize(data, legacy: false)
@data = data
@legacy = legacy
@errors = []
@warnings = []
validate
end
def valid?
errors.none?
end
private
attr_reader :data
def legacy?
@legacy
end
def validate
validate_root
return unless data.is_a?(Hash)
validate_key_type("enabled", [TrueClass, FalseClass])
validate_key_type("channel", String)
validate_key_type("config", [String, Hash])
validate_key_type("exclude_patterns", Array)
if legacy?
validate_exclude_paths
end
validate_checks
validate_exclude_fingerprints
if legacy?
warn_unrecognized_keys(RECOGNIZED_KEYS + %w[exclude_paths])
else
warn_unrecognized_keys(RECOGNIZED_KEYS)
end
end
def validate_root
if !data.is_a?(Hash) && ![true, false].include?(data)
errors << "section must be a boolean or a hash"
return false
end
true
end
def validate_checks
return unless validate_key_type("checks", Hash)
data.fetch("checks", {}).each do |_check_name, check_data|
validator = CheckValidator.new(check_data)
errors.push(*validator.errors)
warnings.push(*validator.warnings)
end
end
def validate_exclude_paths
validate_key_type("exclude_paths", [Array, String])
if data.key?("exclude_paths")
warnings << "'exclude_paths' has been deprecated, please use 'exclude_patterns' instead"
end
end
def validate_exclude_fingerprints
validate_key_type("exclude_fingerprints", Array)
end
end
end
end
end