json-schema-pvdgm 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.md +19 -0
  3. data/README.textile +354 -0
  4. data/lib/json-schema.rb +25 -0
  5. data/lib/json-schema/attributes/additionalitems.rb +23 -0
  6. data/lib/json-schema/attributes/additionalproperties.rb +67 -0
  7. data/lib/json-schema/attributes/allof.rb +37 -0
  8. data/lib/json-schema/attributes/anyof.rb +41 -0
  9. data/lib/json-schema/attributes/dependencies.rb +30 -0
  10. data/lib/json-schema/attributes/dependencies_v4.rb +20 -0
  11. data/lib/json-schema/attributes/disallow.rb +11 -0
  12. data/lib/json-schema/attributes/divisibleby.rb +16 -0
  13. data/lib/json-schema/attributes/enum.rb +24 -0
  14. data/lib/json-schema/attributes/extends.rb +49 -0
  15. data/lib/json-schema/attributes/format.rb +123 -0
  16. data/lib/json-schema/attributes/items.rb +25 -0
  17. data/lib/json-schema/attributes/maxdecimal.rb +15 -0
  18. data/lib/json-schema/attributes/maximum.rb +15 -0
  19. data/lib/json-schema/attributes/maximum_inclusive.rb +15 -0
  20. data/lib/json-schema/attributes/maxitems.rb +12 -0
  21. data/lib/json-schema/attributes/maxlength.rb +14 -0
  22. data/lib/json-schema/attributes/maxproperties.rb +12 -0
  23. data/lib/json-schema/attributes/minimum.rb +15 -0
  24. data/lib/json-schema/attributes/minimum_inclusive.rb +15 -0
  25. data/lib/json-schema/attributes/minitems.rb +12 -0
  26. data/lib/json-schema/attributes/minlength.rb +14 -0
  27. data/lib/json-schema/attributes/minproperties.rb +12 -0
  28. data/lib/json-schema/attributes/multipleof.rb +16 -0
  29. data/lib/json-schema/attributes/not.rb +28 -0
  30. data/lib/json-schema/attributes/oneof.rb +32 -0
  31. data/lib/json-schema/attributes/pattern.rb +15 -0
  32. data/lib/json-schema/attributes/patternproperties.rb +23 -0
  33. data/lib/json-schema/attributes/properties.rb +58 -0
  34. data/lib/json-schema/attributes/properties_optional.rb +23 -0
  35. data/lib/json-schema/attributes/properties_v4.rb +57 -0
  36. data/lib/json-schema/attributes/ref.rb +70 -0
  37. data/lib/json-schema/attributes/required.rb +23 -0
  38. data/lib/json-schema/attributes/type.rb +102 -0
  39. data/lib/json-schema/attributes/type_v4.rb +54 -0
  40. data/lib/json-schema/attributes/uniqueitems.rb +16 -0
  41. data/lib/json-schema/model_validator.rb +85 -0
  42. data/lib/json-schema/schema.rb +73 -0
  43. data/lib/json-schema/uri/file.rb +36 -0
  44. data/lib/json-schema/uri/uuid.rb +285 -0
  45. data/lib/json-schema/util/array_set.rb +14 -0
  46. data/lib/json-schema/util/hash.rb +8 -0
  47. data/lib/json-schema/validator.rb +672 -0
  48. data/lib/json-schema/validators/draft1.rb +32 -0
  49. data/lib/json-schema/validators/draft2.rb +33 -0
  50. data/lib/json-schema/validators/draft3.rb +38 -0
  51. data/lib/json-schema/validators/draft4.rb +45 -0
  52. data/resources/draft-01.json +155 -0
  53. data/resources/draft-02.json +166 -0
  54. data/resources/draft-03.json +174 -0
  55. data/resources/draft-04.json +150 -0
  56. data/test/data/all_of_ref_data.json +3 -0
  57. data/test/data/any_of_ref_data.json +7 -0
  58. data/test/data/bad_data_1.json +3 -0
  59. data/test/data/good_data_1.json +3 -0
  60. data/test/data/one_of_ref_links_data.json +5 -0
  61. data/test/schemas/all_of_ref_base_schema.json +6 -0
  62. data/test/schemas/all_of_ref_schema.json +7 -0
  63. data/test/schemas/any_of_ref_jane_schema.json +4 -0
  64. data/test/schemas/any_of_ref_jimmy_schema.json +4 -0
  65. data/test/schemas/any_of_ref_john_schema.json +4 -0
  66. data/test/schemas/any_of_ref_schema.json +15 -0
  67. data/test/schemas/extends_and_additionalProperties-1-filename.schema.json +34 -0
  68. data/test/schemas/extends_and_additionalProperties-1-ref.schema.json +34 -0
  69. data/test/schemas/extends_and_additionalProperties-2-filename.schema.json +33 -0
  70. data/test/schemas/extends_and_additionalProperties-2-ref.schema.json +33 -0
  71. data/test/schemas/good_schema_1.json +10 -0
  72. data/test/schemas/good_schema_2.json +10 -0
  73. data/test/schemas/good_schema_extends1.json +10 -0
  74. data/test/schemas/good_schema_extends2.json +13 -0
  75. data/test/schemas/inner.schema.json +21 -0
  76. data/test/schemas/one_of_ref_links_schema.json +16 -0
  77. data/test/schemas/self_link_schema.json +17 -0
  78. data/test/schemas/up_link_schema.json +17 -0
  79. data/test/test_all_of_ref_schema.rb +11 -0
  80. data/test/test_any_of_ref_schema.rb +11 -0
  81. data/test/test_bad_schema_ref.rb +33 -0
  82. data/test/test_extended_schema.rb +68 -0
  83. data/test/test_extends_and_additionalProperties.rb +50 -0
  84. data/test/test_files_v3.rb +52 -0
  85. data/test/test_fragment_resolution.rb +31 -0
  86. data/test/test_full_validation.rb +209 -0
  87. data/test/test_jsonschema_draft1.rb +701 -0
  88. data/test/test_jsonschema_draft2.rb +773 -0
  89. data/test/test_jsonschema_draft3.rb +1236 -0
  90. data/test/test_jsonschema_draft4.rb +1356 -0
  91. data/test/test_model_validator.rb +52 -0
  92. data/test/test_one_of.rb +42 -0
  93. data/test/test_ruby_schema.rb +38 -0
  94. data/test/test_schema_type_attribute.rb +21 -0
  95. data/test/test_schema_validation.rb +85 -0
  96. metadata +180 -0
