codeclimate/codeclimate

View on GitHub
lib/cc/config/validation/hash_validations.rb

Summary

Maintainability
A
50 mins
Test Coverage
A
100%
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