json-schema 2.1.4 → 2.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +1 -1
- data/lib/json-schema.rb +2 -1
- data/lib/json-schema/attributes/enum.rb +1 -1
- data/lib/json-schema/attributes/not.rb +9 -3
- data/lib/json-schema/util/hash.rb +8 -0
- data/lib/json-schema/validator.rb +13 -1
- data/test/schemas/all_of_ref_base_schema.json +6 -4
- data/test/test_jsonschema_draft4.rb +18 -0
- metadata +8 -5
- checksums.yaml +0 -15
data/README.textile
CHANGED
data/lib/json-schema.rb
CHANGED
@@ -8,7 +8,7 @@ if begin
|
|
8
8
|
Gem.available?('multi_json')
|
9
9
|
end
|
10
10
|
require 'multi_json'
|
11
|
-
|
11
|
+
|
12
12
|
# Force MultiJson to load an engine before we define the JSON constant here; otherwise,
|
13
13
|
# it looks for things that are under the JSON namespace that aren't there (since we have defined it here)
|
14
14
|
MultiJson.respond_to?(:adapter) ? MultiJson.adapter : MultiJson.engine
|
@@ -17,6 +17,7 @@ end
|
|
17
17
|
$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/json-schema"
|
18
18
|
|
19
19
|
require 'rubygems'
|
20
|
+
require 'util/hash'
|
20
21
|
require 'schema'
|
21
22
|
require 'validator'
|
22
23
|
Dir[File.join(File.dirname(__FILE__), "json-schema/attributes/*.rb")].each {|file| require file }
|
@@ -4,7 +4,7 @@ module JSON
|
|
4
4
|
def self.validate(current_schema, data, fragments, processor, validator, options = {})
|
5
5
|
if !current_schema.schema['enum'].include?(data)
|
6
6
|
message = "The property '#{build_fragment(fragments)}' value #{data.inspect} did not match one of the following values:"
|
7
|
-
current_schema.schema['enum'].
|
7
|
+
current_schema.schema['enum'].each_key {|val|
|
8
8
|
if val.is_a?(NilClass)
|
9
9
|
message += " null,"
|
10
10
|
elsif val.is_a?(Array)
|
@@ -5,12 +5,18 @@ module JSON
|
|
5
5
|
|
6
6
|
schema = JSON::Schema.new(current_schema.schema['not'],current_schema.uri,validator)
|
7
7
|
failed = true
|
8
|
+
errors_copy = processor.validation_errors.clone
|
8
9
|
begin
|
9
10
|
schema.validate(data,fragments,processor,options)
|
10
|
-
|
11
|
-
|
11
|
+
# If we're recording errors, we don't throw an exception. Instead, check the errors array length
|
12
|
+
if options[:record_errors] && errors_copy.length != processor.validation_errors.length
|
13
|
+
processor.validation_errors.replace(errors_copy)
|
14
|
+
else
|
15
|
+
message = "The property '#{build_fragment(fragments)}' of type #{data.class} matched the disallowed schema"
|
16
|
+
failed = false
|
17
|
+
end
|
12
18
|
rescue
|
13
|
-
# Yay, we failed validation
|
19
|
+
# Yay, we failed validation.
|
14
20
|
end
|
15
21
|
|
16
22
|
unless failed
|
@@ -5,6 +5,7 @@ require 'bigdecimal'
|
|
5
5
|
require 'digest/sha1'
|
6
6
|
require 'date'
|
7
7
|
require 'thread'
|
8
|
+
require 'yaml'
|
8
9
|
|
9
10
|
module JSON
|
10
11
|
|
@@ -336,6 +337,15 @@ module JSON
|
|
336
337
|
end
|
337
338
|
end
|
338
339
|
|
340
|
+
# Convert enum to a hash
|
341
|
+
if parent_schema.schema["enum"] && parent_schema.schema["enum"].is_a?(Array)
|
342
|
+
enum_hash = {}
|
343
|
+
parent_schema.schema["enum"].each do |item|
|
344
|
+
enum_hash[item] = true
|
345
|
+
end
|
346
|
+
parent_schema.schema["enum"] = enum_hash
|
347
|
+
end
|
348
|
+
|
339
349
|
# Each of these might be schemas
|
340
350
|
["additionalProperties", "additionalItems", "dependencies", "extends"].each do |key|
|
341
351
|
if parent_schema.schema[key].is_a?(Hash)
|
@@ -527,7 +537,9 @@ module JSON
|
|
527
537
|
if @@json_backend == 'yajl'
|
528
538
|
@@serializer = lambda{|o| Yajl::Encoder.encode(o) }
|
529
539
|
else
|
530
|
-
@@serializer = lambda{|o|
|
540
|
+
@@serializer = lambda{|o|
|
541
|
+
YAML.dump(o)
|
542
|
+
}
|
531
543
|
end
|
532
544
|
end
|
533
545
|
end
|
@@ -1203,6 +1203,24 @@ class JSONSchemaDraft4Test < Test::Unit::TestCase
|
|
1203
1203
|
assert(JSON::Validator.validate(schema,data))
|
1204
1204
|
end
|
1205
1205
|
|
1206
|
+
def test_not_fully_validate
|
1207
|
+
# Start with a simple not
|
1208
|
+
schema = {
|
1209
|
+
"$schema" => "http://json-schema.org/draft-04/schema#",
|
1210
|
+
"properties" => {
|
1211
|
+
"a" => {"not" => { "type" => ["string", "boolean"]}}
|
1212
|
+
}
|
1213
|
+
}
|
1214
|
+
|
1215
|
+
data = {"a" => 1}
|
1216
|
+
errors = JSON::Validator.fully_validate(schema,data)
|
1217
|
+
puts errors
|
1218
|
+
assert_equal(0, errors.length)
|
1219
|
+
|
1220
|
+
data = {"a" => "taco"}
|
1221
|
+
errors = JSON::Validator.fully_validate(schema,data)
|
1222
|
+
assert_equal(1, errors.length)
|
1223
|
+
end
|
1206
1224
|
|
1207
1225
|
def test_definitions
|
1208
1226
|
schema = {
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.5
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Kenny Hoxworth
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2014-01-01 00:00:00.000000000 Z
|
12
13
|
dependencies: []
|
13
14
|
description:
|
14
15
|
email: hoxworth@gmail.com
|
@@ -57,6 +58,7 @@ files:
|
|
57
58
|
- lib/json-schema/schema.rb
|
58
59
|
- lib/json-schema/uri/file.rb
|
59
60
|
- lib/json-schema/uri/uuid.rb
|
61
|
+
- lib/json-schema/util/hash.rb
|
60
62
|
- lib/json-schema/validator.rb
|
61
63
|
- lib/json-schema/validators/draft1.rb
|
62
64
|
- lib/json-schema/validators/draft2.rb
|
@@ -110,26 +112,27 @@ files:
|
|
110
112
|
homepage: http://github.com/hoxworth/json-schema/tree/master
|
111
113
|
licenses:
|
112
114
|
- MIT
|
113
|
-
metadata: {}
|
114
115
|
post_install_message:
|
115
116
|
rdoc_options: []
|
116
117
|
require_paths:
|
117
118
|
- lib
|
118
119
|
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
119
121
|
requirements:
|
120
122
|
- - ! '>='
|
121
123
|
- !ruby/object:Gem::Version
|
122
124
|
version: '0'
|
123
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
124
127
|
requirements:
|
125
128
|
- - ! '>='
|
126
129
|
- !ruby/object:Gem::Version
|
127
130
|
version: '0'
|
128
131
|
requirements: []
|
129
132
|
rubyforge_project:
|
130
|
-
rubygems_version:
|
133
|
+
rubygems_version: 1.8.23
|
131
134
|
signing_key:
|
132
|
-
specification_version:
|
135
|
+
specification_version: 3
|
133
136
|
summary: Ruby JSON Schema Validator
|
134
137
|
test_files:
|
135
138
|
- test/test_all_of_ref_schema.rb
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
NWQ0NmRiOWRjODkxOWJiYTU4MmVhMTI4NmI1MDQyZDkzMzU2ZWQ1Zg==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MDcwZGNmZjk4YmY1ZjVjZjIwNGFlNGQ4MjNmYTllOGY5MzRjZWE0YQ==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
YzFkOGY5ZWZlOGIxOTVkYzUyOTU3MDRiYTljN2IwN2UyOGI4MTY2YmVkM2Iy
|
10
|
-
ZmU3MzZkODI2ZDlkYmQ4YTZjOWE2MTYwZTc2Mjc1MjhkN2QxZDA5ZTliNmMz
|
11
|
-
YTc1YzMzYzEzNzMxNDQ1ZTU2YWU2NDEyZGRkMThjMTMyMjI1Mzc=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
YWIzMjE4ZGZkYTA3NjIzODg2OGNmMWZmNDJkM2VjNzhhYzZlZDZjMTU1Yzgw
|
14
|
-
NzA0NzlkYjFhNjJjZDZjMmQ5OTBiYjUzMWVmOTQyM2U3YzIzMzQyOTIyNDUz
|
15
|
-
OTM1MzhiNTkxODlmMmVlMjEzYWQ4MWIzYWRhZjM5OTQxMTEwOWQ=
|