json-schema 2.0.4 → 2.0.5
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
CHANGED
@@ -4,12 +4,16 @@ module JSON
|
|
4
4
|
class Schema
|
5
5
|
class AdditionalPropertiesAttribute < Attribute
|
6
6
|
def self.validate(current_schema, data, fragments, processor, validator, options = {})
|
7
|
-
if data.is_a?(Hash)
|
7
|
+
if data.is_a?(Hash) && (
|
8
|
+
current_schema.schema['type'].nil? || (
|
9
|
+
current_schema.schema['type'].is_a?(String) &&
|
10
|
+
current_schema.schema['type'].downcase == 'object'
|
11
|
+
)
|
12
|
+
)
|
8
13
|
extra_properties = data.keys
|
9
|
-
|
10
14
|
extra_properties = remove_valid_properties(extra_properties, current_schema, validator)
|
11
15
|
|
12
|
-
addprop= current_schema.schema['additionalProperties']
|
16
|
+
addprop = current_schema.schema['additionalProperties']
|
13
17
|
if addprop.is_a?(Hash)
|
14
18
|
matching_properties= extra_properties # & addprop.keys
|
15
19
|
matching_properties.each do |key|
|
@@ -57,6 +61,7 @@ module JSON
|
|
57
61
|
|
58
62
|
extra_properties
|
59
63
|
end
|
64
|
+
|
60
65
|
end
|
61
66
|
end
|
62
67
|
end
|
@@ -204,9 +204,27 @@ class JSONSchemaDraft3Test < Test::Unit::TestCase
|
|
204
204
|
|
205
205
|
data["a"] = {"b" => "taco"}
|
206
206
|
assert(!JSON::Validator.validate(schema,data))
|
207
|
-
end
|
208
207
|
|
208
|
+
# Test an array of unioned-type objects that prevent additionalProperties
|
209
|
+
schema["properties"]["a"] = {
|
210
|
+
'type' => 'array',
|
211
|
+
'items' => {
|
212
|
+
'type' => [
|
213
|
+
{ 'type' => 'object', 'properties' => { "b" => { "type" => "integer" } } },
|
214
|
+
{ 'type' => 'object', 'properties' => { "c" => { "type" => "string" } } }
|
215
|
+
],
|
216
|
+
'additionalProperties' => false
|
217
|
+
}
|
218
|
+
}
|
219
|
+
|
220
|
+
data["a"] = [{"b" => 5}, {"c" => "foo"}]
|
221
|
+
errors = JSON::Validator.fully_validate(schema, data)
|
222
|
+
assert(errors.empty?, errors.join("\n"))
|
209
223
|
|
224
|
+
# This should actually pass, because this matches the first schema in the union
|
225
|
+
data["a"] << {"c" => false}
|
226
|
+
assert(JSON::Validator.validate(schema,data))
|
227
|
+
end
|
210
228
|
|
211
229
|
def test_required
|
212
230
|
# Set up the default datatype
|