lib/cc/config/validation/hash_validations.rb
module CC
class Config
module Validation
module HashValidations
def validate_hash_data
unless data.is_a?(Hash)
errors << "Config file should contain a hash, not a #{data.class.to_s.downcase}"
return false
end
true
end
def validate_key_type(key, types)
if types.is_a?(Class)
return validate_key_type(key, [types])
elsif data.key?(key)
unless types.include?(data[key].class)
errors << key_type_error_message(key, types)
return false
end
end
true
end
def key_type_error_message(key, types)
if types.one?
klass_name = types[0].to_s.downcase
article =
if klass_name[0] == "a"
"an"
else
"a"
end
"'#{key}' must be #{article} #{klass_name}"
elsif types == [TrueClass, FalseClass]
"'#{key}' must be a boolean"
else
type_names = types.map(&:to_s).map(&:downcase)
"'#{key}' must be one of #{type_names.join(", ")}"
end
end
def warn_unrecognized_keys(recognized_keys)
unknown_keys = data.keys.reject { |k| recognized_keys.include?(k) }
unknown_keys.each do |key|
warnings << "unrecognized key '#{key}'"
end
end
end
end
end
end