json-schema 0.9.8 → 0.9.9
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 +21 -1
- data/lib/json-schema.rb +3 -3
- data/lib/json-schema/validator.rb +16 -1
- data/test/test_schema_validation.rb +33 -0
- metadata +5 -6
data/README.textile
CHANGED
@@ -18,7 +18,7 @@ From the git repo:
|
|
18
18
|
|
19
19
|
<pre>
|
20
20
|
$ gem build json-schema.gemspec
|
21
|
-
$ gem install json-schema-0.9.
|
21
|
+
$ gem install json-schema-0.9.9.gem
|
22
22
|
</pre>
|
23
23
|
|
24
24
|
|
@@ -93,6 +93,26 @@ rescue JSON::Schema::ValidationError
|
|
93
93
|
end
|
94
94
|
</pre>
|
95
95
|
|
96
|
+
h3. Validate a JSON object against a JSON schema object, while also validating the schema itself
|
97
|
+
|
98
|
+
<pre>
|
99
|
+
require 'rubygems'
|
100
|
+
require 'json-schema'
|
101
|
+
|
102
|
+
schema = {
|
103
|
+
"type" => "object",
|
104
|
+
"properties" => {
|
105
|
+
"a" => {"type" => "integer", "required" => "true"} # This will fail schema validation!
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
data = {
|
110
|
+
"a" => 5
|
111
|
+
}
|
112
|
+
|
113
|
+
JSON::Validator.validate(schema, data, :validate_schema => false)
|
114
|
+
</pre>
|
115
|
+
|
96
116
|
h3. Validate an object against a JSON Schema Draft 2 schema
|
97
117
|
|
98
118
|
<pre>
|
data/lib/json-schema.rb
CHANGED
@@ -3,6 +3,6 @@ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/json-schema"
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'schema'
|
5
5
|
require 'validator'
|
6
|
-
Dir[File.join(File.dirname(__FILE__), "json-schema/attributes
|
7
|
-
Dir[File.join(File.dirname(__FILE__), "json-schema/validators
|
8
|
-
require 'uri/file'
|
6
|
+
Dir[File.join(File.dirname(__FILE__), "json-schema/attributes/*.rb")].each {|file| require file }
|
7
|
+
Dir[File.join(File.dirname(__FILE__), "json-schema/validators/*.rb")].each {|file| require file }
|
8
|
+
require 'uri/file'
|
@@ -74,7 +74,8 @@ module JSON
|
|
74
74
|
@@cache_schemas = false
|
75
75
|
@@default_opts = {
|
76
76
|
:list => false,
|
77
|
-
:version => nil
|
77
|
+
:version => nil,
|
78
|
+
:validate_schema => false
|
78
79
|
}
|
79
80
|
@@validators = {}
|
80
81
|
@@default_validator = nil
|
@@ -85,6 +86,7 @@ module JSON
|
|
85
86
|
@options = @@default_opts.clone.merge(opts)
|
86
87
|
|
87
88
|
# I'm not a fan of this, but it's quick and dirty to get it working for now
|
89
|
+
version_string = "draft-03"
|
88
90
|
if @options[:version]
|
89
91
|
@options[:version] = case @options[:version].to_s
|
90
92
|
when "draft3"
|
@@ -96,10 +98,23 @@ module JSON
|
|
96
98
|
else
|
97
99
|
raise JSON::Schema::SchemaError.new("The requested JSON schema version is not supported")
|
98
100
|
end
|
101
|
+
version_string = @options[:version]
|
99
102
|
u = URI.parse("http://json-schema.org/#{@options[:version]}/schema#")
|
100
103
|
validator = JSON::Validator.validators["#{u.scheme}://#{u.host}#{u.path}"]
|
101
104
|
@options[:version] = validator
|
102
105
|
end
|
106
|
+
|
107
|
+
# validate the schema, if requested
|
108
|
+
if @options[:validate_schema]
|
109
|
+
begin
|
110
|
+
metaschema_file = File.join(Pathname.new(File.dirname(__FILE__)).parent.parent, "resources", "#{version_string}.json").to_s
|
111
|
+
meta_validator = JSON::Validator.new(metaschema_file, schema_data)
|
112
|
+
meta_validator.validate
|
113
|
+
rescue JSON::Schema::ValidationError, JSON::Schema::SchemaError
|
114
|
+
raise $!
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
103
118
|
@base_schema = initialize_schema(schema_data)
|
104
119
|
@data = initialize_data(data)
|
105
120
|
build_schemas(@base_schema)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/json-schema'
|
3
|
+
|
4
|
+
class JSONSchemaValidation < Test::Unit::TestCase
|
5
|
+
|
6
|
+
def test_draft03_validation
|
7
|
+
if JSON::Validator.json_backend != nil
|
8
|
+
data = {"b" => {"a" => 5}}
|
9
|
+
schema = {
|
10
|
+
"$schema" => "http://json-schema.org/draft-03/schema#",
|
11
|
+
"type" => "object",
|
12
|
+
"properties" => {
|
13
|
+
"b" => {
|
14
|
+
"required" => true
|
15
|
+
}
|
16
|
+
}
|
17
|
+
}
|
18
|
+
|
19
|
+
assert(JSON::Validator.validate(schema,data,:validate_schema => true))
|
20
|
+
|
21
|
+
schema = {
|
22
|
+
"$schema" => "http://json-schema.org/draft-03/schema#",
|
23
|
+
"type" => "object",
|
24
|
+
"properties" => {
|
25
|
+
"b" => {
|
26
|
+
"required" => "true"
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
assert(!JSON::Validator.validate(schema,data,:validate_schema => true))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 43
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
8
|
+
- 9
|
9
|
+
version: 0.9.9
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Kenny Hoxworth
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-07-
|
17
|
+
date: 2011-07-24 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|
@@ -67,6 +66,7 @@ files:
|
|
67
66
|
- test/test_jsonschema_draft1.rb
|
68
67
|
- test/test_jsonschema_draft2.rb
|
69
68
|
- test/test_jsonschema_draft3.rb
|
69
|
+
- test/test_schema_validation.rb
|
70
70
|
has_rdoc: true
|
71
71
|
homepage: http://github.com/hoxworth/json-schema/tree/master
|
72
72
|
licenses: []
|
@@ -81,7 +81,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
83
83
|
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
84
|
segments:
|
86
85
|
- 0
|
87
86
|
version: "0"
|
@@ -90,7 +89,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
89
|
requirements:
|
91
90
|
- - ">="
|
92
91
|
- !ruby/object:Gem::Version
|
93
|
-
hash: 3
|
94
92
|
segments:
|
95
93
|
- 0
|
96
94
|
version: "0"
|
@@ -107,3 +105,4 @@ test_files:
|
|
107
105
|
- test/test_jsonschema_draft1.rb
|
108
106
|
- test/test_jsonschema_draft2.rb
|
109
107
|
- test/test_jsonschema_draft3.rb
|
108
|
+
- test/test_schema_validation.rb
|