Sha256: d6cedccdcdd2894b50f1d1800c10119c92c70a1a4c3fb8fa9e82e1bf569a1811

Contents?: true

Size: 1.67 KB

Versions: 4

Compression:

Stored size: 1.67 KB

Contents

require_relative 'errors'
require_relative 'engine'
require_relative 'result'
require 'active_support/core_ext/hash/keys'

module RequestHandler
  module Validation
    class DryEngine < Engine
      def self.valid_schema?(schema)
        schema_instance?(schema) || schema_class?(schema)
      end

      def self.validate(value, schema, options: {})
        value = value.deep_symbolize_keys if value.is_a?(Hash)
        to_result(call_schema(value, schema, options))
      rescue Dry::Types::ConstraintError => e
        Result.new(output: nil, errors: { '' => e })
      end

      def self.call_schema(value, schema, options)
        if options.empty?
          schema_instance?(schema) ? schema.call(value) : schema.new.call(value)
        else
          schema_instance?(schema) ? schema.with(options).call(value) : schema.new(options).call(value)
        end
      end

      def self.schema_instance?(schema)
        schema.respond_to?(:call)
      end

      def self.schema_class?(schema)
        schema.respond_to?(:schema)
      end

      def self.validate!(value, schema, options: {})
        validate(value, schema, options).tap do |result|
          valid = result.respond_to?(:valid?) ? result.valid? : result.success?
          raise Validation::Error unless valid
        end
      end

      def self.to_result(result)
        output = result.respond_to?(:to_h) ? result.to_h : result
        errors = result.respond_to?(:errors) ? result.errors.to_h : {}
        Result.new(output: output, errors: errors)
      end

      def self.error_message(validation_error)
        validation_error
      end

      def self.error_pointer(_validation_error)
        nil
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
request_handler-2.2.0 lib/request_handler/validation/dry_engine.rb
request_handler-2.1.1 lib/request_handler/validation/dry_engine.rb
request_handler-2.1.0 lib/request_handler/validation/dry_engine.rb
request_handler-2.0.0 lib/request_handler/validation/dry_engine.rb