lutaml 0.9.33 → 0.9.35

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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +8 -0
  3. data/bin/plantuml2lutaml +1 -1
  4. data/bin/yaml2lutaml +6 -4
  5. data/exe/lutaml-wsd2uml +1 -1
  6. data/exe/lutaml-yaml2uml +6 -4
  7. data/lib/lutaml/command_line.rb +3 -3
  8. data/lib/lutaml/formatter/base.rb +3 -3
  9. data/lib/lutaml/formatter/graphviz.rb +10 -10
  10. data/lib/lutaml/sysml/block.rb +1 -1
  11. data/lib/lutaml/sysml/constraint_block.rb +1 -1
  12. data/lib/lutaml/sysml/nested_connector_end.rb +1 -1
  13. data/lib/lutaml/sysml/requirement.rb +41 -33
  14. data/lib/lutaml/sysml/xmi_file.rb +382 -355
  15. data/lib/lutaml/uml/actor.rb +1 -1
  16. data/lib/lutaml/uml/association.rb +5 -5
  17. data/lib/lutaml/uml/connector.rb +1 -1
  18. data/lib/lutaml/uml/constructor_end.rb +1 -1
  19. data/lib/lutaml/uml/dependency.rb +1 -1
  20. data/lib/lutaml/uml/document.rb +0 -1
  21. data/lib/lutaml/uml/formatter/base.rb +2 -2
  22. data/lib/lutaml/uml/formatter/graphviz.rb +10 -10
  23. data/lib/lutaml/uml/has_members.rb +4 -4
  24. data/lib/lutaml/uml/instance.rb +1 -1
  25. data/lib/lutaml/uml/model.rb +1 -1
  26. data/lib/lutaml/uml/node/class_node.rb +1 -1
  27. data/lib/lutaml/uml/operation.rb +2 -2
  28. data/lib/lutaml/uml/package.rb +2 -2
  29. data/lib/lutaml/uml/parsers/dsl.rb +7 -4
  30. data/lib/lutaml/uml/parsers/dsl_preprocessor.rb +6 -3
  31. data/lib/lutaml/uml/property.rb +4 -4
  32. data/lib/lutaml/uml/top_element.rb +2 -2
  33. data/lib/lutaml/uml/top_element_attribute.rb +1 -1
  34. data/lib/lutaml/uml/value.rb +2 -2
  35. data/lib/lutaml/version.rb +1 -1
  36. data/lib/lutaml/xmi/liquid_drops/association_drop.rb +11 -2
  37. data/lib/lutaml/xmi/liquid_drops/attribute_drop.rb +1 -1
  38. data/lib/lutaml/xmi/liquid_drops/connector_drop.rb +48 -0
  39. data/lib/lutaml/xmi/liquid_drops/data_type_drop.rb +2 -1
  40. data/lib/lutaml/xmi/liquid_drops/generalization_attribute_drop.rb +1 -1
  41. data/lib/lutaml/xmi/liquid_drops/klass_drop.rb +9 -3
  42. data/lib/lutaml/xmi/liquid_drops/source_target_drop.rb +36 -0
  43. data/lib/lutaml/xmi/parsers/xmi_base.rb +39 -19
  44. data/lib/lutaml/xmi.rb +0 -1
  45. data/lutaml.gemspec +2 -10
  46. metadata +6 -103
  47. data/lib/lutaml/xmi/version.rb +0 -5
@@ -4,7 +4,7 @@ require "lutaml/uml/has_attributes"
4
4
  require "lutaml/uml/document"
5
5
  require "lutaml/xmi"
6
6
  require "xmi"
7
- require 'digest'
7
+ require "digest"
8
8
 
9
9
  module Lutaml
10
10
  module XMI
@@ -112,7 +112,7 @@ module Lutaml
112
112
  return package.name unless package.name.nil?
113
113
 
114
114
  connector = fetch_connector(package.id)
115
- if connector.target&.model && connector.target.model&.name
115
+ if connector.target&.model&.name
116
116
  return "#{connector.target.model.name} " \
117
117
  "(#{package.type.split(':').last})"
118
118
  end
