json-schema 2.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.textile +2 -6
- data/resources/draft-04.json +111 -135
- data/test/test_schema_validation.rb +43 -7
- metadata +2 -2
data/README.textile
CHANGED
@@ -4,7 +4,7 @@ This library is intended to provide Ruby with an interface for validating JSON o
|
|
4
4
|
|
5
5
|
h2. Version 2.0.0 Upgrade Notes
|
6
6
|
|
7
|
-
Please be aware that the upgrade to version 2.0.0 will use Draft-04 *by default*, so schemas that do not declare a validator using the
|
7
|
+
Please be aware that the upgrade to version 2.0.0 will use Draft-04 *by default*, so schemas that do not declare a validator using the <code>$schema</code> keyword will use Draft-04 now instead of Draft-03. This is the reason for the major version upgrade.
|
8
8
|
|
9
9
|
h2. Dependencies
|
10
10
|
|
@@ -22,7 +22,7 @@ From the git repo:
|
|
22
22
|
|
23
23
|
<pre>
|
24
24
|
$ gem build json-schema.gemspec
|
25
|
-
$ gem install json-schema-2.0.
|
25
|
+
$ gem install json-schema-2.0.1.gem
|
26
26
|
</pre>
|
27
27
|
|
28
28
|
|
@@ -292,10 +292,6 @@ Optionally, the JSON Schema library supports using the MultiJSON library for sel
|
|
292
292
|
|
293
293
|
h2. Notes
|
294
294
|
|
295
|
-
The following core schema attributes are not implemented:
|
296
|
-
|
297
|
-
* default - This library aims to solely be a validator and does not modify an object it is validating.
|
298
|
-
|
299
295
|
The 'format' attribute is only validated for the following values:
|
300
296
|
|
301
297
|
* date-time
|
data/resources/draft-04.json
CHANGED
@@ -1,174 +1,150 @@
|
|
1
1
|
{
|
2
|
-
"
|
3
|
-
"
|
4
|
-
"
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
"
|
9
|
-
"items": {
|
10
|
-
"type": [ "string", { "$ref": "#" } ]
|
11
|
-
},
|
12
|
-
"uniqueItems": true,
|
13
|
-
"default": "any"
|
14
|
-
},
|
15
|
-
|
16
|
-
"properties": {
|
17
|
-
"type": "object",
|
18
|
-
"additionalProperties": { "$ref": "#" },
|
19
|
-
"default": {}
|
2
|
+
"id": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
4
|
+
"description": "Core schema meta-schema",
|
5
|
+
"definitions": {
|
6
|
+
"schemaArray": {
|
7
|
+
"type": "array",
|
8
|
+
"minItems": 1,
|
9
|
+
"items": { "$ref": "#" }
|
20
10
|
},
|
21
|
-
|
22
|
-
|
23
|
-
"
|
24
|
-
"additionalProperties": { "$ref": "#" },
|
25
|
-
"default": {}
|
11
|
+
"positiveInteger": {
|
12
|
+
"type": "integer",
|
13
|
+
"minimum": 0
|
26
14
|
},
|
27
|
-
|
28
|
-
|
29
|
-
"type": [ { "$ref": "#" }, "boolean" ],
|
30
|
-
"default": {}
|
15
|
+
"positiveIntegerDefault0": {
|
16
|
+
"allOf": [ { "$ref": "#/definitions/positiveInteger" }, { "default": 0 } ]
|
31
17
|
},
|
32
|
-
|
33
|
-
|
34
|
-
"type": [ { "$ref": "#" }, "array" ],
|
35
|
-
"items": { "$ref": "#" },
|
36
|
-
"default": {}
|
18
|
+
"simpleTypes": {
|
19
|
+
"enum": [ "array", "boolean", "integer", "null", "number", "object", "string" ]
|
37
20
|
},
|
38
|
-
|
39
|
-
|
40
|
-
"
|
41
|
-
"
|
21
|
+
"stringArray": {
|
22
|
+
"type": "array",
|
23
|
+
"items": { "type": "string" },
|
24
|
+
"minItems": 1,
|
25
|
+
"uniqueItems": true
|
26
|
+
}
|
27
|
+
},
|
28
|
+
"type": "object",
|
29
|
+
"properties": {
|
30
|
+
"id": {
|
31
|
+
"type": "string",
|
32
|
+
"format": "uri"
|
42
33
|
},
|
43
|
-
|
44
|
-
|
45
|
-
"
|
46
|
-
"default": false
|
34
|
+
"$schema": {
|
35
|
+
"type": "string",
|
36
|
+
"format": "uri"
|
47
37
|
},
|
48
|
-
|
49
|
-
|
50
|
-
"type": "object",
|
51
|
-
"additionalProperties": {
|
52
|
-
"type": [ "string", "array", { "$ref": "#" } ],
|
53
|
-
"items": {
|
54
|
-
"type": "string"
|
55
|
-
}
|
56
|
-
},
|
57
|
-
"default": {}
|
38
|
+
"title": {
|
39
|
+
"type": "string"
|
58
40
|
},
|
59
|
-
|
60
|
-
|
61
|
-
|
41
|
+
"description": {
|
42
|
+
"type": "string"
|
43
|
+
},
|
44
|
+
"default": {},
|
45
|
+
"multipleOf": {
|
46
|
+
"type": "number",
|
47
|
+
"minimum": 0,
|
48
|
+
"exclusiveMinimum": true
|
62
49
|
},
|
63
|
-
|
64
50
|
"maximum": {
|
65
51
|
"type": "number"
|
66
52
|
},
|
67
|
-
|
68
|
-
"exclusiveMinimum": {
|
69
|
-
"type": "boolean",
|
70
|
-
"default": false
|
71
|
-
},
|
72
|
-
|
73
53
|
"exclusiveMaximum": {
|
74
54
|
"type": "boolean",
|
75
55
|
"default": false
|
76
56
|
},
|
77
|
-
|
78
|
-
|
79
|
-
"type": "integer",
|
80
|
-
"minimum": 0,
|
81
|
-
"default": 0
|
82
|
-
},
|
83
|
-
|
84
|
-
"maxItems": {
|
85
|
-
"type": "integer",
|
86
|
-
"minimum": 0
|
57
|
+
"minimum": {
|
58
|
+
"type": "number"
|
87
59
|
},
|
88
|
-
|
89
|
-
"uniqueItems": {
|
60
|
+
"exclusiveMinimum": {
|
90
61
|
"type": "boolean",
|
91
62
|
"default": false
|
92
63
|
},
|
93
|
-
|
64
|
+
"maxLength": { "$ref": "#/definitions/positiveInteger" },
|
65
|
+
"minLength": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
94
66
|
"pattern": {
|
95
67
|
"type": "string",
|
96
68
|
"format": "regex"
|
97
69
|
},
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
"maxLength": {
|
106
|
-
"type": "integer"
|
107
|
-
},
|
108
|
-
|
109
|
-
"enum": {
|
110
|
-
"type": "array",
|
111
|
-
"minItems": 1,
|
112
|
-
"uniqueItems": true
|
70
|
+
"additionalItems": {
|
71
|
+
"anyOf": [
|
72
|
+
{ "type": "boolean" },
|
73
|
+
{ "$ref": "#" }
|
74
|
+
],
|
75
|
+
"default": {}
|
113
76
|
},
|
114
|
-
|
115
|
-
|
116
|
-
|
77
|
+
"items": {
|
78
|
+
"anyOf": [
|
79
|
+
{ "$ref": "#" },
|
80
|
+
{ "$ref": "#/definitions/schemaArray" }
|
81
|
+
],
|
82
|
+
"default": {}
|
117
83
|
},
|
118
|
-
|
119
|
-
"
|
120
|
-
|
84
|
+
"maxItems": { "$ref": "#/definitions/positiveInteger" },
|
85
|
+
"minItems": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
86
|
+
"uniqueItems": {
|
87
|
+
"type": "boolean",
|
88
|
+
"default": false
|
121
89
|
},
|
122
|
-
|
123
|
-
"
|
124
|
-
|
90
|
+
"maxProperties": { "$ref": "#/definitions/positiveInteger" },
|
91
|
+
"minProperties": { "$ref": "#/definitions/positiveIntegerDefault0" },
|
92
|
+
"required": { "$ref": "#/definitions/stringArray" },
|
93
|
+
"additionalProperties": {
|
94
|
+
"anyOf": [
|
95
|
+
{ "type": "boolean" },
|
96
|
+
{ "$ref": "#" }
|
97
|
+
],
|
98
|
+
"default": {}
|
125
99
|
},
|
126
|
-
|
127
|
-
|
128
|
-
"
|
100
|
+
"definitions": {
|
101
|
+
"type": "object",
|
102
|
+
"additionalProperties": { "$ref": "#" },
|
103
|
+
"default": {}
|
129
104
|
},
|
130
|
-
|
131
|
-
|
132
|
-
"
|
133
|
-
"
|
134
|
-
"exclusiveMinimum": true,
|
135
|
-
"default": 1
|
136
|
-
},
|
137
|
-
|
138
|
-
"disallow": {
|
139
|
-
"type": [ "string", "array" ],
|
140
|
-
"items": {
|
141
|
-
"type": [ "string", { "$ref": "#" } ]
|
142
|
-
},
|
143
|
-
"uniqueItems": true
|
105
|
+
"properties": {
|
106
|
+
"type": "object",
|
107
|
+
"additionalProperties": { "$ref": "#" },
|
108
|
+
"default": {}
|
144
109
|
},
|
145
|
-
|
146
|
-
|
147
|
-
"
|
148
|
-
"items": { "$ref": "#" },
|
110
|
+
"patternProperties": {
|
111
|
+
"type": "object",
|
112
|
+
"additionalProperties": { "$ref": "#" },
|
149
113
|
"default": {}
|
150
114
|
},
|
151
|
-
|
152
|
-
|
153
|
-
"
|
154
|
-
|
115
|
+
"dependencies": {
|
116
|
+
"type": "object",
|
117
|
+
"additionalProperties": {
|
118
|
+
"anyOf": [
|
119
|
+
{ "$ref": "#" },
|
120
|
+
{ "$ref": "#/definitions/stringArray" }
|
121
|
+
]
|
122
|
+
}
|
155
123
|
},
|
156
|
-
|
157
|
-
|
158
|
-
"
|
159
|
-
"
|
124
|
+
"enum": {
|
125
|
+
"type": "array",
|
126
|
+
"minItems": 1,
|
127
|
+
"uniqueItems": true
|
160
128
|
},
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
129
|
+
"type": {
|
130
|
+
"anyOf": [
|
131
|
+
{ "$ref": "#/definitions/simpleTypes" },
|
132
|
+
{
|
133
|
+
"type": "array",
|
134
|
+
"items": { "$ref": "#/definitions/simpleTypes" },
|
135
|
+
"minItems": 1,
|
136
|
+
"uniqueItems": true
|
137
|
+
}
|
138
|
+
]
|
139
|
+
},
|
140
|
+
"allOf": { "$ref": "#/definitions/schemaArray" },
|
141
|
+
"anyOf": { "$ref": "#/definitions/schemaArray" },
|
142
|
+
"oneOf": { "$ref": "#/definitions/schemaArray" },
|
143
|
+
"not": { "$ref": "#" }
|
166
144
|
},
|
167
|
-
|
168
145
|
"dependencies": {
|
169
|
-
"
|
170
|
-
"
|
146
|
+
"exclusiveMaximum": [ "maximum" ],
|
147
|
+
"exclusiveMinimum": [ "minimum" ]
|
171
148
|
},
|
172
|
-
|
173
149
|
"default": {}
|
174
150
|
}
|
@@ -2,7 +2,7 @@ require 'test/unit'
|
|
2
2
|
require File.dirname(__FILE__) + '/../lib/json-schema'
|
3
3
|
|
4
4
|
class JSONSchemaValidation < Test::Unit::TestCase
|
5
|
-
def
|
5
|
+
def valid_schema_v3
|
6
6
|
{
|
7
7
|
"$schema" => "http://json-schema.org/draft-03/schema#",
|
8
8
|
"type" => "object",
|
@@ -14,7 +14,7 @@ class JSONSchemaValidation < Test::Unit::TestCase
|
|
14
14
|
}
|
15
15
|
end
|
16
16
|
|
17
|
-
def
|
17
|
+
def invalid_schema_v3
|
18
18
|
{
|
19
19
|
"$schema" => "http://json-schema.org/draft-03/schema#",
|
20
20
|
"type" => "object",
|
@@ -26,17 +26,53 @@ class JSONSchemaValidation < Test::Unit::TestCase
|
|
26
26
|
}
|
27
27
|
end
|
28
28
|
|
29
|
+
def valid_schema_v4
|
30
|
+
{
|
31
|
+
"$schema" => "http://json-schema.org/draft-04/schema#",
|
32
|
+
"type" => "object",
|
33
|
+
"required" => ["b"],
|
34
|
+
"properties" => {
|
35
|
+
}
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
def invalid_schema_v4
|
40
|
+
{
|
41
|
+
"$schema" => "http://json-schema.org/draft-04/schema#",
|
42
|
+
"type" => "object",
|
43
|
+
"required" => "b",
|
44
|
+
"properties" => {
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
29
49
|
def test_draft03_validation
|
30
50
|
data = {"b" => {"a" => 5}}
|
31
|
-
assert(JSON::Validator.validate(
|
32
|
-
assert(!JSON::Validator.validate(
|
51
|
+
assert(JSON::Validator.validate(valid_schema_v3,data,:validate_schema => true, :version => :draft3))
|
52
|
+
assert(!JSON::Validator.validate(invalid_schema_v3,data,:validate_schema => true, :version => :draft3))
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_validate_just_schema_draft03
|
56
|
+
errors = JSON::Validator.fully_validate_schema(valid_schema_v3, :version => :draft3)
|
57
|
+
assert_equal [], errors
|
58
|
+
|
59
|
+
errors = JSON::Validator.fully_validate_schema(invalid_schema_v3, :version => :draft3)
|
60
|
+
assert_equal 1, errors.size
|
61
|
+
assert_match /the property .*required.*did not match/i, errors.first
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
def test_draft04_validation
|
66
|
+
data = {"b" => {"a" => 5}}
|
67
|
+
assert(JSON::Validator.validate(valid_schema_v4,data,:validate_schema => true, :version => :draft4))
|
68
|
+
assert(!JSON::Validator.validate(invalid_schema_v4,data,:validate_schema => true, :version => :draft4))
|
33
69
|
end
|
34
70
|
|
35
|
-
def
|
36
|
-
errors = JSON::Validator.fully_validate_schema(
|
71
|
+
def test_validate_just_schema_draft04
|
72
|
+
errors = JSON::Validator.fully_validate_schema(valid_schema_v4, :version => :draft4)
|
37
73
|
assert_equal [], errors
|
38
74
|
|
39
|
-
errors = JSON::Validator.fully_validate_schema(
|
75
|
+
errors = JSON::Validator.fully_validate_schema(invalid_schema_v4, :version => :draft4)
|
40
76
|
assert_equal 1, errors.size
|
41
77
|
assert_match /the property .*required.*did not match/i, errors.first
|
42
78
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-25 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: hoxworth@gmail.com
|