Sha256: b5610f981cfdf79a71c9cf49c5437dd46b71bc3e76c235fb76fef07f73aeb5b8

Contents?: true

Size: 1.5 KB

Versions: 6

Compression:

Stored size: 1.5 KB

Contents

require 'json-schema'

module JSON
  module SchemaBuilder
    module Validation
      def validate(data, opts = { })
        _validate :validate, data, opts
      end

      def validate!(data, opts = { })
        _validate :validate!, data, opts
      end

      def fully_validate(data, opts = { })
        _validate :fully_validate, data, opts
      end

      protected

      def _validate(validator, data, opts)
        opts.reverse_merge! options if options
        customize_errors = opts.delete(:customize_errors)
        opts[:errors_as_objects] = true if customize_errors
        validation_errors = JSON::Validator.send validator, as_json, data, opts
        customize_errors ? _customize_errors(validation_errors) : validation_errors
      end

      def _customize_errors(error_objects)
        _flatten_errors(error_objects).each do |error|
          entities = Array(fragments[error[:fragment]]).select(&:error)
          entities.each do |entity|
            handler = entity.error
            case handler
            when ::Proc
              handler.call(entities, error)
            when ::String
              error[:message] = entity.error
            end
          end
        end
      end

      def _flatten_errors(error_objects)
        error_objects.map do |error_object|
          sub_errors = error_object.delete(:errors) || []
          sub_errors = sub_errors.values.flatten if sub_errors.is_a?(Hash)
          [error_object, _flatten_errors(sub_errors)]
        end.flatten
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
json-schema_builder-0.8.0 lib/json/schema_builder/validation.rb
json-schema_builder-0.7.1 lib/json/schema_builder/validation.rb
json-schema_builder-0.7.0 lib/json/schema_builder/validation.rb
json-schema_builder-0.6.1 lib/json/schema_builder/validation.rb
json-schema_builder-0.6.0 lib/json/schema_builder/validation.rb
json-schema_builder-0.5.0 lib/json/schema_builder/validation.rb