lib/json-schema/validator.rb in json-schema-0.1.7 vs lib/json-schema/validator.rb in json-schema-0.1.8
- old
+ new
@@ -18,10 +18,13 @@
class Validator
@@schemas = {}
@@cache_schemas = false
+ @@default_opts = {
+ :list => false
+ }
ValidationMethods = [
"type",
"disallow",
"minimum",
@@ -43,11 +46,12 @@
"extends",
"$ref"
]
- def initialize(schema_data, data)
+ def initialize(schema_data, data, opts={})
+ @options = @@default_opts.clone.merge(opts)
@base_schema = initialize_schema(schema_data)
@data = initialize_data(data)
build_schemas(@base_schema)
end
@@ -577,17 +581,17 @@
end
end
class << self
- def validate(schema, data)
- validator = JSON::Validator.new(schema, data)
+ def validate(schema, data,opts={})
+ validator = JSON::Validator.new(schema, data, opts)
validator.validate
end
- def validate2(schema, data)
- validator = JSON::Validator.new(schema, data)
+ def validate2(schema, data,opts={})
+ validator = JSON::Validator.new(schema, data, opts)
validator.validate2
end
def clear_cache
@@schemas = {} if @@cache_schemas == false
@@ -613,12 +617,13 @@
def initialize_schema(schema)
if schema.is_a?(String)
begin
# Build a fake URI for this
- schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}.json")
+ schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}")
schema = JSON::Schema.new(JSON.parse(schema),schema_uri)
+ Validator.add_schema(schema)
rescue
# Build a uri for it
schema_uri = URI.parse(schema)
if schema_uri.relative?
# Check for absolute path
@@ -635,14 +640,21 @@
schema = Validator.schemas[schema_uri.to_s]
end
end
elsif schema.is_a?(Hash)
schema = schema.to_json
- schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}.json")
+ schema_uri = URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(schema)}")
schema = JSON::Schema.new(JSON.parse(schema),schema_uri)
+ Validator.add_schema(schema)
else
raise "Invalid schema - must be either a string or a hash"
end
+
+ if @options[:list]
+ inter_json = {:type => "array", :items => schema.schema}.to_json
+ wrapper_schema = JSON::Schema.new(JSON.parse(inter_json),URI.parse("file://#{Dir.pwd}/#{Digest::SHA1.hexdigest(inter_json)}"))
+ schema = wrapper_schema
+ end
schema
end
\ No newline at end of file