lutaml-model 0.3.14 → 0.3.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +1 -1
- data/lib/lutaml/model/attribute.rb +4 -0
- data/lib/lutaml/model/mapping_rule.rb +6 -0
- data/lib/lutaml/model/serialize.rb +53 -27
- data/lib/lutaml/model/version.rb +1 -1
- data/lib/lutaml/model/xml_adapter/xml_document.rb +19 -1
- data/lib/lutaml/model/xml_mapping.rb +6 -0
- data/lib/lutaml/model/xml_mapping_rule.rb +2 -0
- 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: 59ac2ffbc292a5e34dbbbf79441a8220a48954ba5acd21d2780235281bfbbee2
|
4
|
+
data.tar.gz: 253892694acb1359120e6401d83e05bc2daa2f371b69f667210c048c08f2336c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 920de33ce2cc20336fa2ed87c3a2d5743f4016c8a400a881c91e4eafee0452e3fdc110429f3e71b7216f84694e546b26848c50323bc25397d32c8a1aa2e6901e
|
7
|
+
data.tar.gz: 3685a35624c0c355ee457241a308bf9e46c37c9a7b14994948a897c9210a13229c2a2832d8f595b2d83a4bf96660f1ea2b9843c83ea8ba9a73978ef67e864818
|
data/.rubocop_todo.yml
CHANGED
@@ -4,6 +4,8 @@ module Lutaml
|
|
4
4
|
attr_reader :name,
|
5
5
|
:to,
|
6
6
|
:render_nil,
|
7
|
+
:render_default,
|
8
|
+
:attribute,
|
7
9
|
:custom_methods,
|
8
10
|
:delegate
|
9
11
|
|
@@ -11,6 +13,7 @@ module Lutaml
|
|
11
13
|
name,
|
12
14
|
to:,
|
13
15
|
render_nil: false,
|
16
|
+
render_default: false,
|
14
17
|
with: {},
|
15
18
|
attribute: false,
|
16
19
|
delegate: nil
|
@@ -18,6 +21,7 @@ module Lutaml
|
|
18
21
|
@name = name
|
19
22
|
@to = to
|
20
23
|
@render_nil = render_nil
|
24
|
+
@render_default = render_default
|
21
25
|
@custom_methods = with
|
22
26
|
@attribute = attribute
|
23
27
|
@delegate = delegate
|
@@ -25,6 +29,8 @@ module Lutaml
|
|
25
29
|
|
26
30
|
alias from name
|
27
31
|
alias render_nil? render_nil
|
32
|
+
alias render_default? render_default
|
33
|
+
alias attribute? attribute
|
28
34
|
|
29
35
|
def serialize_attribute(model, element, doc)
|
30
36
|
if custom_methods[:to]
|
@@ -86,6 +86,7 @@ module Lutaml
|
|
86
86
|
end
|
87
87
|
|
88
88
|
define_method(:"#{name}=") do |value|
|
89
|
+
value_set_for(name)
|
89
90
|
instance_variable_set(:"@#{name}", attr.cast_value(value))
|
90
91
|
end
|
91
92
|
end
|
@@ -304,33 +305,7 @@ module Lutaml
|
|
304
305
|
return instance if Utils.blank?(doc)
|
305
306
|
return apply_xml_mapping(doc, instance, options) if format == :xml
|
306
307
|
|
307
|
-
|
308
|
-
mappings.each do |rule|
|
309
|
-
raise "Attribute '#{rule.to}' not found in #{self}" unless valid_rule?(rule)
|
310
|
-
|
311
|
-
attr = attribute_for_rule(rule)
|
312
|
-
|
313
|
-
value = if doc.key?(rule.name) || doc.key?(rule.name.to_sym)
|
314
|
-
doc[rule.name] || doc[rule.name.to_sym]
|
315
|
-
else
|
316
|
-
attr.default
|
317
|
-
end
|
318
|
-
|
319
|
-
if rule.custom_methods[:from]
|
320
|
-
if Utils.present?(value)
|
321
|
-
value = new.send(rule.custom_methods[:from], instance, value)
|
322
|
-
end
|
323
|
-
|
324
|
-
next
|
325
|
-
end
|
326
|
-
|
327
|
-
value = apply_child_mappings(value, rule.child_mappings)
|
328
|
-
value = attr.cast(value, format)
|
329
|
-
|
330
|
-
rule.deserialize(instance, value, attributes, self)
|
331
|
-
end
|
332
|
-
|
333
|
-
instance
|
308
|
+
apply_hash_mapping(doc, instance, format, options)
|
334
309
|
end
|
335
310
|
|
336
311
|
def apply_xml_mapping(doc, instance, options = {})
|
@@ -357,6 +332,8 @@ module Lutaml
|
|
357
332
|
)
|
358
333
|
end
|
359
334
|
|
335
|
+
defaults_used = []
|
336
|
+
|
360
337
|
mappings.each do |rule|
|
361
338
|
raise "Attribute '#{rule.to}' not found in #{self}" unless valid_rule?(rule)
|
362
339
|
|
@@ -365,6 +342,7 @@ module Lutaml
|
|
365
342
|
elsif doc.key_exist?(rule.namespaced_name)
|
366
343
|
doc.fetch(rule.namespaced_name)
|
367
344
|
else
|
345
|
+
defaults_used << rule.to
|
368
346
|
rule.to_value_for(instance)
|
369
347
|
end
|
370
348
|
|
@@ -372,6 +350,40 @@ module Lutaml
|
|
372
350
|
rule.deserialize(instance, value, attributes, self)
|
373
351
|
end
|
374
352
|
|
353
|
+
defaults_used.each do |attribute_name|
|
354
|
+
instance.using_default_for(attribute_name) if instance.respond_to?(:using_default_for)
|
355
|
+
end
|
356
|
+
|
357
|
+
instance
|
358
|
+
end
|
359
|
+
|
360
|
+
def apply_hash_mapping(doc, instance, format, _options = {})
|
361
|
+
mappings = mappings_for(format).mappings
|
362
|
+
mappings.each do |rule|
|
363
|
+
raise "Attribute '#{rule.to}' not found in #{self}" unless valid_rule?(rule)
|
364
|
+
|
365
|
+
attr = attribute_for_rule(rule)
|
366
|
+
|
367
|
+
value = if doc.key?(rule.name) || doc.key?(rule.name.to_sym)
|
368
|
+
doc[rule.name] || doc[rule.name.to_sym]
|
369
|
+
else
|
370
|
+
attr.default
|
371
|
+
end
|
372
|
+
|
373
|
+
if rule.custom_methods[:from]
|
374
|
+
if Utils.present?(value)
|
375
|
+
value = new.send(rule.custom_methods[:from], instance, value)
|
376
|
+
end
|
377
|
+
|
378
|
+
next
|
379
|
+
end
|
380
|
+
|
381
|
+
value = apply_child_mappings(value, rule.child_mappings)
|
382
|
+
value = attr.cast(value, format)
|
383
|
+
|
384
|
+
rule.deserialize(instance, value, attributes, self)
|
385
|
+
end
|
386
|
+
|
375
387
|
instance
|
376
388
|
end
|
377
389
|
|
@@ -433,6 +445,7 @@ module Lutaml
|
|
433
445
|
|
434
446
|
def initialize(attrs = {})
|
435
447
|
@validate_on_set = attrs.delete(:validate_on_set) || false
|
448
|
+
@using_default ||= {}
|
436
449
|
|
437
450
|
return unless self.class.attributes
|
438
451
|
|
@@ -449,6 +462,7 @@ module Lutaml
|
|
449
462
|
value = if attrs.key?(name) || attrs.key?(name.to_s)
|
450
463
|
self.class.attr_value(attrs, name, attr)
|
451
464
|
else
|
465
|
+
using_default_for(name)
|
452
466
|
attr.default
|
453
467
|
end
|
454
468
|
|
@@ -461,6 +475,18 @@ module Lutaml
|
|
461
475
|
end
|
462
476
|
end
|
463
477
|
|
478
|
+
def using_default_for(attribute_name)
|
479
|
+
@using_default[attribute_name] = true
|
480
|
+
end
|
481
|
+
|
482
|
+
def value_set_for(attribute_name)
|
483
|
+
@using_default[attribute_name] = false
|
484
|
+
end
|
485
|
+
|
486
|
+
def using_default?(attribute_name)
|
487
|
+
@using_default[attribute_name]
|
488
|
+
end
|
489
|
+
|
464
490
|
def method_missing(method_name, *args)
|
465
491
|
if method_name.to_s.end_with?("=") && self.class.attributes.key?(method_name.to_s.chomp("=").to_sym)
|
466
492
|
define_singleton_method(method_name) do |value|
|
data/lib/lutaml/model/version.rb
CHANGED
@@ -143,6 +143,8 @@ module Lutaml
|
|
143
143
|
return
|
144
144
|
end
|
145
145
|
|
146
|
+
return if !render_element?(rule, element, value)
|
147
|
+
|
146
148
|
if value && (attribute&.type&.<= Lutaml::Model::Serialize)
|
147
149
|
handle_nested_elements(
|
148
150
|
xml,
|
@@ -254,6 +256,20 @@ module Lutaml
|
|
254
256
|
rule.nil? || !rule.namespace_set? || !rule.namespace.nil?
|
255
257
|
end
|
256
258
|
|
259
|
+
def render_element?(rule, element, value)
|
260
|
+
render_default?(rule, element) && render_value?(rule, value)
|
261
|
+
end
|
262
|
+
|
263
|
+
def render_value?(rule, value)
|
264
|
+
rule.attribute? || rule.render_nil? || !value.nil?
|
265
|
+
end
|
266
|
+
|
267
|
+
def render_default?(rule, element)
|
268
|
+
!element.respond_to?(:using_default?) ||
|
269
|
+
rule.render_default? ||
|
270
|
+
!element.using_default?(rule.to)
|
271
|
+
end
|
272
|
+
|
257
273
|
def build_namespace_attributes(klass, processed = {}, options = {})
|
258
274
|
xml_mappings = klass.mappings_for(:xml)
|
259
275
|
attributes = klass.attributes
|
@@ -315,7 +331,9 @@ module Lutaml
|
|
315
331
|
hash["xmlns:#{mapping_rule.prefix}"] = mapping_rule.namespace
|
316
332
|
end
|
317
333
|
|
318
|
-
|
334
|
+
if render_element?(mapping_rule, element, mapping_rule.to_value_for(element))
|
335
|
+
hash[mapping_rule.prefixed_name] = mapping_rule.to_value_for(element)
|
336
|
+
end
|
319
337
|
end
|
320
338
|
|
321
339
|
xml_mapping.elements.each_with_object(attrs) do |mapping_rule, hash|
|
@@ -43,6 +43,7 @@ module Lutaml
|
|
43
43
|
name,
|
44
44
|
to: nil,
|
45
45
|
render_nil: false,
|
46
|
+
render_default: false,
|
46
47
|
with: {},
|
47
48
|
delegate: nil,
|
48
49
|
namespace: (namespace_set = false
|
@@ -56,6 +57,7 @@ module Lutaml
|
|
56
57
|
name,
|
57
58
|
to: to,
|
58
59
|
render_nil: render_nil,
|
60
|
+
render_default: render_default,
|
59
61
|
with: with,
|
60
62
|
delegate: delegate,
|
61
63
|
namespace: namespace,
|
@@ -71,6 +73,7 @@ module Lutaml
|
|
71
73
|
name,
|
72
74
|
to: nil,
|
73
75
|
render_nil: false,
|
76
|
+
render_default: false,
|
74
77
|
with: {},
|
75
78
|
delegate: nil,
|
76
79
|
namespace: (namespace_set = false
|
@@ -84,6 +87,7 @@ module Lutaml
|
|
84
87
|
name,
|
85
88
|
to: to,
|
86
89
|
render_nil: render_nil,
|
90
|
+
render_default: render_default,
|
87
91
|
with: with,
|
88
92
|
delegate: delegate,
|
89
93
|
namespace: namespace,
|
@@ -101,6 +105,7 @@ module Lutaml
|
|
101
105
|
def map_content(
|
102
106
|
to: nil,
|
103
107
|
render_nil: false,
|
108
|
+
render_default: false,
|
104
109
|
with: {},
|
105
110
|
delegate: nil,
|
106
111
|
mixed: false
|
@@ -111,6 +116,7 @@ module Lutaml
|
|
111
116
|
nil,
|
112
117
|
to: to,
|
113
118
|
render_nil: render_nil,
|
119
|
+
render_default: render_default,
|
114
120
|
with: with,
|
115
121
|
delegate: delegate,
|
116
122
|
mixed_content: mixed,
|
@@ -9,6 +9,7 @@ module Lutaml
|
|
9
9
|
name,
|
10
10
|
to:,
|
11
11
|
render_nil: false,
|
12
|
+
render_default: false,
|
12
13
|
with: {},
|
13
14
|
delegate: nil,
|
14
15
|
namespace: nil,
|
@@ -23,6 +24,7 @@ module Lutaml
|
|
23
24
|
name,
|
24
25
|
to: to,
|
25
26
|
render_nil: render_nil,
|
27
|
+
render_default: render_default,
|
26
28
|
with: with,
|
27
29
|
delegate: delegate,
|
28
30
|
attribute: attribute,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lutaml-model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.15
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-10-
|
11
|
+
date: 2024-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|