module JSON::SchemaBuilder::Validation
Public Instance Methods
fully_validate(data, opts = { })
click to toggle source
# File lib/json/schema_builder/validation.rb, line 14 def fully_validate(data, opts = { }) _validate :fully_validate, data, opts end
validate(data, opts = { })
click to toggle source
# File lib/json/schema_builder/validation.rb, line 6 def validate(data, opts = { }) _validate :validate, data, opts end
validate!(data, opts = { })
click to toggle source
# File lib/json/schema_builder/validation.rb, line 10 def validate!(data, opts = { }) _validate :validate!, data, opts end
Protected Instance Methods
_customize_errors(error_objects)
click to toggle source
# File lib/json/schema_builder/validation.rb, line 28 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
_entities_handling(error)
click to toggle source
# File lib/json/schema_builder/validation.rb, line 51 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
_flatten_errors(error_objects)
click to toggle source
# File lib/json/schema_builder/validation.rb, line 43 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
_validate(validator, data, opts)
click to toggle source
# File lib/json/schema_builder/validation.rb, line 20 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