lutaml 0.9.42 → 0.9.43

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: 85b66d72112efe826e3e86d693b6710915c20df890036b2ce3085054a5227512
4
- data.tar.gz: 4f255d33142b96347c7f8efcde22661ae8eff33a7bba7caecbff17f1a7f0362e
3
+ metadata.gz: 237ccb049aa43625e1ae6358777dbe0eace1ad3cb1ff787ba5b5f055746d8d96
4
+ data.tar.gz: 9158115470db6f478a7dd6a30e738ec388d4efa09b33531d3ed8093e93a024fd
5
5
  SHA512:
6
- metadata.gz: c4d00853656f53a73d011ace7843d5443a6afd4e3447bdd8f9acfeb1d1a8f1dc6b9e40bfc94f8bdb441dc60ea7495b72d0a48ef203e292923b72c6be028fa4c1
7
- data.tar.gz: 9426ded45a58f49d6b3de1b2279ca2bb64327d52dcb2d101314ad734caf70219421ebf00e0c23f59c662e0bbccc436ce47fba04bff666efa6899b0fecdb5f541
6
+ metadata.gz: 06a354ff8cf4d011b01b32df444c988a814c26cc6811dabccf394f5d05d1911a8c8e2cf9b31092c297ee9d9c1d2e602e8a5d4551dd8477752772b199a23f1d2c
7
+ data.tar.gz: 6fd0577fc2898d1ae1c2aba4fa6da813bf090799263645f45d6be0016b12e1ec7ad68a7674ebd5668a62ba128c7045d33338a862f3a4ff435099fdb15a090e74
@@ -227,7 +227,7 @@ module Lutaml
227
227
  end
228
228
 
229
229
  def get_uml_general(general_id) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
230
- general_node = get_general_node(general_id)
230
+ general_node = find_packaged_element_by_id(general_id)
231
231
  return [] unless general_node
232
232
 
233
233
  general_node_attrs = get_uml_general_attributes(general_node)
@@ -238,10 +238,10 @@ module Lutaml
238
238
  gen.general_id = general_id
239
239
  gen.general_name = general_node.name
240
240
  gen.general_attributes = general_node_attrs
241
- gen.general_upper_klass = general_upper_klass
241
+ gen.general_upper_klass = general_upper_klass&.name
242
242
  gen.name = general_node.name
243
243
  gen.type = general_node.type
244
- gen.definition = lookup_general_documentation(general_id)
244
+ gen.definition = lookup_element_prop_documentation(general_id)
245
245
  gen.stereotype = doc_node_attribute_value(general_id, "stereotype")
246
246
 
247
247
  if next_general_node_id
@@ -1,3 +1,3 @@
1
1
  module Lutaml
2
- VERSION = "0.9.42".freeze
2
+ VERSION = "0.9.43".freeze
3
3
  end
@@ -41,7 +41,8 @@ module Lutaml
41
41
  # @return name of the upper packaged element
42
42
  def upper_packaged_element
43
43
  if @options[:with_gen]
44
- find_upper_level_packaged_element(@model.id)
44
+ e = find_upper_level_packaged_element(@model.id)
45
+ e&.name
45
46
  end
46
47
  end
47
48
 
@@ -38,16 +38,16 @@ module Lutaml
38
38
  !!@gen[:general]
39
39
  end
40
40
 
41
- def attributes # rubocop:disable Metrics/MethodLength
41
+ def attributes # rubocop:disable Metrics/MethodLength,Metrics/AbcSize,Metrics/CyclomaticComplexity
42
42
  attrs = @gen[:general_attributes]
43
43
  attrs.each do |i|
44
44
  name_ns = case i[:type_ns]
45
45
  when "core", "gml"
46
- upper_klass
46
+ upper_klass&.name
47
47
  else
48
48
  i[:type_ns]
49
49
  end
50
- name_ns = upper_klass if name_ns.nil?
50
+ name_ns = upper_klass&.name if name_ns.nil?
51
51
 
52
52
  i[:name_ns] = name_ns
53
53
  i[:name] = "" if i[:name].nil?
@@ -51,7 +51,17 @@ module Lutaml
51
51
  end
52
52
 
53
53
  def absolute_path
