blumquist 0.6.0 → 0.7.0
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/CHANGELOG.md +3 -0
- data/lib/blumquist.rb +43 -4
- data/lib/blumquist/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f4879db47364122779e5e676bdf8856a3ab262e3
|
|
4
|
+
data.tar.gz: 0e7e11fe567658c3faf6f3818ab61a18bc84f5f6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f4ead88bf98e00094da661c9ae1ec0b4e042c8f382d32c6147d4e30184a49bd917ecc5b7c4735a2e23e446819c23f4eae50868db0ef1986e3a02a177ecd68871
|
|
7
|
+
data.tar.gz: 20c8f94af73909b36aa723b67070b9ce340ecbb3c9aca8c43484d586b7d3211f942bb08095f81a80a1c8eaa8899162d5df3a1c863df0b7e4749c01efbe224f9b
|
data/CHANGELOG.md
CHANGED
data/lib/blumquist.rb
CHANGED
|
@@ -5,10 +5,13 @@ require 'json-schema'
|
|
|
5
5
|
require 'blumquist/errors'
|
|
6
6
|
|
|
7
7
|
class Blumquist
|
|
8
|
+
attr_reader :_type
|
|
9
|
+
|
|
8
10
|
def initialize(options)
|
|
9
11
|
# Poor man's deep clone: json 🆗 🆒
|
|
10
12
|
@data = JSON.parse(options.fetch(:data).to_json)
|
|
11
13
|
@schema = options.fetch(:schema).with_indifferent_access
|
|
14
|
+
@original_properties = options.fetch(:schema).with_indifferent_access[:properties]
|
|
12
15
|
@validate = options.fetch(:validate, true)
|
|
13
16
|
|
|
14
17
|
validate_schema
|
|
@@ -30,6 +33,12 @@ class Blumquist
|
|
|
30
33
|
@schema, @data, @validate = array
|
|
31
34
|
end
|
|
32
35
|
|
|
36
|
+
def ==(other)
|
|
37
|
+
self.class == other.class && other.marshal_dump == marshal_dump
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
alias_method :eql?, :==
|
|
41
|
+
|
|
33
42
|
private
|
|
34
43
|
|
|
35
44
|
def validate_data
|
|
@@ -51,6 +60,13 @@ class Blumquist
|
|
|
51
60
|
end
|
|
52
61
|
end
|
|
53
62
|
|
|
63
|
+
def resolve_json_pointer(type_def)
|
|
64
|
+
key = type_def[:$ref].split('/').last
|
|
65
|
+
definition = @schema[:definitions][key]
|
|
66
|
+
raise(Errors::InvalidPointer, pointer) unless definition
|
|
67
|
+
type_def.merge(definition)
|
|
68
|
+
end
|
|
69
|
+
|
|
54
70
|
def resolve_json_pointer!(type_def)
|
|
55
71
|
# Should read up on how json pointers are really resolved
|
|
56
72
|
pointer = type_def.delete(:$ref)
|
|
@@ -120,7 +136,10 @@ class Blumquist
|
|
|
120
136
|
definitions: @schema[:definitions]
|
|
121
137
|
)
|
|
122
138
|
data = @data[property]
|
|
123
|
-
blumquistify_object(schema: sub_schema, data: data)
|
|
139
|
+
sub_blumquist = blumquistify_object(schema: sub_schema, data: data)
|
|
140
|
+
# In case of oneOf the definition was already set
|
|
141
|
+
sub_blumquist._type = type_name_for(property) if sub_blumquist && sub_blumquist._type.nil?
|
|
142
|
+
sub_blumquist
|
|
124
143
|
end
|
|
125
144
|
|
|
126
145
|
def blumquistify_object(options)
|
|
@@ -183,11 +202,13 @@ class Blumquist
|
|
|
183
202
|
if one[:type]
|
|
184
203
|
schema = one.merge(definitions: @schema[:definitions])
|
|
185
204
|
else
|
|
186
|
-
schema = resolve_json_pointer
|
|
205
|
+
schema = resolve_json_pointer(one).merge(
|
|
187
206
|
definitions: @schema[:definitions]
|
|
188
207
|
)
|
|
189
208
|
end
|
|
190
|
-
|
|
209
|
+
sub_blumquist = Blumquist.new(data: data, schema: schema, validate: true)
|
|
210
|
+
sub_blumquist._type = type_from_type_def(one)
|
|
211
|
+
return sub_blumquist
|
|
191
212
|
end
|
|
192
213
|
rescue
|
|
193
214
|
# On to the next oneOf
|
|
@@ -213,6 +234,11 @@ class Blumquist
|
|
|
213
234
|
raise(Errors::MissingProperties, sub_schema)
|
|
214
235
|
end
|
|
215
236
|
|
|
237
|
+
def type_from_type_def(type_def)
|
|
238
|
+
return 'object' unless type_def.is_a?(Hash) && type_def.has_key?(:$ref)
|
|
239
|
+
type_def[:$ref].split("/").last
|
|
240
|
+
end
|
|
241
|
+
|
|
216
242
|
def blumquistify_array(property)
|
|
217
243
|
# We only support arrays with one type defined, either through
|
|
218
244
|
#
|
|
@@ -233,6 +259,7 @@ class Blumquist
|
|
|
233
259
|
|
|
234
260
|
# The items of this array are defined by a pointer
|
|
235
261
|
if type_def[:$ref]
|
|
262
|
+
reference_type = type_from_type_def(type_def)
|
|
236
263
|
item_schema = resolve_json_pointer!(type_def)
|
|
237
264
|
|
|
238
265
|
sub_schema = item_schema.merge(
|
|
@@ -241,7 +268,9 @@ class Blumquist
|
|
|
241
268
|
|
|
242
269
|
@data[property] ||= []
|
|
243
270
|
@data[property] = @data[property].map do |item|
|
|
244
|
-
Blumquist.new(schema: sub_schema, data: item, validate: false)
|
|
271
|
+
sub_blumquist = Blumquist.new(schema: sub_schema, data: item, validate: false)
|
|
272
|
+
sub_blumquist._type = reference_type
|
|
273
|
+
sub_blumquist
|
|
245
274
|
end
|
|
246
275
|
|
|
247
276
|
# The items are objects, defined directly or through oneOf
|
|
@@ -267,8 +296,18 @@ class Blumquist
|
|
|
267
296
|
end
|
|
268
297
|
end
|
|
269
298
|
|
|
299
|
+
def type_name_for(property)
|
|
300
|
+
type_from_type_def(@original_properties[property])
|
|
301
|
+
end
|
|
302
|
+
|
|
270
303
|
def all_primitive_types(types)
|
|
271
304
|
return false unless types.is_a?(Array)
|
|
272
305
|
types.all? { |t| primitive_type?(t) }
|
|
273
306
|
end
|
|
307
|
+
|
|
308
|
+
protected
|
|
309
|
+
|
|
310
|
+
def _type=(_type)
|
|
311
|
+
@_type = _type
|
|
312
|
+
end
|
|
274
313
|
end
|
data/lib/blumquist/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: blumquist
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.7.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jannis Hermanns
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2017-02-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -214,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
214
214
|
version: '0'
|
|
215
215
|
requirements: []
|
|
216
216
|
rubyforge_project:
|
|
217
|
-
rubygems_version: 2.
|
|
217
|
+
rubygems_version: 2.5.1
|
|
218
218
|
signing_key:
|
|
219
219
|
specification_version: 4
|
|
220
220
|
summary: Turn some data and a json schema into an immutable object with getters from
|