Class: JSON::Schema::ExtendsAttribute

Inherits:
Attribute
  • Object
show all
Defined in:
lib/json-schema/attributes/extends.rb

Constant Summary

Constants inherited from Attribute

Attribute::TYPE_CLASS_MAPPINGS

Class Method Summary collapse

Methods inherited from Attribute

build_fragment, data_valid_for_type?, validation_error, validation_errors

Class Method Details

.get_extended_uri_and_schema(s, current_schema, validator) ⇒ Object


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/json-schema/attributes/extends.rb', line 24

def self.get_extended_uri_and_schema(s, current_schema, validator)
  uri,schema = nil,nil

  s = {'$ref' => s} if s.is_a?(String)

  if s.is_a?(Hash)
    uri = current_schema.uri
    if s['$ref']
      ref_uri,ref_schema = JSON::Schema::RefAttribute.get_referenced_uri_and_schema(s, current_schema, validator)
      if ref_schema
        if s.size == 1 # Check if anything else apart from $ref
          uri,schema = ref_uri,ref_schema
        else
          s = s.dup
          s.delete '$ref'
          s = ref_schema.schema.merge(s)
        end
      end
    end
    schema ||= JSON::Schema.new(s,uri,validator)
  end

  [uri,schema]
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
# File 'lib/json-schema/attributes/extends.rb', line 7

def self.validate(current_schema, data, fragments, processor, validator, options = {})
  schemas = current_schema.schema['extends']
  schemas = [schemas] if !schemas.is_a?(Array)
  schemas.each do |s|
    uri,schema = get_extended_uri_and_schema(s, current_schema, validator)
    if schema
      schema.validate(data, fragments, processor, options)
    elsif uri
      message = "The extended schema '#{uri.to_s}' cannot be found"
      validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
    else
      message = "The property '#{build_fragment(fragments)}' was not a valid schema"
      validation_error(processor, message, fragments, current_schema, self, options[:record_errors])
    end
  end
end