lutaml-model 0.3.17 → 0.3.19

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,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d8df6fb14ce661ef1c54be01a1b21c0f5e35937d701846807f036f2b97fdb06d
4
- data.tar.gz: 92fcc49f083dcb5def7133c8e643ec17b88fd216150061c2c76bf40183f550d3
3
+ metadata.gz: fa234d9dee0cbe45d559e6f4141d81ac6eecbb8c931afa77ec82f5d6d9129267
4
+ data.tar.gz: cee349d535ecbc950629123438ca1d3d2161288984806d49857d2dd215e4d1ec
5
5
  SHA512:
6
- metadata.gz: d701f87c169faa98f952f2ce669ae42721462f512b729caab789a120055b90e19507bcad012bb7ecd57b912fc5984b6a70b59f305c58d5b1a0c341a4c035118f
7
- data.tar.gz: d2c411bd20127d21d1c9183cf485945e28288b54e6a45399b9e20c3eb9ca5157fa42b025f924a0a845d905e9db09de0d6ac28a136d8176e39a2d756b19a4729a
6
+ metadata.gz: d5825d1afeb2bef26607379380722a9506795cce5635132355785ddece46086f1a16644b7d7c8960c9f103816e80bdd97d8d01e7f2d1790c3328dfbe1afdab5c
7
+ data.tar.gz: 14bd971607b8420c45bf3cda5badc91ddfeeb82e83918e5eb85f529fe807b7c1c25e02480412db33b91d80cebc4c6f1929e14ca946d9ef2c9ec1ed621239d508
@@ -1,7 +1,7 @@
1
1
  module Lutaml
2
2
  module Model
3
3
  class MappingHash < Hash
4
- attr_accessor :ordered
4
+ attr_accessor :ordered, :node
5
5
 
6
6
  def initialize
7
7
  @ordered = false
@@ -397,7 +397,7 @@ module Lutaml
397
397
  value
398
398
  end
399
399
 
400
- if attr && !rule.content_mapping?
400
+ if attr && !rule.content_mapping? && !rule.custom_methods[:from]
401
401
  value = attr.cast(
402
402
  value,
403
403
  :xml,
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Model
5
- VERSION = "0.3.17"
5
+ VERSION = "0.3.19"
6
6
  end
7
7
  end
@@ -54,7 +54,7 @@ module Lutaml
54
54
  element = element.xml.parent
55
55
  end
56
56
 
57
- add_element(element, ::Nokogiri::XML::Text.new(text.to_s, xml.doc))
57
+ element << text.to_s
58
58
  end
59
59
 
60
60
  def add_namespace_prefix(prefix)
@@ -15,7 +15,7 @@ module Lutaml
15
15
  def to_xml(options = {})
16
16
  builder = Builder::Nokogiri.build(encoding: "UTF-8") do |xml|
17
17
  if root.is_a?(Lutaml::Model::XmlAdapter::NokogiriElement)
18
- root.to_xml(xml)
18
+ root.build_xml(xml)
19
19
  else
20
20
  mapper_class = options[:mapper_class] || @root.class
21
21
  options[:xml_attributes] =
@@ -73,11 +73,9 @@ module Lutaml
73
73
  text = xml_mapping.content_mapping.serialize(element)
74
74
  text = text[curr_index] if text.is_a?(Array)
75
75
 
76
- if element.mixed?
77
- prefixed_xml.text text
78
- else
79
- content << text
80
- end
76
+ next prefixed_xml.text(text) if element.mixed?
77
+
78
+ content << text
81
79
  elsif !value.nil? || element_rule.render_nil?
82
80
  value = value[curr_index] if attribute_def.collection?
83
81
 
@@ -89,6 +87,7 @@ module Lutaml
89
87
  options.merge(
90
88
  attribute: attribute_def,
91
89
  rule: element_rule,
90
+ mapper_class: mapper_class,
92
91
  ),
93
92
  )
94
93
  end
@@ -124,9 +123,11 @@ module Lutaml
124
123
  namespace_prefix: attr.namespace&.prefix,
125
124
  )
126
125
  end
126
+
127
127
  default_namespace = node.namespace&.href if root_node.nil?
