lutaml-xmi 0.2.1 → 0.2.2
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/xmi/parsers/xml.rb +15 -7
- data/lib/lutaml/xmi/version.rb +1 -1
- data/lutaml-xmi.gemspec +1 -0
- data/spec/lutaml/parsers/xmi_spec.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63fbe7f09179853abdedd141e18e2f66fbcb8f6018a8bed99a3128170d7a25bb
|
4
|
+
data.tar.gz: 874323dcf8ad23d86f83037382b2190b372aa747c768807f3b9f29999365b76c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a5844111850226727b714da4cde2ec8ca51ff50d0abdbf5980a78b280888b88492ba00a839d369a8f8df2c2549b40b6456a01243fe08142a1d6da5d366e3a1e
|
7
|
+
data.tar.gz: 1d348e32bf2b2ac4f3b6642e52e698b3f43cf4e4edebd9bd92b65b0a94f77cbb65dae9c9861eb2de916407f7ebae763735f3f29d4283290acd17a912e03ed700
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require "nokogiri"
|
2
|
+
require "htmlentities"
|
2
3
|
require "lutaml/uml/has_attributes"
|
3
4
|
require "lutaml/uml/document"
|
4
5
|
|
@@ -7,7 +8,7 @@ module Lutaml
|
|
7
8
|
module Parsers
|
8
9
|
# Class for parsing .xmi schema files into ::Lutaml::Uml::Document
|
9
10
|
class XML
|
10
|
-
|
11
|
+
LOWER_VALUE_MAPPINGS = {
|
11
12
|
"0" => "C",
|
12
13
|
"1" => "M",
|
13
14
|
}.freeze
|
@@ -55,7 +56,7 @@ module Lutaml
|
|
55
56
|
end
|
56
57
|
|
57
58
|
def serialize_model_classes(model)
|
58
|
-
model.xpath('./packagedElement[@xmi:type="uml:Class"]').map do |klass|
|
59
|
+
model.xpath('./packagedElement[@xmi:type="uml:Class" or @xmi:type="uml:AssociationClass"]').map do |klass|
|
59
60
|
{
|
60
61
|
xmi_id: klass["xmi:id"],
|
61
62
|
xmi_uuid: klass["xmi:uuid"],
|
@@ -145,7 +146,7 @@ module Lutaml
|
|
145
146
|
definition: definition
|
146
147
|
}
|
147
148
|
end
|
148
|
-
end
|
149
|
+
end.uniq
|
149
150
|
end
|
150
151
|
|
151
152
|
def serialize_class_operations(klass)
|
@@ -167,6 +168,7 @@ module Lutaml
|
|
167
168
|
{
|
168
169
|
xmi_id: constraint["xmi:id"],
|
169
170
|
body: constraint["name"],
|
171
|
+
definition: HTMLEntities.new.decode(constraint["description"])
|
170
172
|
}
|
171
173
|
end
|
172
174
|
end
|
@@ -191,7 +193,7 @@ module Lutaml
|
|
191
193
|
if connector_role
|
192
194
|
owned_attribute_name = connector_role.attributes["name"]&.value
|
193
195
|
end
|
194
|
-
owned_cardinality = { "min" =>
|
196
|
+
owned_cardinality = { "min" => LOWER_VALUE_MAPPINGS[min], "max" => max }
|
195
197
|
end
|
196
198
|
else
|
197
199
|
owned_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
|
@@ -210,7 +212,13 @@ module Lutaml
|
|
210
212
|
return generalization_association(owner_xmi_id, link) if link.name == "Generalization"
|
211
213
|
|
212
214
|
xmi_id = link.attributes[link_member_name].value
|
213
|
-
|
215
|
+
if link.attributes["start"].value == owner_xmi_id
|
216
|
+
xmi_id = link.attributes["end"].value
|
217
|
+
member_end = lookup_entity_name(xmi_id) || connector_target_name(xmi_id)
|
218
|
+
else
|
219
|
+
xmi_id = link.attributes["start"].value
|
220
|
+
member_end = lookup_entity_name(xmi_id) || connector_source_name(xmi_id)
|
221
|
+
end
|
214
222
|
|
215
223
|
if link.name == "Association"
|
216
224
|
connector_type = link_member_name == "start" ? "source" : "target"
|
@@ -226,7 +234,7 @@ module Lutaml
|
|
226
234
|
if connector_role
|
227
235
|
member_end_attribute_name = connector_role.attributes["name"]&.value
|
228
236
|
end
|
229
|
-
member_end_cardinality = { "min" =>
|
237
|
+
member_end_cardinality = { "min" => LOWER_VALUE_MAPPINGS[min], "max" => max }
|
230
238
|
end
|
231
239
|
else
|
232
240
|
member_end_node = main_model.xpath(%(//ownedAttribute[@association]/type[@xmi:idref="#{xmi_id}"])).first
|
@@ -286,7 +294,7 @@ module Lutaml
|
|
286
294
|
return unless lower_value_node
|
287
295
|
|
288
296
|
lower_value = lower_value_node.attributes["value"]&.value
|
289
|
-
|
297
|
+
LOWER_VALUE_MAPPINGS[lower_value]
|
290
298
|
end
|
291
299
|
|
292
300
|
def cardinality_max_value(node)
|
data/lib/lutaml/xmi/version.rb
CHANGED
data/lutaml-xmi.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_runtime_dependency "thor", "~> 1.0"
|
28
28
|
spec.add_runtime_dependency "lutaml-uml"
|
29
29
|
spec.add_runtime_dependency "nokogiri", "~> 1.10"
|
30
|
+
spec.add_runtime_dependency "htmlentities"
|
30
31
|
|
31
32
|
spec.add_development_dependency "bundler", "~> 2.0"
|
32
33
|
spec.add_development_dependency "byebug"
|
@@ -109,7 +109,7 @@ RSpec.describe Lutaml::XMI::Parsers::XML do
|
|
109
109
|
.to(eq(["Temporal and Zonal Geometry", "Temporal and Zonal RS using Identifiers"]))
|
110
110
|
end
|
111
111
|
|
112
|
-
it "correctly parses package
|
112
|
+
it "correctly parses package classes" do
|
113
113
|
expect(first_nested_package.classes.map(&:name)).to(eq(expected_class_names))
|
114
114
|
expect(first_nested_package.classes.map(&:xmi_id)).to(eq(expected_class_xmi_ids))
|
115
115
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lutaml-xmi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashie
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.10'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: htmlentities
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: bundler
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|