json-schema 0.1.9 → 0.1.10
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/lib/json-schema/schema.rb +1 -1
- data/lib/json-schema/validator.rb +14 -6
- metadata +4 -4
data/lib/json-schema/schema.rb
CHANGED
@@ -15,7 +15,7 @@ module JSON
|
|
15
15
|
if @schema['id']
|
16
16
|
temp_uri = URI.parse(@schema['id'])
|
17
17
|
if temp_uri.relative?
|
18
|
-
uri.path = (Pathname.new(uri.path).parent + @schema['id']).cleanpath
|
18
|
+
uri.path = (Pathname.new(uri.path).parent + @schema['id']).cleanpath.to_s
|
19
19
|
temp_uri = uri
|
20
20
|
end
|
21
21
|
@uri = temp_uri
|
@@ -15,6 +15,9 @@ module JSON
|
|
15
15
|
super(message)
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
class SchemaError < Exception
|
20
|
+
end
|
18
21
|
|
19
22
|
class Validator
|
20
23
|
|
@@ -197,7 +200,7 @@ module JSON
|
|
197
200
|
|
198
201
|
# Validate the minimum number of items in an array
|
199
202
|
def validate_minItems(current_schema, data, fragments)
|
200
|
-
if data.is_a?(Array) && (data.
|
203
|
+
if data.is_a?(Array) && (data.compact.size < current_schema.schema['minItems'])
|
201
204
|
message = "The property '#{build_fragment(fragments)}' did not contain a minimum number of items #{current_schema.schema['minItems']}"
|
202
205
|
raise ValidationError.new(message, fragments, current_schema)
|
203
206
|
end
|
@@ -206,7 +209,7 @@ module JSON
|
|
206
209
|
|
207
210
|
# Validate the maximum number of items in an array
|
208
211
|
def validate_maxItems(current_schema, data, fragments)
|
209
|
-
if data.is_a?(Array) && (data.
|
212
|
+
if data.is_a?(Array) && (data.compact.size > current_schema.schema['maxItems'])
|
210
213
|
message = "The property '#{build_fragment(fragments)}' did not contain a minimum number of items #{current_schema.schema['minItems']}"
|
211
214
|
raise ValidationError.new(message, fragments, current_schema)
|
212
215
|
end
|
@@ -456,9 +459,9 @@ module JSON
|
|
456
459
|
# Check for absolute path
|
457
460
|
path = current_schema.schema['$ref'].split("#")[0]
|
458
461
|
if path[0,1] == "/"
|
459
|
-
temp_uri.path = Pathname.new(path).cleanpath
|
462
|
+
temp_uri.path = Pathname.new(path).cleanpath.to_s
|
460
463
|
else
|
461
|
-
temp_uri.path = (Pathname.new(current_schema.uri.path).parent + path).cleanpath
|
464
|
+
temp_uri.path = (Pathname.new(current_schema.uri.path).parent + path).cleanpath.to_s
|
462
465
|
end
|
463
466
|
temp_uri.fragment = current_schema.schema['$ref'].split("#")[1]
|
464
467
|
end
|
@@ -472,6 +475,7 @@ module JSON
|
|
472
475
|
# Perform fragment resolution to retrieve the appropriate level for the schema
|
473
476
|
target_schema = ref_schema.schema
|
474
477
|
fragments = temp_uri.fragment.split("/")
|
478
|
+
fragment_path = ''
|
475
479
|
fragments.each do |fragment|
|
476
480
|
if fragment && fragment != ''
|
477
481
|
if target_schema.is_a?(Array)
|
@@ -479,6 +483,10 @@ module JSON
|
|
479
483
|
else
|
480
484
|
target_schema = target_schema[fragment]
|
481
485
|
end
|
486
|
+
fragment_path = fragment_path + "/#{fragment}"
|
487
|
+
if target_schema.nil?
|
488
|
+
raise SchemaError.new("The fragment '#{fragment_path}' does not exist on schema #{ref_schema.uri.to_s}")
|
489
|
+
end
|
482
490
|
end
|
483
491
|
end
|
484
492
|
|
@@ -503,9 +511,9 @@ module JSON
|
|
503
511
|
# Check for absolute path
|
504
512
|
path = ref.split("#")[0]
|
505
513
|
if path[0,1] == '/'
|
506
|
-
uri.path = Pathname.new(path).cleanpath
|
514
|
+
uri.path = Pathname.new(path).cleanpath.to_s
|
507
515
|
else
|
508
|
-
uri.path = (Pathname.new(parent_schema.uri.path).parent + path).cleanpath
|
516
|
+
uri.path = (Pathname.new(parent_schema.uri.path).parent + path).cleanpath.to_s
|
509
517
|
end
|
510
518
|
uri.fragment = nil
|
511
519
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 10
|
10
|
+
version: 0.1.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kenny Hoxworth
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-09 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|