@@ -0,0 +1,32 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class Draft1 < Validator
5
+ def initialize
6
+ super
7
+ @attributes = {
8
+ "type" => JSON::Schema::TypeAttribute,
9
+ "disallow" => JSON::Schema::DisallowAttribute,
10
+ "format" => JSON::Schema::FormatAttribute,
11
+ "maximum" => JSON::Schema::MaximumInclusiveAttribute,
12
+ "minimum" => JSON::Schema::MinimumInclusiveAttribute,
13
+ "minItems" => JSON::Schema::MinItemsAttribute,
14
+ "maxItems" => JSON::Schema::MaxItemsAttribute,
15
+ "minLength" => JSON::Schema::MinLengthAttribute,
16
+ "maxLength" => JSON::Schema::MaxLengthAttribute,
17
+ "maxDecimal" => JSON::Schema::MaxDecimalAttribute,
18
+ "enum" => JSON::Schema::EnumAttribute,
19
+ "properties" => JSON::Schema::PropertiesOptionalAttribute,
20
+ "pattern" => JSON::Schema::PatternAttribute,
21
+ "additionalProperties" => JSON::Schema::AdditionalPropertiesAttribute,
22
+ "items" => JSON::Schema::ItemsAttribute,
23
+ "extends" => JSON::Schema::ExtendsAttribute
24
+ }
25
+ @uri = URI.parse("http://json-schema.org/draft-01/schema#")
26
+ end
27
+
28
+ JSON::Validator.register_validator(self.new)
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class Draft2 < Validator
5
+ def initialize
6
+ super
7
+ @attributes = {
8
+ "type" => JSON::Schema::TypeAttribute,
9
+ "disallow" => JSON::Schema::DisallowAttribute,
10
+ "format" => JSON::Schema::FormatAttribute,
11
+ "maximum" => JSON::Schema::MaximumInclusiveAttribute,
12
+ "minimum" => JSON::Schema::MinimumInclusiveAttribute,
13
+ "minItems" => JSON::Schema::MinItemsAttribute,
14
+ "maxItems" => JSON::Schema::MaxItemsAttribute,
15
+ "uniqueItems" => JSON::Schema::UniqueItemsAttribute,
16
+ "minLength" => JSON::Schema::MinLengthAttribute,
17
+ "maxLength" => JSON::Schema::MaxLengthAttribute,
18
+ "divisibleBy" => JSON::Schema::DivisibleByAttribute,
19
+ "enum" => JSON::Schema::EnumAttribute,
20
+ "properties" => JSON::Schema::PropertiesOptionalAttribute,
21
+ "pattern" => JSON::Schema::PatternAttribute,
22
+ "additionalProperties" => JSON::Schema::AdditionalPropertiesAttribute,
23
+ "items" => JSON::Schema::ItemsAttribute,
24
+ "extends" => JSON::Schema::ExtendsAttribute
25
+ }
26
+ @uri = URI.parse("http://json-schema.org/draft-02/schema#")
27
+ end
28
+
29
+ JSON::Validator.register_validator(self.new)
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,38 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class Draft3 < Validator
5
+ def initialize
6
+ super
7
+ @attributes = {
8
+ "type" => JSON::Schema::TypeAttribute,
9
+ "disallow" => JSON::Schema::DisallowAttribute,
10
+ "format" => JSON::Schema::FormatAttribute,
11
+ "maximum" => JSON::Schema::MaximumAttribute,
12
+ "minimum" => JSON::Schema::MinimumAttribute,
13
+ "minItems" => JSON::Schema::MinItemsAttribute,
14
+ "maxItems" => JSON::Schema::MaxItemsAttribute,
15
+ "uniqueItems" => JSON::Schema::UniqueItemsAttribute,
16
+ "minLength" => JSON::Schema::MinLengthAttribute,
17
+ "maxLength" => JSON::Schema::MaxLengthAttribute,
18
+ "divisibleBy" => JSON::Schema::DivisibleByAttribute,
19
+ "enum" => JSON::Schema::EnumAttribute,
20
+ "properties" => JSON::Schema::PropertiesAttribute,
21
+ "pattern" => JSON::Schema::PatternAttribute,
22
+ "patternProperties" => JSON::Schema::PatternPropertiesAttribute,
23
+ "additionalProperties" => JSON::Schema::AdditionalPropertiesAttribute,
24
+ "items" => JSON::Schema::ItemsAttribute,
25
+ "additionalItems" => JSON::Schema::AdditionalItemsAttribute,
26
+ "dependencies" => JSON::Schema::DependenciesAttribute,
27
+ "extends" => JSON::Schema::ExtendsAttribute,
28
+ "$ref" => JSON::Schema::RefAttribute
29
+ }
30
+ @uri = URI.parse("http://json-schema.org/draft-03/schema#")
31
+ end
32
+
33
+ JSON::Validator.register_validator(self.new)
34
+ JSON::Validator.register_default_validator(self.new)
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,45 @@
1
+ module JSON
2
+ class Schema
3
+
4
+ class Draft4 < Validator
5
+ def initialize
6
+ super
7
+ @attributes = {
8
+ "type" => JSON::Schema::TypeV4Attribute,
9
+ "allOf" => JSON::Schema::AllOfAttribute,
10
+ "anyOf" => JSON::Schema::AnyOfAttribute,
11
+ "oneOf" => JSON::Schema::OneOfAttribute,
12
+ "not" => JSON::Schema::NotAttribute,
13
+ "disallow" => JSON::Schema::DisallowAttribute,
14
+ "format" => JSON::Schema::FormatAttribute,
15
+ "maximum" => JSON::Schema::MaximumAttribute,
16
+ "minimum" => JSON::Schema::MinimumAttribute,
17
+ "minItems" => JSON::Schema::MinItemsAttribute,
18
+ "maxItems" => JSON::Schema::MaxItemsAttribute,
19
+ "minProperties" => JSON::Schema::MinPropertiesAttribute,
20
+ "maxProperties" => JSON::Schema::MaxPropertiesAttribute,
21
+ "uniqueItems" => JSON::Schema::UniqueItemsAttribute,
22
+ "minLength" => JSON::Schema::MinLengthAttribute,
23
+ "maxLength" => JSON::Schema::MaxLengthAttribute,
24
+ "multipleOf" => JSON::Schema::MultipleOfAttribute,
25
+ "enum" => JSON::Schema::EnumAttribute,
26
+ "properties" => JSON::Schema::PropertiesV4Attribute,
27
+ "required" => JSON::Schema::RequiredAttribute,
28
+ "pattern" => JSON::Schema::PatternAttribute,
29
+ "patternProperties" => JSON::Schema::PatternPropertiesAttribute,
30
+ "additionalProperties" => JSON::Schema::AdditionalPropertiesAttribute,
31
+ "items" => JSON::Schema::ItemsAttribute,
32
+ "additionalItems" => JSON::Schema::AdditionalItemsAttribute,
33
+ "dependencies" => JSON::Schema::DependenciesV4Attribute,
34
+ "extends" => JSON::Schema::ExtendsAttribute,
35
+ "$ref" => JSON::Schema::RefAttribute
36
+ }
37
+ @uri = URI.parse("http://json-schema.org/draft-04/schema#")
38
+ end
39
+
40
+ JSON::Validator.register_validator(self.new)
41
+ JSON::Validator.register_default_validator(self.new)
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,155 @@
1
+ {
2
+ "$schema" : "http://json-schema.org/draft-01/hyper-schema#",
3
+ "id" : "http://json-schema.org/draft-01/schema#",
4
+ "type" : "object",
5
+
6
+ "properties" : {
7
+ "type" : {
8
+ "type" : ["string", "array"],
9
+ "items" : {
10
+ "type" : ["string", {"$ref" : "#"}]
11
+ },
12
+ "optional" : true,
13
+ "default" : "any"
14
+ },
15
+
16
+ "properties" : {
17
+ "type" : "object",
18
+ "additionalProperties" : {"$ref" : "#"},
19
+ "optional" : true,
20
+ "default" : {}
21
+ },
22
+
23
+ "items" : {
24
+ "type" : [{"$ref" : "#"}, "array"],
25
+ "items" : {"$ref" : "#"},
26
+ "optional" : true,
27
+ "default" : {}
28
+ },
29
+
30
+ "optional" : {
31
+ "type" : "boolean",
32
+ "optional" : true,
33
+ "default" : false
34
+ },
35
+
36
+ "additionalProperties" : {
37
+ "type" : [{"$ref" : "#"}, "boolean"],
38
+ "optional" : true,
39
+ "default" : {}
40
+ },
41
+
42
+ "requires" : {
43
+ "type" : ["string", {"$ref" : "#"}],
44
+ "optional" : true
45
+ },
46
+
47
+ "minimum" : {
48
+ "type" : "number",
49
+ "optional" : true
50
+ },
51
+
52
+ "maximum" : {
53
+ "type" : "number",
54
+ "optional" : true
55
+ },
56
+
57
+ "minimumCanEqual" : {
58
+ "type" : "boolean",
59
+ "optional" : true,
60
+ "requires" : "minimum",
61
+ "default" : true
62
+ },
63
+
64
+ "maximumCanEqual" : {
65
+ "type" : "boolean",
66
+ "optional" : true,
67
+ "requires" : "maximum",
68
+ "default" : true
69
+ },
70
+
71
+ "minItems" : {
72
+ "type" : "integer",
73
+ "optional" : true,
74
+ "minimum" : 0,
75
+ "default" : 0
76
+ },
77
+
78
+ "maxItems" : {
79
+ "type" : "integer",
80
+ "optional" : true,
81
+ "minimum" : 0
82
+ },
83
+
84
+ "pattern" : {
85
+ "type" : "string",
86
+ "optional" : true,
87
+ "format" : "regex"
88
+ },
89
+
90
+ "minLength" : {
91
+ "type" : "integer",
92
+ "optional" : true,
93
+ "minimum" : 0,
94
+ "default" : 0
95
+ },
96
+
97
+ "maxLength" : {
98
+ "type" : "integer",
99
+ "optional" : true
100
+ },
101
+
102
+ "enum" : {
103
+ "type" : "array",
104
+ "optional" : true,
105
+ "minItems" : 1
106
+ },
107
+
108
+ "title" : {
109
+ "type" : "string",
110
+ "optional" : true
111
+ },
112
+
113
+ "description" : {
114
+ "type" : "string",
115
+ "optional" : true
116
+ },
117
+
118
+ "format" : {
119
+ "type" : "string",
120
+ "optional" : true
121
+ },
122
+
123
+ "contentEncoding" : {
124
+ "type" : "string",
125
+ "optional" : true
126
+ },
127
+
128
+ "default" : {
129
+ "type" : "any",
130
+ "optional" : true
131
+ },
132
+
133
+ "maxDecimal" : {
134
+ "type" : "integer",
135
+ "optional" : true,
136
+ "minimum" : 0
137
+ },
138
+
139
+ "disallow" : {
140
+ "type" : ["string", "array"],
141
+ "items" : {"type" : "string"},
142
+ "optional" : true
143
+ },
144
+
145
+ "extends" : {
146
+ "type" : [{"$ref" : "#"}, "array"],
147
+ "items" : {"$ref" : "#"},
148
+ "optional" : true,
149
+ "default" : {}
150
+ }
151
+ },
152
+
153
+ "optional" : true,
154
+ "default" : {}
155
+ }
@@ -0,0 +1,166 @@
1
+ {
2
+ "$schema" : "http://json-schema.org/draft-02/hyper-schema#",
3
+ "id" : "http://json-schema.org/draft-02/schema#",
4
+ "type" : "object",
5
+
6
+ "properties" : {
7
+ "type" : {
8
+ "type" : ["string", "array"],
9
+ "items" : {
10
+ "type" : ["string", {"$ref" : "#"}]
11
+ },
12
+ "optional" : true,
13
+ "uniqueItems" : true,
14
+ "default" : "any"
15
+ },
16
+
17
+ "properties" : {
18
+ "type" : "object",
19
+ "additionalProperties" : {"$ref" : "#"},
20
+ "optional" : true,
21
+ "default" : {}
22
+ },
23
+
24
+ "items" : {
25
+ "type" : [{"$ref" : "#"}, "array"],
26
+ "items" : {"$ref" : "#"},
27
+ "optional" : true,
28
+ "default" : {}
29
+ },
30
+
31
+ "optional" : {
32
+ "type" : "boolean",
33
+ "optional" : true,
34
+ "default" : false
35
+ },
36
+
37
+ "additionalProperties" : {
38
+ "type" : [{"$ref" : "#"}, "boolean"],
39
+ "optional" : true,
40
+ "default" : {}
41
+ },
42
+
43
+ "requires" : {
44
+ "type" : ["string", {"$ref" : "#"}],
45
+ "optional" : true
46
+ },
47
+
48
+ "minimum" : {
49
+ "type" : "number",
50
+ "optional" : true
51
+ },
52
+
53
+ "maximum" : {
54
+ "type" : "number",
55
+ "optional" : true
56
+ },
57
+
58
+ "minimumCanEqual" : {
59
+ "type" : "boolean",
60
+ "optional" : true,
61
+ "requires" : "minimum",
62
+ "default" : true
63
+ },
64
+
65
+ "maximumCanEqual" : {
66
+ "type" : "boolean",
67
+ "optional" : true,
68
+ "requires" : "maximum",
69
+ "default" : true
70
+ },
71
+
72
+ "minItems" : {
73
+ "type" : "integer",
74
+ "optional" : true,
75
+ "minimum" : 0,
76
+ "default" : 0
77
+ },
78
+
79
+ "maxItems" : {
80
+ "type" : "integer",
81
+ "optional" : true,
82
+ "minimum" : 0
83
+ },
84
+
85
+ "uniqueItems" : {
86
+ "type" : "boolean",
87
+ "optional" : true,
88
+ "default" : false
89
+ },
90
+
91
+ "pattern" : {
92
+ "type" : "string",
93
+ "optional" : true,
94
+ "format" : "regex"
95
+ },
96
+
97
+ "minLength" : {
98
+ "type" : "integer",
99
+ "optional" : true,
100
+ "minimum" : 0,
101
+ "default" : 0
102
+ },
103
+
104
+ "maxLength" : {
105
+ "type" : "integer",
106
+ "optional" : true
107
+ },
108
+
109
+ "enum" : {
110
+ "type" : "array",
111
+ "optional" : true,
112
+ "minItems" : 1,
113
+ "uniqueItems" : true
114
+ },
115
+
116
+ "title" : {
117
+ "type" : "string",
118
+ "optional" : true
119
+ },
120
+
121
+ "description" : {
122
+ "type" : "string",
123
+ "optional" : true
124
+ },
125
+
126
+ "format" : {
127
+ "type" : "string",
128
+ "optional" : true
129
+ },
130
+
131
+ "contentEncoding" : {
132
+ "type" : "string",
133
+ "optional" : true
134
+ },
135
+
136
+ "default" : {
137
+ "type" : "any",
138
+ "optional" : true
139
+ },
140
+
141
+ "divisibleBy" : {
142
+ "type" : "number",
143
+ "minimum" : 0,
144
+ "minimumCanEqual" : false,
145
+ "optional" : true,
146
+ "default" : 1
147
+ },
148
+
149
+ "disallow" : {
150
+ "type" : ["string", "array"],
151
+ "items" : {"type" : "string"},
152
+ "optional" : true,
153
+ "uniqueItems" : true
154
+ },
155
+
156
+ "extends" : {
157
+ "type" : [{"$ref" : "#"}, "array"],
158
+ "items" : {"$ref" : "#"},
159
+ "optional" : true,
160
+ "default" : {}
161
+ }
162
+ },
163
+
164
+ "optional" : true,
165
+ "default" : {}
166
+ }