json_schemer 0.2.8 → 0.2.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +2 -2
- data/lib/json_schemer/schema/base.rb +52 -32
- data/lib/json_schemer/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6849b76f5d056da509ff2cf6961f8727d84fd00e4f0dd8c8e843cb4efaa5dbb1
|
4
|
+
data.tar.gz: 28a1573883545ffe2cf48cf5d80f0ea76c357556d9373e286a92d545f3f50afe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19a38974481d9f13512bb9d2df317b0529cd25171e298019eeb6ab216e535b1c4ab15f196f8ab94b86825818df87d2b5d5498dc92077658a3920e30398d44003
|
7
|
+
data.tar.gz: 0bbebb72912b7ce4686699941b4ade4f734f1b728cb94a20a8a320f4b23a0950d047b7068ebcdc61ee81304e534989eb91113ed35e378a6f49426444e15b0517
|
data/Gemfile.lock
CHANGED
@@ -4,15 +4,16 @@ module JSONSchemer
|
|
4
4
|
class Base
|
5
5
|
include Format
|
6
6
|
|
7
|
-
Instance = Struct.new(:data, :data_pointer, :schema, :schema_pointer, :parent_uri) do
|
7
|
+
Instance = Struct.new(:data, :data_pointer, :schema, :schema_pointer, :parent_uri, :insert_property_defaults) do
|
8
8
|
def merge(
|
9
9
|
data: self.data,
|
10
10
|
data_pointer: self.data_pointer,
|
11
11
|
schema: self.schema,
|
12
12
|
schema_pointer: self.schema_pointer,
|
13
|
-
parent_uri: self.parent_uri
|
13
|
+
parent_uri: self.parent_uri,
|
14
|
+
insert_property_defaults: self.insert_property_defaults
|
14
15
|
)
|
15
|
-
self.class.new(data, data_pointer, schema, schema_pointer, parent_uri)
|
16
|
+
self.class.new(data, data_pointer, schema, schema_pointer, parent_uri, insert_property_defaults)
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
@@ -46,11 +47,11 @@ module JSONSchemer
|
|
46
47
|
end
|
47
48
|
|
48
49
|
def valid?(data)
|
49
|
-
valid_instance?(Instance.new(data, '', root, '', nil))
|
50
|
+
valid_instance?(Instance.new(data, '', root, '', nil, !!@insert_property_defaults))
|
50
51
|
end
|
51
52
|
|
52
53
|
def validate(data)
|
53
|
-
validate_instance(Instance.new(data, '', root, '', nil))
|
54
|
+
validate_instance(Instance.new(data, '', root, '', nil, !!@insert_property_defaults))
|
54
55
|
end
|
55
56
|
|
56
57
|
protected
|
@@ -115,20 +116,35 @@ module JSONSchemer
|
|
115
116
|
|
116
117
|
if all_of
|
117
118
|
all_of.each_with_index do |subschema, index|
|
118
|
-
|
119
|
+
subinstance = instance.merge(
|
120
|
+
schema: subschema,
|
121
|
+
schema_pointer: "#{instance.schema_pointer}/allOf/#{index}",
|
122
|
+
insert_property_defaults: false
|
123
|
+
)
|
124
|
+
validate_instance(subinstance, &block)
|
119
125
|
end
|
120
126
|
end
|
121
127
|
|
122
128
|
if any_of
|
123
129
|
subschemas = any_of.lazy.with_index.map do |subschema, index|
|
124
|
-
|
130
|
+
subinstance = instance.merge(
|
131
|
+
schema: subschema,
|
132
|
+
schema_pointer: "#{instance.schema_pointer}/anyOf/#{index}",
|
133
|
+
insert_property_defaults: false
|
134
|
+
)
|
135
|
+
validate_instance(subinstance)
|
125
136
|
end
|
126
137
|
subschemas.each { |subschema| subschema.each(&block) } unless subschemas.any?(&:none?)
|
127
138
|
end
|
128
139
|
|
129
140
|
if one_of
|
130
141
|
subschemas = one_of.map.with_index do |subschema, index|
|
131
|
-
|
142
|
+
subinstance = instance.merge(
|
143
|
+
schema: subschema,
|
144
|
+
schema_pointer: "#{instance.schema_pointer}/oneOf/#{index}",
|
145
|
+
insert_property_defaults: false
|
146
|
+
)
|
147
|
+
validate_instance(subinstance)
|
132
148
|
end
|
133
149
|
valid_subschema_count = subschemas.count(&:none?)
|
134
150
|
if valid_subschema_count > 1
|
@@ -139,11 +155,15 @@ module JSONSchemer
|
|
139
155
|
end
|
140
156
|
|
141
157
|
unless not_schema.nil?
|
142
|
-
subinstance = instance.merge(
|
158
|
+
subinstance = instance.merge(
|
159
|
+
schema: not_schema,
|
160
|
+
schema_pointer: "#{instance.schema_pointer}/not",
|
161
|
+
insert_property_defaults: false
|
162
|
+
)
|
143
163
|
yield error(subinstance, 'not') if valid_instance?(subinstance)
|
144
164
|
end
|
145
165
|
|
146
|
-
if if_schema && valid_instance?(instance.merge(schema: if_schema))
|
166
|
+
if if_schema && valid_instance?(instance.merge(schema: if_schema, insert_property_defaults: false))
|
147
167
|
validate_instance(instance.merge(schema: then_schema, schema_pointer: "#{instance.schema_pointer}/then"), &block) unless then_schema.nil?
|
148
168
|
elsif if_schema
|
149
169
|
validate_instance(instance.merge(schema: else_schema, schema_pointer: "#{instance.schema_pointer}/else"), &block) unless else_schema.nil?
|
@@ -179,10 +199,6 @@ module JSONSchemer
|
|
179
199
|
!!@format
|
180
200
|
end
|
181
201
|
|
182
|
-
def insert_property_defaults?
|
183
|
-
!!@insert_property_defaults
|
184
|
-
end
|
185
|
-
|
186
202
|
def custom_format?(format)
|
187
203
|
!!(formats && formats.key?(format))
|
188
204
|
end
|
@@ -195,7 +211,6 @@ module JSONSchemer
|
|
195
211
|
JSONSchemer.schema(
|
196
212
|
schema,
|
197
213
|
format: format?,
|
198
|
-
insert_property_defaults: insert_property_defaults?,
|
199
214
|
formats: formats,
|
200
215
|
keywords: keywords,
|
201
216
|
ref_resolver: ref_resolver
|
@@ -250,27 +265,32 @@ module JSONSchemer
|
|
250
265
|
end
|
251
266
|
|
252
267
|
def validate_ref(instance, ref, &block)
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
if ref.start_with?('#')
|
268
|
+
if ref.start_with?('#')
|
269
|
+
schema_pointer = ref.slice(1..-1)
|
270
|
+
if valid_json_pointer?(schema_pointer)
|
271
|
+
ref_pointer = Hana::Pointer.new(URI.decode_www_form_component(schema_pointer))
|
258
272
|
subinstance = instance.merge(
|
259
273
|
schema: ref_pointer.eval(root),
|
260
|
-
schema_pointer:
|
261
|
-
parent_uri: (pointer_uri(root, ref_pointer) ||
|
274
|
+
schema_pointer: schema_pointer,
|
275
|
+
parent_uri: (pointer_uri(root, ref_pointer) || instance.parent_uri)
|
262
276
|
)
|
263
277
|
validate_instance(subinstance, &block)
|
264
|
-
|
265
|
-
ref_root = resolve_ref(ref_uri)
|
266
|
-
ref_object = child(ref_root)
|
267
|
-
subinstance = instance.merge(
|
268
|
-
schema: ref_pointer.eval(ref_root),
|
269
|
-
schema_pointer: ref_uri.fragment,
|
270
|
-
parent_uri: (pointer_uri(ref_root, ref_pointer) || ref_uri)
|
271
|
-
)
|
272
|
-
ref_object.validate_instance(subinstance, &block)
|
278
|
+
return
|
273
279
|
end
|
280
|
+
end
|
281
|
+
|
282
|
+
ref_uri = join_uri(instance.parent_uri, ref)
|
283
|
+
|
284
|
+
if valid_json_pointer?(ref_uri.fragment)
|
285
|
+
ref_pointer = Hana::Pointer.new(URI.decode_www_form_component(ref_uri.fragment))
|
286
|
+
ref_root = resolve_ref(ref_uri)
|
287
|
+
ref_object = child(ref_root)
|
288
|
+
subinstance = instance.merge(
|
289
|
+
schema: ref_pointer.eval(ref_root),
|
290
|
+
schema_pointer: ref_uri.fragment,
|
291
|
+
parent_uri: (pointer_uri(ref_root, ref_pointer) || ref_uri)
|
292
|
+
)
|
293
|
+
ref_object.validate_instance(subinstance, &block)
|
274
294
|
elsif id = ids[ref_uri.to_s]
|
275
295
|
subinstance = instance.merge(
|
276
296
|
schema: id.fetch(:schema),
|
@@ -467,7 +487,7 @@ module JSONSchemer
|
|
467
487
|
dependencies = schema['dependencies']
|
468
488
|
property_names = schema['propertyNames']
|
469
489
|
|
470
|
-
if insert_property_defaults
|
490
|
+
if instance.insert_property_defaults && properties
|
471
491
|
properties.each do |property, property_schema|
|
472
492
|
if !data.key?(property) && property_schema.is_a?(Hash) && property_schema.key?('default')
|
473
493
|
data[property] = property_schema.fetch('default').clone
|
data/lib/json_schemer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_schemer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Harsha
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -382,7 +382,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
382
382
|
- !ruby/object:Gem::Version
|
383
383
|
version: '0'
|
384
384
|
requirements: []
|
385
|
-
|
385
|
+
rubyforge_project:
|
386
|
+
rubygems_version: 2.7.6
|
386
387
|
signing_key:
|
387
388
|
specification_version: 4
|
388
389
|
summary: JSON Schema validator. Supports drafts 4, 6, and 7.
|