lib/json-schema/validator.rb in json-schema-1.0.5 vs lib/json-schema/validator.rb in json-schema-1.0.6
- old
+ new
@@ -294,18 +294,33 @@
rescue JSON::Schema::ValidationError, JSON::Schema::SchemaError
return false
end
end
+ def validate_json(schema, data, opts={})
+ validate(schema, data, opts.merge(:json => true))
+ end
+
+ def validate_uri(schema, data, opts={})
+ validate(schema, data, opts.merge(:uri => true))
+ end
+
def validate!(schema, data,opts={})
validator = JSON::Validator.new(schema, data, opts)
validator.validate
return true
end
alias_method 'validate2', 'validate!'
+ def validate_json!(schema, data, opts={})
+ validate!(schema, data, opts.merge(:json => true))
+ end
+ def validate_uri!(schema, data, opts={})
+ validate!(schema, data, opts.merge(:uri => true))
+ end
+
def fully_validate(schema, data, opts={})
opts[:record_errors] = true
validator = JSON::Validator.new(schema, data, opts)
validator.validate
end
@@ -314,11 +329,18 @@
data = schema
schema = metaschema_for(version_string_for(opts[:version]))
fully_validate(schema, data, opts)
end
+ def fully_validate_json(schema, data, opts={})
+ fully_validate(schema, data, opts.merge(:json => true))
+ end
+ def fully_validate_uri(schema, data, opts={})
+ fully_validate(schema, data, opts.merge(:uri => true))
+ end
+
def clear_cache
@@schemas = {} if @@cache_schemas == false
end
def clear_errors
@@ -361,20 +383,20 @@
@@default_validator = v
end
def json_backend
if defined?(MultiJson)
- MultiJson.engine
+ MultiJson.respond_to?(:adapter) ? MultiJson.adapter : MultiJson.engine
else
@@json_backend
end
end
def json_backend=(backend)
if defined?(MultiJson)
backend = backend == 'json' ? 'json_gem' : backend
- MultiJson.engine = backend
+ MultiJson.respond_to?(:use) ? MultiJson.use(backend) : MultiJson.engine = backend
else
backend = backend.to_s
if @@available_json_backends.include?(backend)
@@json_backend = backend
else
@@ -383,11 +405,11 @@
end
end
def parse(s)
if defined?(MultiJson)
- MultiJson.decode(s)
+ MultiJson.respond_to?(:load) ? MultiJson.load(s) : MultiJson.decode(s)
else
case @@json_backend.to_s
when 'json'
JSON.parse(s)
when 'yajl'
@@ -449,11 +471,11 @@
@@fake_uri_generator = lambda{|s| JSON::Util::UUID.create_v5(s,JSON::Util::UUID::Nil).to_s }
end
def serialize schema
if defined?(MultiJson)
- MultiJson.encode(schema)
+ MultiJson.respond_to?(:dump) ? MultiJson.dump(schema) : MultiJson.encode(schema)
else
@@serializer.call(schema)
end
end
@@ -508,23 +530,38 @@
schema
end
def initialize_data(data)
- # Parse the data, if any
- if data.is_a?(String)
+ if @options[:json]
+ data = JSON::Validator.parse(data)
+ elsif @options[:uri]
+ json_uri = URI.parse(data)
+ if json_uri.relative?
+ if data[0,1] == '/'
+ json_uri = URI.parse("file://#{data}")
+ else
+ json_uri = URI.parse("file://#{Dir.pwd}/#{data}")
+ end
+ end
+ data = JSON::Validator.parse(open(json_uri.to_s).read)
+ elsif data.is_a?(String)
begin
data = JSON::Validator.parse(data)
rescue
- json_uri = URI.parse(data)
- if json_uri.relative?
- if data[0,1] == '/'
- schema_uri = URI.parse("file://#{data}")
- else
- schema_uri = URI.parse("file://#{Dir.pwd}/#{data}")
+ begin
+ json_uri = URI.parse(data)
+ if json_uri.relative?
+ if data[0,1] == '/'
+ json_uri = URI.parse("file://#{data}")
+ else
+ json_uri = URI.parse("file://#{Dir.pwd}/#{data}")
+ end
end
+ data = JSON::Validator.parse(open(json_uri.to_s).read)
+ rescue
+ # Silently discard the error - the data will not change
end
- data = JSON::Validator.parse(open(json_uri.to_s).read)
end
end
data
end