Sha256: 96a341651fd7861f3a7f38694d22a56981ec5e086f62605f4698a7d19052822a
Contents?: true
Size: 1.46 KB
Versions: 1
Compression:
Stored size: 1.46 KB
Contents
# frozen_string_literal: true require 'request_handler/error' module RequestHandler class SchemaHandler def initialize(schema:, schema_options: {}) missing_arguments = [] missing_arguments << { schema: 'is missing' } if schema.nil? missing_arguments << { schema_options: 'is missing' } if schema_options.nil? raise MissingArgumentError, missing_arguments if missing_arguments.length.positive? raise InternalArgumentError, schema: 'must be a Schema' unless schema.is_a?(Dry::Validation::Schema) @schema = schema @schema_options = schema_options end private def validate_schema(data) raise MissingArgumentError, data: 'is missing' if data.nil? validator = validate(data) validation_failure?(validator) validator.output end def validate(data) if schema_options.empty? schema.call(data) else schema.with(schema_options).call(data) end end def validation_failure?(validator) return unless validator.failure? errors = validator.errors.each_with_object({}) do |(k, v), memo| add_note(v, k, memo) end raise SchemaValidationError, errors end def add_note(v, k, memo) memo[k] = if v.is_a? Array v.join(' ') elsif v.is_a? Hash v.each { |(val, key)| add_note(val, key, memo) } end memo end attr_reader :schema, :schema_options end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
request_handler-0.8.0 | lib/request_handler/schema_handler.rb |