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