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