Class: JsonSchemaRails::SchemaValidator

Inherits:
Object
  • Object
show all
Defined in:
lib/json_schema_rails/schema_validator.rb

Defined Under Namespace

Classes: Loader, MetaSchemas

Constant Summary collapse

DEFAULT_SCHEMA_URI =
'http://json-schema.org/draft-04/schema'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeSchemaValidator

Returns a new instance of SchemaValidator.



7
8
9
10
# File 'lib/json_schema_rails/schema_validator.rb', line 7

def initialize
  @meta_schemas = MetaSchemas.new
  @loader = Loader.new
end

Instance Attribute Details

#meta_schemasObject (readonly)

Returns the value of attribute meta_schemas.



5
6
7
# File 'lib/json_schema_rails/schema_validator.rb', line 5

def meta_schemas
  @meta_schemas
end

Instance Method Details

#use_core_schemas!(options = {}) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/json_schema_rails/schema_validator.rb', line 12

def use_core_schemas!(options = {})
  schemas_dir = File.expand_path('../../../schemas', __FILE__)
  if options[:loose]
    add_meta_schema_file Dir[File.join(schemas_dir, '*.json')].sort
  else
    add_meta_schema_file Dir[File.join(schemas_dir, 'strict', '*.json')].sort
  end
end

#validate(schema_file) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/json_schema_rails/schema_validator.rb', line 21

def validate(schema_file)
  content = @loader.render_schema_content(schema_file)

  meta_schema_uri = content["$schema"] || content[:"$schema"] || DEFAULT_SCHEMA_URI
  unless meta_schema_uri
    raise JsonSchemaRails::SchemaNotFound, "No $schema specified"
  end

  meta_schema = @meta_schemas.lookup!(meta_schema_uri)
  valid, errors = meta_schema.validate(content)
  raise ValidationError.from_errors(errors, meta_schema) unless valid
  true
end