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