lib/json-schema/validator.rb in json-schema-1.1.1 vs lib/json-schema/validator.rb in json-schema-1.2.0
- old
+ new
@@ -18,21 +18,21 @@
@sub_errors = []
@failed_attribute = failed_attribute
message = "#{message} in schema #{schema.uri}"
super(message)
end
-
+
def to_string
if @sub_errors.empty?
message
else
full_message = message + "\n The schema specific errors were:\n"
@sub_errors.each{|e| full_message = full_message + " - " + e.to_string + "\n"}
full_message
end
end
-
+
def to_hash
base = {:schema => @schema.uri, :fragment => ::JSON::Schema::Attribute.build_fragment(fragments), :message => message, :failed_attribute => @failed_attribute.to_s.split(":").last.split("Attribute").first}
if !@sub_errors.empty?
base[:errors] = @sub_errors.map{|e| e.to_hash}
end
@@ -60,11 +60,11 @@
processor.validation_error(error)
else
raise error
end
end
-
+
def self.validation_errors(validator)
validator.validation_errors
end
end
@@ -109,19 +109,20 @@
:list => false,
:version => nil,
:validate_schema => false,
:record_errors => false,
:errors_as_objects => false,
- :insert_defaults => false
+ :insert_defaults => false,
+ :strict => false
}
@@validators = {}
@@default_validator = nil
@@available_json_backends = []
@@json_backend = nil
@@serializer = nil
@@mutex = Mutex.new
-
+
def self.version_string_for(version)
# I'm not a fan of this, but it's quick and dirty to get it working for now
return "draft-03" unless version
case version.to_s
when "draft3"
@@ -152,21 +153,22 @@
@options[:version] = validator
end
@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
+
# validate the schema, if requested
if @options[:validate_schema]
begin
meta_validator = JSON::Validator.new(self.class.metaschema_for(version_string), schema_data)
meta_validator.validate
rescue JSON::Schema::ValidationError, JSON::Schema::SchemaError
raise $!
end
end
-
+
@@mutex.synchronize { @base_schema = initialize_schema(schema_data) }
@data = initialize_data(data)
@@mutex.synchronize { build_schemas(@base_schema) }
end
@@ -293,11 +295,11 @@
end
def validation_error(error)
@errors.push(error)
end
-
+
def validation_errors
@errors
end
@@ -392,11 +394,11 @@
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.respond_to?(:use) ? MultiJson.use(backend) : MultiJson.engine = backend
else
@@ -423,11 +425,11 @@
else
raise JSON::Schema::JsonParseError.new("No supported JSON parsers found. The following parsers are suported:\n * yajl-ruby\n * json")
end
end
end
-
+
if !defined?(MultiJson)
if begin
Gem::Specification::find_by_name('json')
rescue Gem::LoadError
false
@@ -436,11 +438,11 @@
end
require 'json'
@@available_json_backends << 'json'
@@json_backend = 'json'
end
-
+
# Try force-loading json for rubies > 1.9.2
begin
require 'json'
@@available_json_backends << 'json'
@@json_backend = 'json'
@@ -456,14 +458,14 @@
end
require 'yajl'
@@available_json_backends << 'yajl'
@@json_backend = 'yajl'
end
-
+
if @@json_backend == 'yajl'
@@serializer = lambda{|o| Yajl::Encoder.encode(o) }
else
- @@serializer = lambda{|o| Marshal.dump(o) }
+ @@serializer = lambda{|o| Marshal.dump(o) }
end
end
end
private