Sha256: 54f1d5fe3830d82a153a908d4f72ccad34cda39a1348cddee4ff9c339b94f8ab

Contents?: true

Size: 1.32 KB

Versions: 5

Compression:

Stored size: 1.32 KB

Contents

# frozen_string_literal: true

require "json"
require 'json-schema'

module CouchbaseOrm
  module JsonSchema
    class Validator

      def initialize(json_validation_config)
        @json_validation_config = json_validation_config
      end

      def validate_entity(entity, json)
        case json_validation_config[:mode]
        when :strict
          strict_validation(entity, json)
        when :logger
          logger_validation(entity, json)
        else
          raise "Unknown validation mode #{json_validation_config[:mode]}"
        end
      end

      private

      attr_reader :json_validation_config

      def strict_validation(entity, json)
        error_results = common_validate(entity, json)
        raise JsonValidationError.new(Loader.instance.extract_type(entity), error_results) unless error_results.empty?
      end

      def logger_validation(entity, json)
        error_results = common_validate(entity, json)
        CouchbaseOrm.logger.error { "[COUCHBASEORM]: Invalid document #{Loader.instance.extract_type(entity)} with errors : #{error_results}" } unless error_results.empty?
      end

      def common_validate(entity, json)
        schema = Loader.instance.get_json_schema!(entity, schema_path: json_validation_config[:schema_path])
        JSON::Validator.fully_validate(schema, json)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
couchbase-orm-2.0.4 lib/couchbase-orm/json_schema/validator.rb
couchbase-orm-2.0.3 lib/couchbase-orm/json_schema/validator.rb
couchbase-orm-2.0.2 lib/couchbase-orm/json_schema/validator.rb
couchbase-orm-2.0.1 lib/couchbase-orm/json_schema/validator.rb
couchbase-orm-2.0.0 lib/couchbase-orm/json_schema/validator.rb