json-schema-serializer 1.7.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/json/schema/serializer.rb +19 -9
- data/lib/json/schema/serializer/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 301107414cad9b1f2e8845d86633a36354e32b9ca7a45bb6611a1b42c4ece2ce
|
4
|
+
data.tar.gz: 7d2c5f7bb39e5d59278073a779abf70979d86870009c6195f764ee37da5c6c5f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4305c335b4a52abd9631bc11fb93b7268b7d0a235939f86be68dff2f3d8569df3b7908a33e4b9b45417c5f7b7b928a28b334d8feaad91e012079c3670ee512bd
|
7
|
+
data.tar.gz: f7a3ac83d661e4ddd546fae884600e61c1dce9119347ed0a93e3ee574c66c38bb4647a40f0c6f84e295804b3c620864e65c549e1b38e5f69429805fcc9a675a8
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 2.0.0
|
4
|
+
|
5
|
+
- fix: Non-primitive (arrays, objects, etc.) "default" schemas and injections have strange results.
|
6
|
+
- If you were using a non-primitive (array, object, etc.) "default" schema with injection, it could be a breaking change!
|
7
|
+
|
3
8
|
## 1.7.0
|
4
9
|
|
5
10
|
- add: `with_context!` api
|
@@ -11,7 +11,7 @@ module JSON
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def serialize(data)
|
14
|
-
Walker.walk(@schema, data, true, @options)
|
14
|
+
Walker.walk(@schema, data, true, false, @options)
|
15
15
|
end
|
16
16
|
|
17
17
|
DataWithContext = Struct.new(:data, :context, keyword_init: true)
|
@@ -34,11 +34,14 @@ module JSON
|
|
34
34
|
class << self
|
35
35
|
TimeWithZone = defined?(ActiveSupport::TimeWithZone) ? ActiveSupport::TimeWithZone : nil
|
36
36
|
|
37
|
-
def walk(schema, obj, required, options)
|
37
|
+
def walk(schema, obj, required, using_default, options)
|
38
38
|
type = try_hash(schema, :type)
|
39
39
|
default = try_hash(schema, :default)
|
40
40
|
format = try_hash(schema, :format)
|
41
|
-
|
41
|
+
if obj.nil?
|
42
|
+
using_default = true
|
43
|
+
obj = default
|
44
|
+
end
|
42
45
|
|
43
46
|
if options[:inject_key]
|
44
47
|
inject_key = try_hash(schema, options[:inject_key])
|
@@ -46,8 +49,12 @@ module JSON
|
|
46
49
|
if obj.instance_of?(JSON::Schema::Serializer::DataWithContext)
|
47
50
|
options = options.merge(inject_context: obj.context)
|
48
51
|
obj = obj.data
|
52
|
+
if obj.nil?
|
53
|
+
using_default = true
|
54
|
+
obj = default
|
55
|
+
end
|
49
56
|
end
|
50
|
-
if injector
|
57
|
+
if injector && !using_default
|
51
58
|
if options[:inject_context]
|
52
59
|
obj =
|
53
60
|
if options[:inject_by_keyword]
|
@@ -65,7 +72,7 @@ module JSON
|
|
65
72
|
end
|
66
73
|
end
|
67
74
|
end
|
68
|
-
type_coerce(schema, detect_type(type, obj), format, obj, required, options)
|
75
|
+
type_coerce(schema, detect_type(type, obj), format, obj, required, using_default, options)
|
69
76
|
end
|
70
77
|
|
71
78
|
def detect_type(type, obj)
|
@@ -148,7 +155,7 @@ module JSON
|
|
148
155
|
end
|
149
156
|
end
|
150
157
|
|
151
|
-
def type_coerce(schema, type, format, obj, required, options)
|
158
|
+
def type_coerce(schema, type, format, obj, required, using_default, options)
|
152
159
|
return nil if !required && obj.nil?
|
153
160
|
|
154
161
|
case type.to_s
|
@@ -217,7 +224,7 @@ module JSON
|
|
217
224
|
return options[:null_through] ? nil : [] if obj.nil? || !obj.respond_to?(:map)
|
218
225
|
return options[:null_through] ? nil : [] if options[:guard_primitive_in_structure] && is_primitive?(obj)
|
219
226
|
|
220
|
-
obj.map { |item| walk(items_schema, item, true, options) }
|
227
|
+
obj.map { |item| walk(items_schema, item, true, using_default, options) }
|
221
228
|
when "object"
|
222
229
|
return nil if obj.nil? && options[:null_through]
|
223
230
|
return options[:null_through] ? nil : {} if options[:guard_primitive_in_structure] && is_primitive?(obj)
|
@@ -231,7 +238,7 @@ module JSON
|
|
231
238
|
properties_schema.map do |name, property_schema|
|
232
239
|
input_key = input_key_transform ? input_key_transform.call(name.to_s) : name
|
233
240
|
output_key = output_key_transform ? output_key_transform.call(name.to_s) : name.to_s
|
234
|
-
[output_key, walk(property_schema, try_hash(obj, input_key), required_schema.include?(name.to_s), options)]
|
241
|
+
[output_key, walk(property_schema, try_hash(obj, input_key), required_schema.include?(name.to_s), using_default, options)]
|
235
242
|
end.to_h
|
236
243
|
if additional_properties_schema
|
237
244
|
not_additional_keys_array = properties_schema.keys.map(&:to_s)
|
@@ -240,7 +247,7 @@ module JSON
|
|
240
247
|
ret.merge(
|
241
248
|
additional_keys.map do |name|
|
242
249
|
output_key = output_key_transform ? output_key_transform.call(name.to_s) : name.to_s
|
243
|
-
[output_key, walk(additional_properties_schema, try_hash(obj, name), false, options)]
|
250
|
+
[output_key, walk(additional_properties_schema, try_hash(obj, name), false, using_default, options)]
|
244
251
|
end.to_h,
|
245
252
|
)
|
246
253
|
else
|
@@ -257,6 +264,9 @@ module JSON
|
|
257
264
|
elsif obj.respond_to?(name)
|
258
265
|
obj.send(name)
|
259
266
|
end
|
267
|
+
rescue
|
268
|
+
p [name, obj]
|
269
|
+
raise
|
260
270
|
end
|
261
271
|
|
262
272
|
def is_primitive?(obj)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-schema-serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Narazaka
|
@@ -195,7 +195,7 @@ metadata:
|
|
195
195
|
homepage_uri: https://github.com/Narazaka/json-schema-serializer
|
196
196
|
source_code_uri: https://github.com/Narazaka/json-schema-serializer.git
|
197
197
|
changelog_uri: https://github.com/Narazaka/json-schema-serializer/blob/master/CHANGELOG.md
|
198
|
-
documentation_uri: https://www.rubydoc.info/gems/json-schema-serializer/
|
198
|
+
documentation_uri: https://www.rubydoc.info/gems/json-schema-serializer/2.0.0
|
199
199
|
post_install_message:
|
200
200
|
rdoc_options: []
|
201
201
|
require_paths:
|