class JsonValidation::Validators::AdditionalProperties

Public Instance Methods

find_additional_properties(fragment, record) click to toggle source
# File lib/json_validation/validators/additional_properties.rb, line 25
def find_additional_properties(fragment, record)
  record.reject {|k, v|
    fragment.fetch('properties', {}).keys.include?(k)
  }.reject {|k, v|
    fragment.fetch('patternProperties', {}).keys.any? {|pattern|
      rx = Regexp.new(pattern)
      rx.match(k)
    }
  }
end
inner_validator() click to toggle source
# File lib/json_validation/validators/additional_properties.rb, line 21
def inner_validator
  @inner_validator ||= build_validator(fragment["additionalProperties"])
end
validate(record) click to toggle source
# File lib/json_validation/validators/additional_properties.rb, line 6
def validate(record)
  case fragment['additionalProperties']
  when true
    true
  when false
    find_additional_properties(fragment, record).empty?
  when Hash
    find_additional_properties(fragment, record).values.all? {|value|
      inner_validator.validate(value)
    }
  else
    raise "Unexpected type for fragment['additionalProperties']"
  end
end