@@ -312,7 +312,7 @@ module Lutaml
312
312
  # @return [Lutaml::Model::Serializable]
313
313
  def find_klass_packaged_element(path)
314
314
  lutaml_path = Lutaml::Path.parse(path)
315
- if lutaml_path.segments.count == 1
315
+ if lutaml_path.segments.one?
316
316
  return find_klass_packaged_element_by_name(path)
317
317
  end
318
318
 
@@ -524,7 +524,13 @@ module Lutaml
524
524
  # %(//connector[@xmi:idref="#{link_id}"]/#{node_name}/documentation)
525
525
  def fetch_definition_node_value(link_id, node_name)
526
526
  connector_node = fetch_connector(link_id)
527
- connector_node.send(node_name.to_sym).documentation
527
+ documentation = connector_node.send(node_name.to_sym).documentation
528
+
529
+ if documentation.is_a?(Xmi::Sparx::SparxElementDocumentation)
530
+ documentation&.value
531
+ else
532
+ documentation
533
+ end
528
534
  end
529
535
 
530
536
  # @param klass [Lutaml::Model::Serializable]
@@ -579,7 +585,9 @@ module Lutaml
579
585
  when "NoteLink"
580
586
  return
581
587
  when "Generalization"
582
- return generalization_association(owner_xmi_id, link)
588
+ owner_end, _owner_end_type, _owner_xmi_id =
589
+ generalization_association(owner_xmi_id, link)
590
+ return owner_end
583
591
  end
584
592
 
585
593
  xmi_id = link.send(linke_owner_name.to_sym)
@@ -617,7 +625,7 @@ module Lutaml
617
625
  end
618
626
 
619
627
  member_end = member_end_name(xmi_id, source_or_target, link.name)
620
- [member_end, xmi_id]
628
+ [member_end, "aggregation", xmi_id]
621
629
  end
622
630
 
623
631
  # @param xmi_id [String]
@@ -642,8 +650,9 @@ module Lutaml
642
650
  # @param link [Lutaml::Model::Serializable]
643
651
  # @param link_member_name [String]
644
652
  # @return [Array<String, String, Hash, String, String>]
645
- def serialize_member_type(owner_xmi_id, link, link_member_name)
646
- member_end, xmi_id = serialize_member_end(owner_xmi_id, link)
653
+ def serialize_member_type(owner_xmi_id, link, link_member_name) # rubocop:disable Metrics/MethodLength,Metrics/AbcSize
654
+ member_end, member_end_type, xmi_id =
655
+ serialize_member_end(owner_xmi_id, link)
647
656
 
648
657
  if link.name == "Association"
649
658
  connector_type = link_member_name == "start" ? "source" : "target"
@@ -654,16 +663,26 @@ module Lutaml
654
663
  fetch_owned_attribute_node(xmi_id)
655
664
  end
656
665
 
