blumquist 0.4.1 → 0.4.2
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 +42 -15
- data/lib/blumquist/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 29ba6e431b5d179ef49358e17f117d29a1d05615
|
4
|
+
data.tar.gz: 7c91510b9be03ebf29b43206e10dc69b4fb43e5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4c8285345e463ee65590ed825b82cd9c4583828191d80d5541521becc48e2bf3f31b1347cc81ecef0d467d1de5daa9c66d61fb844760173b9d00efa7313071ec
|
7
|
+
data.tar.gz: dd6ac867efcef1d457aa13db890c5d433b28766d68c6d38f1e7ec9924ba0530d89bba7e056f48c3e119f2bbbe37dff6199e54192ee386e7bdc3981970af944d1
|
data/CHANGELOG.md
CHANGED
data/lib/blumquist.rb
CHANGED
@@ -64,7 +64,7 @@ class Blumquist
|
|
64
64
|
|
65
65
|
# Wrap objects recursively
|
66
66
|
if type == 'object' || type_def[:oneOf]
|
67
|
-
|
67
|
+
@data[property] = blumquistify_property(property)
|
68
68
|
|
69
69
|
# Turn array elements into Blumquists
|
70
70
|
elsif type == 'array'
|
@@ -91,19 +91,47 @@ class Blumquist
|
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def
|
94
|
+
def blumquistify_property(property)
|
95
95
|
sub_schema = @schema[:properties][property].merge(
|
96
96
|
definitions: @schema[:definitions]
|
97
97
|
)
|
98
|
+
data = @data[property]
|
99
|
+
blumquistify_object(schema: sub_schema, data: data)
|
100
|
+
end
|
101
|
+
|
102
|
+
def blumquistify_object(options)
|
103
|
+
sub_schema = options[:schema]
|
104
|
+
data = options[:data]
|
98
105
|
|
99
106
|
# If properties are defined directly, like this:
|
100
107
|
#
|
101
108
|
# { "type": "object", "properties": { ... } }
|
102
109
|
#
|
103
110
|
if sub_schema[:properties]
|
104
|
-
|
105
|
-
|
106
|
-
|
111
|
+
if sub_schema[:type].is_a?(String)
|
112
|
+
sub_blumquist = Blumquist.new(schema: sub_schema, data: data, validate: false)
|
113
|
+
return sub_blumquist
|
114
|
+
end
|
115
|
+
|
116
|
+
# If the type is an array, we can't make much of it
|
117
|
+
# because we wouldn't know which type to model as a
|
118
|
+
# blumquist object. Unless, of course, it's one object
|
119
|
+
# and one or more primitives.
|
120
|
+
if sub_schema[:type].is_a?(Array)
|
121
|
+
|
122
|
+
# It's an array but only contains one allowed type,
|
123
|
+
# this is easy.
|
124
|
+
if sub_schema[:type].length == 1
|
125
|
+
sub_schema[:type] = sub_schema[:type].first
|
126
|
+
sub_blumquist = Blumquist.new(schema: sub_schema, data: data, validate: false)
|
127
|
+
return sub_blumquist
|
128
|
+
end
|
129
|
+
|
130
|
+
# We can implement the other cases at a leter point.
|
131
|
+
end
|
132
|
+
|
133
|
+
# We shouldn't arrive here
|
134
|
+
raise(Errors::UnsupportedType, sub_schema)
|
107
135
|
end
|
108
136
|
|
109
137
|
# Properties not defined directly, object must be 'oneOf',
|
@@ -113,7 +141,9 @@ class Blumquist
|
|
113
141
|
#
|
114
142
|
# The json schema v4 draft specifies, that:
|
115
143
|
#
|
116
|
-
# "the oneOf keyword is new in draft v4; its value is an array of
|
144
|
+
# "the oneOf keyword is new in draft v4; its value is an array of
|
145
|
+
# schemas, and an instance is valid if and only if it is valid
|
146
|
+
# against exactly one of these schemas"
|
117
147
|
#
|
118
148
|
# *See: http://json-schema.org/example2.html
|
119
149
|
#
|
@@ -133,8 +163,7 @@ class Blumquist
|
|
133
163
|
definitions: @schema[:definitions]
|
134
164
|
)
|
135
165
|
end
|
136
|
-
|
137
|
-
return
|
166
|
+
return Blumquist.new(data: data, schema: schema, validate: true)
|
138
167
|
end
|
139
168
|
rescue
|
140
169
|
# On to the next oneOf
|
@@ -144,12 +173,10 @@ class Blumquist
|
|
144
173
|
# We found no matching object definition.
|
145
174
|
# If a primitve is part of the `oneOfs,
|
146
175
|
# that's no problem though.
|
147
|
-
return if primitive_allowed
|
176
|
+
return data if primitive_allowed
|
148
177
|
|
149
178
|
# We didn't find a schema in oneOf that matches our data
|
150
|
-
raise(Errors::NoCompatibleOneOf, one_ofs: sub_schema[:oneOf], data:
|
151
|
-
|
152
|
-
return
|
179
|
+
raise(Errors::NoCompatibleOneOf, one_ofs: sub_schema[:oneOf], data: data)
|
153
180
|
end
|
154
181
|
|
155
182
|
# If there's neither `properties` nor `oneOf`, we don't
|
@@ -185,16 +212,16 @@ class Blumquist
|
|
185
212
|
|
186
213
|
@data[property] ||= []
|
187
214
|
@data[property] = @data[property].map do |item|
|
188
|
-
Blumquist.new(schema: sub_schema, data: item, validate:
|
215
|
+
Blumquist.new(schema: sub_schema, data: item, validate: false)
|
189
216
|
end
|
190
|
-
elsif type_def[:type] == 'object'
|
217
|
+
elsif type_def[:type] == 'object' || type_def[:oneOf]
|
191
218
|
sub_schema = type_def.merge(
|
192
219
|
definitions: @schema[:definitions]
|
193
220
|
)
|
194
221
|
|
195
222
|
@data[property] ||= []
|
196
223
|
@data[property] = @data[property].map do |item|
|
197
|
-
|
224
|
+
blumquistify_object(schema: sub_schema, data: item)
|
198
225
|
end
|
199
226
|
|
200
227
|
elsif primitive_type?(type_def[:type])
|
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.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jannis Hermanns
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-01-
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|