128
+
128
129
  super(
129
- node.name,
130
+ node,
130
131
  attributes,
131
132
  parse_all_children(node, root_node: root_node || self, default_namespace: default_namespace),
132
133
  node.text,
@@ -141,7 +142,13 @@ module Lutaml
141
142
  children.empty? && text.length.positive?
142
143
  end
143
144
 
144
- def to_xml(builder = nil)
145
+ def to_xml
146
+ return text if text?
147
+
148
+ build_xml.doc.root.to_xml
149
+ end
150
+
151
+ def build_xml(builder = nil)
145
152
  builder ||= Builder::Nokogiri.build
146
153
 
147
154
  if name == "text"
@@ -149,7 +156,7 @@ module Lutaml
149
156
  else
150
157
  builder.public_send(name, build_attributes(self)) do |xml|
151
158
  children.each do |child|
152
- child.to_xml(xml)
159
+ child.build_xml(xml)
153
160
  end
154
161
  end
155
162
  end
@@ -16,7 +16,7 @@ module Lutaml
16
16
  builder = Builder::Ox.build
17
17
 
18
18
  if @root.is_a?(Lutaml::Model::XmlAdapter::OxElement)
19
- @root.to_xml(builder)
19
+ @root.build_xml(builder)
20
20
  elsif ordered?(@root, options)
21
21
  build_ordered_element(builder, @root, options)
22
22
  else
@@ -117,7 +117,7 @@ module Lutaml
117
117
  end
118
118
 
119
119
  super(
120
- node.name.to_s,
120
+ node,
121
121
  attributes,
122
122
  parse_children(node, root_node: root_node || self),
123
123
  node.text,
@@ -126,7 +126,13 @@ module Lutaml
126
126
  end
127
127
  end
128
128
 
129
- def to_xml(builder = nil)
129
+ def to_xml
130
+ return text if text?
131
+
132
+ build_xml.xml.to_s
133
+ end
134
+
135
+ def build_xml(builder = nil)
130
136
  builder ||= Builder::Ox.build
131
137
  attrs = build_attributes(self)
132
138
 
@@ -134,9 +140,11 @@ module Lutaml
134
140
  builder.add_text(builder, text)
135
141
  else
136
142
  builder.create_and_add_element(name, attributes: attrs) do |el|
137
- children.each { |child| child.to_xml(el) }
143
+ children.each { |child| child.build_xml(el) }
138
144
  end
139
145
  end
146
+
147
+ builder
140
148
  end
141
149
 
142
150
  def namespace_attributes(attributes)
@@ -73,6 +73,7 @@ module Lutaml
73
73
 
74
74
  def parse_element(element, klass = nil, format = nil)
75
75
  result = Lutaml::Model::MappingHash.new
76
+ result.node = element
76
77
  result.item_order = element.order
77
78
 
78
79
  element.children.each_with_object(result) do |child, hash|
@@ -81,11 +82,7 @@ module Lutaml
81
82
  value = if child.text?
82
83
  child.text
83
84
  elsif attr&.raw?
84
- child.children.map do |c|
85
- next c.text if c.text?
86
-
87
- c.to_xml.doc.root.to_xml({})
88
- end.join
85
+ child.children.map(&:to_xml).join
89
86
  else
90
87
  parse_element(child, attr&.type || klass, format)
91
88
  end
@@ -10,8 +10,10 @@ module Lutaml
10
10
  :namespace_prefix,
11
11
  :parent_document
12
12
 
13
+ attr_accessor :adapter_node
14
+
13
15
  def initialize(
14
- name,
16
+ node,
15
17
  attributes = {},
16
18
  children = [],
17
19
  text = nil,
@@ -19,13 +21,22 @@ module Lutaml
19
21
  namespace_prefix: nil,
20
22
  default_namespace: nil
21
23
  )
22
- @name = extract_name(name)
23
- @namespace_prefix = namespace_prefix || extract_namespace_prefix(name)
24
- @attributes = attributes # .map { |k, v| XmlAttribute.new(k, v) }
24
+ @name = extract_name(node)
25
+ @namespace_prefix = namespace_prefix || extract_namespace_prefix(node)
26
+ @attributes = attributes
25
27
  @children = children
26
28
  @text = text
27
29
  @parent_document = parent_document
28
30
  @default_namespace = default_namespace
31
+
32
+ self.adapter_node = node
33
+ end
34
+
35
+ # This tells which attributes to pretty print, So we remove the
36
+ # @parent_document and @adapter_node because they were causing
37
+ # so much repeatative output.
38
+ def pretty_print_instance_variables
39
+ (instance_variables - %i[@adapter_node @parent_document]).sort
29
40
  end
30
41
 
31
42
  def name
@@ -79,20 +90,32 @@ module Lutaml
79
90
  namespaces[nil] || @parent_document&.namespaces&.dig(nil)
80
91
  end
81
92
 
82
- def extract_name(name)
83
- n = name.to_s.split(":")
93
+ def extract_name(node)
94
+ name = name_from_node(node)
95
+
96
+ n = name.split(":")
84
97
  return name if n.length <= 1
85
98
 
86
99
  n[1..].join(":")
87
100
  end
88
101
 
89
- def extract_namespace_prefix(name)
102
+ def extract_namespace_prefix(node)
103
+ name = name_from_node(node)
104
+
90
105
  n = name.to_s.split(":")
91
106
  return if n.length <= 1
92
107
 
93
108
  n.first
94
109
  end
95
110
 
111
+ def name_from_node(node)
112
+ if node.is_a?(String)
113
+ node
114
+ else
115
+ node.name.to_s
116
+ end
117
+ end
118
+
96
119
  def order
97
120
  children.each_with_object([]) do |child, arr|
98
121
  arr << child.unprefixed_name
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.17
4
+ version: 0.3.19
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-29 00:00:00.000000000 Z
11
+ date: 2024-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor