class JSchema::Schema

Constants

VERSION_ID

Attributes

parent[R]
uri[R]

Public Class Methods

build(sch = {}, parent = nil, id = nil) click to toggle source
# File lib/jschema/schema.rb, line 6
def build(sch = {}, parent = nil, id = nil)
  schema = sch || {}

  check_schema_version schema

  if (json_reference = schema['$ref'])
    unescaped_ref = json_reference.gsub(/~1|~0/, '~1' => '/', '~0' => '~')
    SchemaRef.new(URI(unescaped_ref), parent)
  else
    uri = SchemaURI.build(schema['id'], parent, id)
    parent && JSONReference.dereference(uri, parent) || begin
      jschema = new(schema, uri, parent)
      register_definitions schema, jschema
      JSONReference.register_schema jschema
    end
  end
end
new(schema, uri, parent) click to toggle source
# File lib/jschema/schema.rb, line 45
def initialize(schema, uri, parent)
  @uri = uri
  @parent = parent
  @schema = schema
  @validators = Validator.build(schema, self)
end

Private Class Methods

check_schema_version(schema) click to toggle source
# File lib/jschema/schema.rb, line 26
def check_schema_version(schema)
  version = schema['$schema']
  if version && version != VERSION_ID
    fail InvalidSchema, 'Specified schema version is not supported'
  end
end
register_definitions(schema, parent) click to toggle source
# File lib/jschema/schema.rb, line 33
def register_definitions(schema, parent)
  if (definitions = schema['definitions'])
    definitions.each do |definition, sch|
      schema_def = build(sch, parent, "definitions/#{definition}")
      JSONReference.register_schema schema_def
    end
  end
end

Public Instance Methods

fragment(path) click to toggle source
# File lib/jschema/schema.rb, line 62
def fragment(path)
  JSchema::JSONReference.dereference(URI.parse(path), self)
end
to_s() click to toggle source
# File lib/jschema/schema.rb, line 66
def to_s
  uri.to_s
end
valid?(instance) click to toggle source
# File lib/jschema/schema.rb, line 52
def valid?(instance)
  validate(instance).empty?
end
validate(instance) click to toggle source
# File lib/jschema/schema.rb, line 56
def validate(instance)
  @validators.map do |validator|
    validator.validate(instance)
  end.compact
end