Class: JSON::Schema::AdditionalPropertiesAttribute
- Defined in:
- lib/json-schema/attributes/additionalproperties.rb
Constant Summary
Constants inherited from Attribute
JSON::Schema::Attribute::TYPE_CLASS_MAPPINGS
Class Method Summary collapse
- .remove_valid_properties(extra_properties, current_schema, validator) ⇒ Object
- .validate(current_schema, data, fragments, processor, validator, options = {}) ⇒ Object
Methods inherited from Attribute
build_fragment, data_valid_for_type?, validation_error, validation_errors
Class Method Details
.remove_valid_properties(extra_properties, current_schema, validator) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/json-schema/attributes/additionalproperties.rb', line 35 def self.remove_valid_properties(extra_properties, current_schema, validator) if current_schema.schema['properties'] extra_properties = extra_properties - current_schema.schema['properties'].keys end if current_schema.schema['patternProperties'] current_schema.schema['patternProperties'].each_key do |key| r = Regexp.new(key) extras_clone = extra_properties.clone extras_clone.each do |prop| if r.match(prop) extra_properties = extra_properties - [prop] end end end end if schemas= current_schema.schema['extends'] schemas = [schemas] if !schemas.is_a?(Array) schemas.each do |schema_value| temp_uri,extended_schema= JSON::Schema::ExtendsAttribute.get_extended_uri_and_schema(schema_value, current_schema, validator) if extended_schema extra_properties= remove_valid_properties(extra_properties, extended_schema, validator) end end end extra_properties end |
.validate(current_schema, data, fragments, processor, validator, options = {}) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/json-schema/attributes/additionalproperties.rb', line 7 def self.validate(current_schema, data, fragments, processor, validator, = {}) if data.is_a?(Hash) && ( current_schema.schema['type'].nil? || ( current_schema.schema['type'].is_a?(String) && current_schema.schema['type'].downcase == 'object' ) ) extra_properties = data.keys extra_properties = remove_valid_properties(extra_properties, current_schema, validator) addprop = current_schema.schema['additionalProperties'] if addprop.is_a?(Hash) matching_properties = extra_properties # & addprop.keys matching_properties.each do |key| schema = JSON::Schema.new(addprop[key] || addprop, current_schema.uri, validator) fragments << key schema.validate(data[key],fragments,processor,) fragments.pop end extra_properties -= matching_properties end if !extra_properties.empty? and (addprop == false or (addprop.is_a?(Hash) and !addprop.empty?)) = "The property '#{build_fragment(fragments)}' contains additional properties #{extra_properties.inspect} outside of the schema when none are allowed" validation_error(processor, , fragments, current_schema, self, [:record_errors]) end end end |