troessner/reek

View on GitHub
lib/reek/configuration/schema_validator.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true

require_relative '../errors/config_file_error'
require_relative 'schema'

module Reek
  module Configuration
    #
    # Schema validator module.
    #
    class SchemaValidator
      def initialize(configuration)
        @configuration = configuration
        config_directories = configuration['directories']&.keys || []
        @validator = Reek::Configuration::Schema.schema(config_directories)
      end

      def validate
        result = @validator.call(@configuration)
        return if result.success?

        raise Errors::ConfigFileError, error_message(result.errors)
      rescue NoMethodError
        raise Errors::ConfigFileError, 'unrecognized configuration data'
      end

      private

      # :reek:UtilityFunction
      def error_message(errors)
        messages = errors.map do |error|
          "[/#{error.path.join('/')}] #{error.text}."
        end.join("\n")
        "\n#{messages}"
      end
    end
  end
end