Sha256: 7cba64498d8044e01a753f5223929adeac839325e7ce048c509ed05d40f9789a
Contents?: true
Size: 1.9 KB
Versions: 2
Compression:
Stored size: 1.9 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 = _entities_handling(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 def _entities_handling(error) entities = Array(fragments[error[:fragment]]).select(&:error) if error[:failed_attribute] == "Required" property = error[:message].match(/required property of '([^']+?)'/)[1] property_fragment = "#{error[:fragment]}/#{property}".gsub(%r(//), "/") entities |= Array(fragments[property_fragment]).select(&:error) end entities end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
json-schema_builder-0.8.2 | lib/json/schema_builder/validation.rb |
json-schema_builder-0.8.1 | lib/json/schema_builder/validation.rb |