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 +4 -4
- data/lib/lutaml/converter/xmi_to_uml.rb +3 -3
- data/lib/lutaml/version.rb +1 -1
- data/lib/lutaml/xmi/liquid_drops/enum_drop.rb +2 -1
- data/lib/lutaml/xmi/liquid_drops/generalization_drop.rb +3 -3
- data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +14 -3
- data/lib/lutaml/xmi/liquid_drops/package_drop.rb +11 -1
- data/lib/lutaml/xmi/parsers/xmi_base.rb +47 -102
- 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: 237ccb049aa43625e1ae6358777dbe0eace1ad3cb1ff787ba5b5f055746d8d96
|
4
|
+
data.tar.gz: 9158115470db6f478a7dd6a30e738ec388d4efa09b33531d3ed8093e93a024fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 =
|
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 =
|
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
|
data/lib/lutaml/version.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
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(
|
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(
|
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] =
|
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 =
|
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:
|
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
|
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
|
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
|
468
|
-
.
|
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(
|
505
|
-
|
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
|
844
|
-
.
|
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.
|
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-
|
11
|
+
date: 2025-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: expressir
|