json-schema 2.1.4 → 2.1.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 +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=
|