def initialize(schema_data, data, opts={})
@options = @@default_opts.clone.merge(opts)
@errors = []
validator = JSON::Validator.validator_for_name(@options[:version])
@options[:version] = validator
@options[:schema_reader] ||= JSON::Validator.schema_reader
@validation_options = @options[:record_errors] ? {:record_errors => true} : {}
@validation_options[:insert_defaults] = true if @options[:insert_defaults]
@validation_options[:strict] = true if @options[:strict] == true
@validation_options[:clear_cache] = false if @options[:clear_cache] == false
@@mutex.synchronize { @base_schema = initialize_schema(schema_data) }
@original_data = data
@data = initialize_data(data)
@@mutex.synchronize { build_schemas(@base_schema) }
if @options[:validate_schema]
if @base_schema.schema["$schema"]
base_validator = JSON::Validator.validator_for_name(@base_schema.schema["$schema"])
end
metaschema = base_validator ? base_validator.metaschema : validator.metaschema
meta_validator = JSON::Validator.new(metaschema, @base_schema.schema, {:clear_cache => false})
meta_validator.validate
end
if opts[:fragment]
@base_schema = schema_from_fragment(@base_schema, opts[:fragment])
end
end