54
- "#{@options[:absolute_path]}::#{name}"
54
+ absolute_path_arr = [@model.name]
55
+ e = find_upper_level_packaged_element(@model.id)
56
+ absolute_path_arr << e.name if e
57
+
58
+ while e
59
+ e = find_upper_level_packaged_element(e.id)
60
+ absolute_path_arr << e.name if e
61
+ end
62
+
63
+ absolute_path_arr << "::#{@xmi_root_model.model.name}"
64
+ absolute_path_arr.reverse.join("::")
55
65
  end
56
66
 
57
67
  def package
@@ -170,7 +180,7 @@ module Lutaml
170
180
 
171
181
  def generalization
172
182
  if @options[:with_gen] && @model.type?("uml:Class")
173
- generalization = serialize_generalization(@model)
183
+ generalization = serialize_generalization(@model, @options)
174
184
  return {} if generalization.nil?
175
185
 
176
186
  ::Lutaml::XMI::GeneralizationDrop.new(
@@ -181,7 +191,8 @@ module Lutaml
181
191
 
182
192
  def upper_packaged_element
183
193
  if @options[:with_gen]
184
- find_upper_level_packaged_element(@model.id)
194
+ e = find_upper_level_packaged_element(@model.id)
195
+ e&.name
185
196
  end
186
197
  end
187
198
 
@@ -40,7 +40,17 @@ module Lutaml
40
40
  end
41
41
 
42
42
  def absolute_path
43
- "#{@options[:absolute_path]}::#{name}"
43
+ absolute_path_arr = [@model.name]
44
+ e = find_upper_level_packaged_element(@model.id)
45
+ absolute_path_arr << e.name if e
46
+
47
+ while e
48
+ e = find_upper_level_packaged_element(e.id)
49
+ absolute_path_arr << e.name if e
50
+ end
51
+
52
+ absolute_path_arr << "::#{@xmi_root_model.model.name}"
53
+ absolute_path_arr.reverse.join("::")
44
54
  end
45
55
 
46
56
  def klasses # rubocop:disable Metrics/MethodLength
@@ -135,14 +135,12 @@ module Lutaml
135
135
  end
136
136
 
137
137
  klasses.map do |klass|
138
- h = build_klass_hash(
138
+ build_klass_hash(
139
139
  klass, model,
140
- with_gen: with_gen
140
+ with_gen: with_gen,
141
+ with_absolute_path: with_absolute_path,
142
+ absolute_path: absolute_path
141
143
  )
142
-
143
- h[:absolute_path] = absolute_path if with_absolute_path
144
-
145
- h
146
144
  end
147
145
  end
148
146
 
@@ -176,12 +174,11 @@ module Lutaml
176
174
  if klass.generalization && !klass.generalization.empty?
177
175
  klass_hash[:association_generalization] = []
178
176
  klass.generalization.each do |gen|
179
- association_generalization_hash = {}
180
- association_generalization_hash[:id] = gen.id
181
- association_generalization_hash[:type] = gen.type
182
- association_generalization_hash[:general] = gen.general
183
- klass_hash[:association_generalization] <<
184
- association_generalization_hash
177
+ klass_hash[:association_generalization] << {
178
+ id: gen.id,
179
+ type: gen.type,
180
+ general: gen.general,
181
+ }
185
182
  end
186
183
  end
187
184
 
@@ -190,12 +187,14 @@ module Lutaml
190
187
 
191
188
  # @param klass [Lutaml::Model::Serializable]
192
189
  # # @return [Hash]
193
- def serialize_generalization(klass)
194
- general_hash, next_general_node_id = get_top_level_general_hash(klass)
190
+ def serialize_generalization(klass, options = {})
191
+ general_hash, next_general_node_id = get_top_level_general_hash(
192
+ klass, options
193
+ )
195
194
  return general_hash unless next_general_node_id
196
195
 
197
196
  general_hash[:general] = serialize_generalization_attributes(
198
- next_general_node_id,
197
+ next_general_node_id, options
199
198
  )
200
199
 
201
200
  general_hash
@@ -203,59 +202,38 @@ module Lutaml
203
202
 
204
203
  # @param klass [Lutaml::Model::Serializable]
205
204
  # @return [Array<Hash>]
206
- def get_top_level_general_hash(klass) # rubocop:disable Metrics/AbcSize
207
- general_hash, next_general_node_id = get_general_hash(klass.id)
205
+ def get_top_level_general_hash(klass, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
206
+ general_hash, next_general_node_id = get_general_hash(
207
+ klass.id, options
208
+ )
208
209
  general_hash[:name] = klass.name
209
210
  general_hash[:type] = klass.type
210
- general_hash[:definition] = lookup_general_documentation(klass.id)
211
+ general_hash[:definition] =
212
+ lookup_element_prop_documentation(klass.id)
211
213
  general_hash[:stereotype] = doc_node_attribute_value(
212
214
  klass.id, "stereotype"
213
215
  )
214
216
 
215
- # update_inherited_attributes(general_hash)
216
- # update_gen_attributes(general_hash)
217
-
218
217
  [general_hash, next_general_node_id]
219
218
  end
220
219
 
221
- def lookup_general_documentation(klass_id)
222
- # lookup_attribute_documentation(klass_id) ||
223
- # lookup_element_prop_documentation(klass_id)
224
-
225
- lookup_element_prop_documentation(klass_id)
226
- end
227
-
228
- def update_gen_attributes(general_hash)
229
- general_hash[:gen_attributes] = serialize_gen_attributes
230
- end
231
-
232
- def update_inherited_attributes(general_hash)
233
- general_hash[:gml_attributes] = serialize_gml_attributes
234
- general_hash[:core_attributes] = serialize_core_attributes
235
- end
236
-
237
220
  # @param xmi_id [String]
238
221
  # @param model [Lutaml::Model::Serializable]
239
222
  # @return [Array<Hash>]
240
223
  # @note get generalization node and its owned attributes
241
- def serialize_generalization_attributes(general_id)
242
- general_hash, next_general_node_id = get_general_hash(general_id)
224
+ def serialize_generalization_attributes(general_id, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
225
+ general_hash, next_general_node_id = get_general_hash(general_id,
226
+ options)
243
227
 
244
228
  if next_general_node_id
245
229
  general_hash[:general] = serialize_generalization_attributes(
246
- next_general_node_id,
230
+ next_general_node_id, options
247
231
  )
248
232
  end
249
233
 
250
234
  general_hash
251
235
  end
252
236
 
253
- # @param xmi_id [String]
254
- # @return [Lutaml::Model::Serializable]
255
- def get_general_node(xmi_id)
256
- find_packaged_element_by_id(xmi_id)
257
- end
258
-
259
237
  # @param general_node [Lutaml::Model::Serializable]
260
238
  # @return [Hash]
261
239
  def get_general_attributes(general_node)
@@ -270,8 +248,8 @@ module Lutaml
270
248
 
271
249
  # @param general_id [String]
272
250
  # @return [Array<Hash>]
273
- def get_general_hash(general_id)
274
- general_node = get_general_node(general_id)
251
+ def get_general_hash(general_id, options = {}) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
252
+ general_node = find_packaged_element_by_id(general_id)
275
253
  return [] unless general_node
276
254
 
277
255
  general_node_attrs = get_general_attributes(general_node)
@@ -283,7 +261,8 @@ module Lutaml
283
261
  general_id: general_id,
284
262
  general_name: general_node.name,
285
263
  general_attributes: general_node_attrs,
286
- general_upper_klass: general_upper_klass,
264
+ general_upper_klass: ::Lutaml::XMI::PackageDrop
265
+ .new(general_upper_klass, nil, options),
287
266
  general: {},
288
267
  },
289
268
  next_general_node_id,
@@ -350,7 +329,7 @@ module Lutaml
350
329
 
351
330
  all_packaged_elements.each do |e|
352
331
  e.packaged_element.each do |pe|
353
- @upper_level_cache[pe.id] = e.name
332
+ @upper_level_cache[pe.id] = e
354
333
  end
355
334
  end
356
335
  end
@@ -447,25 +426,25 @@ module Lutaml
447
426
  # @return [Lutaml::Model::Serializable]
448
427
  def select_dependencies_by_client(client_id)
449
428
  all_packaged_elements.select do |e|
450
- e.client == client_id &&
451
- e.type?("uml:Dependency")
429
+ e.client == client_id && e.type?("uml:Dependency")
452
430
  end
453
431
  end
454
432
 
455
433
  # @param name [String]
456
434
  # @return [Lutaml::Model::Serializable]
457
435
  def find_packaged_element_by_name(name)
458
- all_packaged_elements.find do |e|
459
- e.name == name
460
- end
436
+ all_packaged_elements.find { |e| e.name == name }
461
437
  end
462
438
 
463
439
  # @param package [Lutaml::Model::Serializable]
464
440
  # @return [Array<Hash>]
465
441
  # @note xpath ./packagedElement[@xmi:type="uml:Enumeration"]
466
- def serialize_model_enums(package)
467
- package.packaged_element.select { |e| e.type?("uml:Enumeration") }
468
- .map do |enum|
442
+ def serialize_model_enums(package) # rubocop:disable Metrics/MethodLength
443
+ enums = package.packaged_element.select do |e|
444
+ e.type?("uml:Enumeration")
445
+ end
446
+
447
+ enums.map do |enum|
469
448
  {
470
449
  xmi_id: enum.id,
471
450
  name: enum.name,
@@ -501,8 +480,9 @@ module Lutaml
501
480
  # @note xpath ./packagedElement[@xmi:type="uml:DataType"]
502
481
  def serialize_model_data_types(model) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
503
482
  all_data_type_elements = []
504
- select_all_packaged_elements(all_data_type_elements, model,
505
- "uml:DataType")
483
+ select_all_packaged_elements(
484
+ all_data_type_elements, model, "uml:DataType"
485
+ )
506
486
  all_data_type_elements.map do |klass|
507
487
  {
508
488
  xmi_id: klass.id,
@@ -840,8 +820,11 @@ module Lutaml
840
820
  # @return [Array<Hash>]
841
821
  # @note xpath .//ownedAttribute[@xmi:type="uml:Property"]
842
822
  def serialize_class_attributes(klass, with_assoc: false) # rubocop:disable Metrics/AbcSize,Metrics/CyclomaticComplexity,Metrics/MethodLength
843
- klass.owned_attribute.select { |attr| attr.type?("uml:Property") }
844
- .map do |oa|
823
+ owned_attributes = klass.owned_attribute.select do |attr|
824
+ attr.type?("uml:Property")
825
+ end
826
+
827
+ owned_attributes.map do |oa|
845
828
  if with_assoc || oa.association.nil?
846
829
  attrs = build_class_attributes(oa)
847
830
 
@@ -861,44 +844,6 @@ module Lutaml
861
844
  connector&.documentation&.value
862
845
  end
863
846
 
864
- # @return [Array<Hash>]
865
- def serialize_gml_attributes
866
- element = find_packaged_element_by_name("_Feature")
867
- attrs = serialize_class_attributes(element, with_assoc: true)
868
- attrs.each { |attr| attr[:upper_klass] = "gml" }
869
- end
870
-
871
- # @return [Array<Hash>]
872
- def serialize_core_attributes
873
- element = find_packaged_element_by_name("_CityObject")
874
- attrs = serialize_class_attributes(element, with_assoc: false)
875
- attrs.each { |attr| attr[:upper_klass] = "core" }
876
- end
877
-
878
- # @return [Array<Hash>]
879
- def select_gen_attributes
880
- element = find_packaged_element_by_name("gen")
881
- gen_attr_element = find_packaged_element_by_name("_genericAttribute")
882
-
883
- element.packaged_element.select do |e|
884
- e.type?("uml:Class") &&
885
- e.generalization&.first&.general == gen_attr_element.id
886
- end
887
- end
888
-
889
- # @return [Array<Hash>]
890
- def serialize_gen_attributes
891
- klasses = select_gen_attributes
892
-
893
- klasses.map do |klass|
894
- attr = serialize_class_attributes(klass, with_assoc: false)
895
- attr.first[:name] = klass.name
896
- attr.first[:type] = "gen:#{klass.name}"
897
- attr.first[:upper_klass] = "gen"
898
- attr
899
- end.flatten!
900
- end
901
-
902
847
  # @param type [String]
903
848
  # @return [String]
904
849
  def get_ns_by_type(type)
@@ -907,7 +852,7 @@ module Lutaml
907
852
  p = find_klass_packaged_element_by_name(type)
908
853
  return unless p
909
854
 
910
- find_upper_level_packaged_element(p.id)
855
+ find_upper_level_packaged_element(p.id)&.name
911
856
  end
912
857
 
913
858
  # @param xmi_id [String]
@@ -918,7 +863,7 @@ module Lutaml
918
863
  p = find_packaged_element_by_id(xmi_id)
919
864
  return unless p
920
865
 
921
- find_upper_level_packaged_element(p.id)
866
+ find_upper_level_packaged_element(p.id)&.name
922
867
  end
923
868
 
924
869
  # @param klass_id [String]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.42
4
+ version: 0.9.43
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-10-03 00:00:00.000000000 Z
11
+ date: 2025-10-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: expressir