657
- [member_end, "aggregation", member_end_cardinality,
666
+ if fetch_connector_name(link.id)
667
+ member_end = fetch_connector_name(link.id)
668
+ end
669
+
670
+ [member_end, member_end_type, member_end_cardinality,
658
671
  member_end_attribute_name, xmi_id]
659
672
  end
660
673
 
674
+ def fetch_connector_name(link_id)
675
+ connector = fetch_connector(link_id)
676
+ connector&.name
677
+ end
678
+
661
679
  # @param link_id [String]
662
680
  # @param connector_type [String]
663
681
  # @return [Array<Hash, String>]
664
682
  # @note xpath %(//connector[@xmi:idref="#{link_id}"]/#{connector_type})
665
- def fetch_assoc_connector(link_id, connector_type) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
666
- assoc_connector = fetch_connector(link_id).send(connector_type.to_sym)
683
+ def fetch_assoc_connector(link_id, connector_type) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength,Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
684
+ connector = fetch_connector(link_id)
685
+ assoc_connector = connector.send(connector_type.to_sym)
667
686
 
668
687
  if assoc_connector
669
688
  assoc_connector_type = assoc_connector.type
@@ -672,9 +691,8 @@ module Lutaml
672
691
  cardinality.unshift("1") if cardinality.length == 1
673
692
  min, max = cardinality
674
693
  end
694
+
675
695
  assoc_connector_role = assoc_connector.role
676
- # Does role has name attribute? Or get name from model?
677
- # attribute_name = assoc_connector_role.name if assoc_connector_role
678
696
  attribute_name = assoc_connector.model.name if assoc_connector_role
679
697
  cardinality = cardinality_min_max_value(min, max)
680
698
  end
@@ -699,10 +717,10 @@ module Lutaml
699
717
 
700
718
  member_end = member_end_name(xmi_id, source_or_target, link.name)
701
719
 
702
- member_end_cardinality, _member_end_attribute_name =
703
- fetch_owned_attribute_node(xmi_id)
704
-
705
- [member_end, member_end_type, member_end_cardinality, nil, xmi_id]
720
+ # member_end_cardinality, _member_end_attribute_name =
721
+ # fetch_owned_attribute_node(xmi_id)
722
+ # [member_end, member_end_type, member_end_cardinality, nil, xmi_id]
723
+ [member_end, member_end_type, xmi_id]
706
724
  end
707
725
 
708
726
  # Multiple items if search type is idref. Should search association?
@@ -880,7 +898,7 @@ module Lutaml
880
898
  next unless e.attributes&.attribute
881
899
 
882
900
  e.attributes.attribute.each do |a|
883
- cache[a.idref] = a # Store in hash for quick lookup
901
+ cache[a.idref] = a # Store in hash for quick lookup
884
902
  end
885
903
  end
886
904
  cache
@@ -928,8 +946,10 @@ module Lutaml
928
946
  # @param xmi_id [String]
929
947
  # @param source_or_target [String]
930
948
  # @return [String]
931
- def connector_name_by_source_or_target(xmi_id, source_or_target)
949
+ def connector_name_by_source_or_target(xmi_id, source_or_target) # rubocop:disable Metrics/AbcSize
932
950
  node = connector_node_by_id(xmi_id, source_or_target)
951
+ return node.name if node&.name
952
+
933
953
  return if node.nil? ||
934
954
  node.send(source_or_target.to_sym).nil? ||
935
955
  node.send(source_or_target.to_sym).model.nil?
data/lib/lutaml/xmi.rb CHANGED
@@ -1,4 +1,3 @@
1
- require "lutaml/xmi/version"
2
1
  require "lutaml/xmi/parsers/xml"
3
2
  require "liquid"
4
3
  require "lutaml/path"
data/lutaml.gemspec CHANGED
@@ -27,7 +27,7 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.required_ruby_version = ">= 2.7.0"
30
+ spec.required_ruby_version = ">= 2.7.0" # rubocop:disable Gemspec/RequiredRubyVersion
31
31
 
32
32
  spec.add_dependency "expressir", "~> 2.1.0"
33
33
  spec.add_dependency "hashie", "~> 4.1.0"
@@ -40,14 +40,6 @@ Gem::Specification.new do |spec|
40
40
  spec.add_dependency "parslet", "~> 2.0.0"
41
41
  spec.add_dependency "ruby-graphviz", "~> 1.2"
42
42
  spec.add_dependency "thor", "~> 1.0"
43
- spec.add_dependency "xmi", "~> 0.3.12"
44
-
45
- spec.add_development_dependency "byebug"
46
- spec.add_development_dependency "equivalent-xml", "~> 0.6.0"
47
- spec.add_development_dependency "pry", "~> 0.12.2"
48
- spec.add_development_dependency "rake", "~> 13.0"
49
- spec.add_development_dependency "rspec", "~> 3.11"
50
- spec.add_development_dependency "rubocop", "~> 1.58"
51
- spec.add_development_dependency "rubocop-performance", "~> 1.19"
43
+ spec.add_dependency "xmi", "~> 0.3.20"
52
44
  spec.metadata["rubygems_mfa_required"] = "true"
53
45
  end
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.33
4
+ version: 0.9.35
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-05-09 00:00:00.000000000 Z
11
+ date: 2025-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: expressir
@@ -170,112 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: 0.3.12
173
+ version: 0.3.20
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: 0.3.12
181
- - !ruby/object:Gem::Dependency
182
- name: byebug
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - ">="
186
- - !ruby/object:Gem::Version
187
- version: '0'
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - ">="
193
- - !ruby/object:Gem::Version
194
- version: '0'
195
- - !ruby/object:Gem::Dependency
196
- name: equivalent-xml
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: 0.6.0
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: 0.6.0
209
- - !ruby/object:Gem::Dependency
210
- name: pry
211
- requirement: !ruby/object:Gem::Requirement
212
- requirements:
213
- - - "~>"
214
- - !ruby/object:Gem::Version
215
- version: 0.12.2
216
- type: :development
217
- prerelease: false
218
- version_requirements: !ruby/object:Gem::Requirement
219
- requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: 0.12.2
223
- - !ruby/object:Gem::Dependency
224
- name: rake
225
- requirement: !ruby/object:Gem::Requirement
226
- requirements:
227
- - - "~>"
228
- - !ruby/object:Gem::Version
229
- version: '13.0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- requirements:
234
- - - "~>"
235
- - !ruby/object:Gem::Version
236
- version: '13.0'
237
- - !ruby/object:Gem::Dependency
238
- name: rspec
239
- requirement: !ruby/object:Gem::Requirement
240
- requirements:
241
- - - "~>"
242
- - !ruby/object:Gem::Version
243
- version: '3.11'
244
- type: :development
245
- prerelease: false
246
- version_requirements: !ruby/object:Gem::Requirement
247
- requirements:
248
- - - "~>"
249
- - !ruby/object:Gem::Version
250
- version: '3.11'
251
- - !ruby/object:Gem::Dependency
252
- name: rubocop
253
- requirement: !ruby/object:Gem::Requirement
254
- requirements:
255
- - - "~>"
256
- - !ruby/object:Gem::Version
257
- version: '1.58'
258
- type: :development
259
- prerelease: false
260
- version_requirements: !ruby/object:Gem::Requirement
261
- requirements:
262
- - - "~>"
263
- - !ruby/object:Gem::Version
264
- version: '1.58'
265
- - !ruby/object:Gem::Dependency
266
- name: rubocop-performance
267
- requirement: !ruby/object:Gem::Requirement
268
- requirements:
269
- - - "~>"
270
- - !ruby/object:Gem::Version
271
- version: '1.19'
272
- type: :development
273
- prerelease: false
274
- version_requirements: !ruby/object:Gem::Requirement
275
- requirements:
276
- - - "~>"
277
- - !ruby/object:Gem::Version
278
- version: '1.19'
180
+ version: 0.3.20
279
181
  description: 'LutaML: data models in textual form'
280
182
  email:
281
183
  - open.source@ribose.com'
@@ -409,6 +311,7 @@ files:
409
311
  - lib/lutaml/xmi/liquid_drops/association_drop.rb
410
312
  - lib/lutaml/xmi/liquid_drops/attribute_drop.rb
411
313
  - lib/lutaml/xmi/liquid_drops/cardinality_drop.rb
314
+ - lib/lutaml/xmi/liquid_drops/connector_drop.rb
412
315
  - lib/lutaml/xmi/liquid_drops/constraint_drop.rb
413
316
  - lib/lutaml/xmi/liquid_drops/data_type_drop.rb
414
317
  - lib/lutaml/xmi/liquid_drops/diagram_drop.rb
@@ -420,9 +323,9 @@ files:
420
323
  - lib/lutaml/xmi/liquid_drops/operation_drop.rb
421
324
  - lib/lutaml/xmi/liquid_drops/package_drop.rb
422
325
  - lib/lutaml/xmi/liquid_drops/root_drop.rb
326
+ - lib/lutaml/xmi/liquid_drops/source_target_drop.rb
423
327
  - lib/lutaml/xmi/parsers/xmi_base.rb
424
328
  - lib/lutaml/xmi/parsers/xml.rb
425
- - lib/lutaml/xmi/version.rb
426
329
  - lib/lutaml/xml.rb
427
330
  - lib/lutaml/xml/parsers/xml.rb
428
331
  - lutaml.gemspec
@@ -1,5 +0,0 @@
1
- module Lutaml
2
- module XMI
3
- VERSION = "0.2.3"
4
- end
5
- end