json_schema_tools 0.6.2 → 0.6.3
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
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDg0NTQ4YzQwN2QzYjhhYTMzMDM2NmJlMDgzOGM2NDU0MWExOTdlMQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmQ5MTNhYTUwNWY2NWQ5Zjc3ODk1MTQzMjcwNDk0Yzg3NmM0NzZkMw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YzhlNWJhNTJmYTQyMjc5YzQwZWQxMzkzMDQ4MThhNGI0OTNhYmNiNTI0NjQz
|
10
|
+
ZDU0MjQ3YTExMDlmMGYzZmQzZGNiMmQwNzUzZDlhYjg3MDE5NmI1NmQ1Yjg4
|
11
|
+
NDY3M2NhNjQ1MjMzNjM3NmRkMmMwMzUwN2VlNzI0MmQxYjE2YWI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OGQ4MTBhYTMzZWI0YTRjYzI5ZWRlOWRiYzBlMWM5ZjYwYzVlM2UyNTVjZTlj
|
14
|
+
ZjM1YTZmN2I3MjA3OTY0MDcxM2YwNDMyZTVkNzI4MWM4NGU0MDM0N2QwNzYw
|
15
|
+
NjQ1MDgwYjkzM2UxYjczNTU5Mzk3MWI2Njk0NTYzNzIxNjM4MjY=
|
data/CHANGELOG.md
CHANGED
@@ -2,7 +2,10 @@
|
|
2
2
|
|
3
3
|
##2015-04
|
4
4
|
|
5
|
-
|
5
|
+
Thanks @VidurMalik
|
6
|
+
* use schema definition in nested items array
|
7
|
+
* exclude keys for nil(blank) nested objects
|
8
|
+
* allow arbitrary key/values for a nested object without properties definition in the schema
|
6
9
|
|
7
10
|
##2015-03
|
8
11
|
|
@@ -83,7 +83,7 @@ module SchemaTools
|
|
83
83
|
data[field] = parse_list(obj, field, prop, opts)
|
84
84
|
elsif prop['type'] == 'object' # a singular related object
|
85
85
|
opts.delete(:class_name)
|
86
|
-
data[field] = parse_object(obj, field, prop, opts)
|
86
|
+
data[field] = parse_object(obj, field, prop, opts) if parse_object?(obj, field)
|
87
87
|
else # a simple field is only added if the object knows it
|
88
88
|
next unless obj.respond_to?(field)
|
89
89
|
raw_val = obj.send(field)
|
@@ -176,11 +176,8 @@ module SchemaTools
|
|
176
176
|
# @param [Hash] opts to_schema options
|
177
177
|
# @return [Array<Hash{String=>String}>]
|
178
178
|
def parse_object(obj, field, prop, opts)
|
179
|
-
return if !obj.respond_to?( field )
|
180
179
|
rel_obj = obj.send( field )
|
181
|
-
|
182
|
-
|
183
|
-
res = if prop['properties']
|
180
|
+
res = if prop['properties'].present?
|
184
181
|
opts[:schema] = prop
|
185
182
|
from_schema(rel_obj, opts)
|
186
183
|
elsif prop['oneOf']
|
@@ -188,10 +185,22 @@ module SchemaTools
|
|
188
185
|
# Simpler than detecting the object type or $ref to use inside the
|
189
186
|
# oneOf array
|
190
187
|
from_schema(rel_obj, opts)
|
188
|
+
elsif prop['properties'].blank?
|
189
|
+
rel_obj
|
191
190
|
end
|
192
191
|
res
|
193
192
|
end
|
194
193
|
|
194
|
+
private
|
195
|
+
|
196
|
+
def parse_object?(obj, field)
|
197
|
+
if obj.respond_to?( field )
|
198
|
+
rel_obj = obj.send( field )
|
199
|
+
rel_obj.present?
|
200
|
+
else
|
201
|
+
false
|
202
|
+
end
|
203
|
+
end
|
195
204
|
end
|
196
205
|
end
|
197
206
|
end
|
data/lib/schema_tools/version.rb
CHANGED
@@ -33,6 +33,10 @@ class AnotherAddress
|
|
33
33
|
has_schema_attrs 'address'
|
34
34
|
end
|
35
35
|
|
36
|
+
class NestedObjectNoProperties
|
37
|
+
include SchemaTools::Modules::Attributes
|
38
|
+
has_schema_attrs 'nested_object_no_properties'
|
39
|
+
end
|
36
40
|
|
37
41
|
describe SchemaTools::Hash do
|
38
42
|
|
@@ -113,9 +117,9 @@ describe SchemaTools::Hash do
|
|
113
117
|
hash['addresses'].should == []
|
114
118
|
end
|
115
119
|
|
116
|
-
it '
|
120
|
+
it 'does not have the key if nested object is missing' do
|
117
121
|
hash = SchemaTools::Hash.from_schema(client)
|
118
|
-
hash
|
122
|
+
hash.has_key?('work_address').should == false
|
119
123
|
end
|
120
124
|
|
121
125
|
it 'has nested array values' do
|
@@ -170,9 +174,9 @@ describe SchemaTools::Hash do
|
|
170
174
|
hash['addresses'].should == []
|
171
175
|
end
|
172
176
|
|
173
|
-
it '
|
177
|
+
it 'does not have the key if nested object is missing' do
|
174
178
|
hash = SchemaTools::Hash.from_schema(client)
|
175
|
-
hash
|
179
|
+
hash.has_key?('work_address').should == false
|
176
180
|
end
|
177
181
|
|
178
182
|
it 'has nested array values' do
|
@@ -266,7 +270,16 @@ describe SchemaTools::Hash do
|
|
266
270
|
hash = SchemaTools::Hash.from_schema(client, base_url: 'http://json-hell.com', links: true)
|
267
271
|
hash['_links'].last['href'].should == 'http://json-hell.com/clients/123/Peter'
|
268
272
|
end
|
273
|
+
end
|
269
274
|
|
275
|
+
context 'with a nested object that does not have properties' do
|
276
|
+
let(:input_hash) { { foo: 'bar', baz: 'boom' } }
|
277
|
+
let(:nested_object_no_properties) { NestedObjectNoProperties.from_hash(user_data: input_hash) }
|
278
|
+
|
279
|
+
it 'should output the input hash' do
|
280
|
+
hash = SchemaTools::Hash.from_schema(nested_object_no_properties)
|
281
|
+
hash['user_data'].should == input_hash
|
282
|
+
end
|
270
283
|
end
|
271
284
|
end
|
272
285
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_schema_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Georg Leciejewski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -106,6 +106,7 @@ files:
|
|
106
106
|
- spec/fixtures/schemata/includes_basic_definitions.json
|
107
107
|
- spec/fixtures/schemata/includes_deep_nested_refs.json
|
108
108
|
- spec/fixtures/schemata/lead.json
|
109
|
+
- spec/fixtures/schemata/nested_object_no_properties.json
|
109
110
|
- spec/fixtures/schemata/nested_schemas/person.json
|
110
111
|
- spec/fixtures/schemata/one_of_definition.json
|
111
112
|
- spec/fixtures/schemata/page.json
|