lutaml-xmi 0.2.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/release.yml +22 -0
- data/Gemfile +1 -5
- data/README.adoc +4 -22
- data/Rakefile +0 -5
- data/lutaml-xmi.gemspec +23 -37
- metadata +19 -181
- data/.github/workflows/macos.yml +0 -36
- data/.github/workflows/ubuntu.yml +0 -38
- data/.github/workflows/windows.yml +0 -41
- data/.gitignore +0 -12
- data/.rspec +0 -3
- data/CODE_OF_CONDUCT.md +0 -74
- data/Makefile +0 -2
- data/bin/console +0 -15
- data/bin/setup +0 -8
- data/lib/lutaml/xmi/parsers/xml.rb +0 -351
- data/lib/lutaml/xmi/version.rb +0 -5
- data/lib/lutaml/xmi.rb +0 -7
- data/spec/fixtures/ea-xmi-2.4.2.xmi +0 -1628
- data/spec/fixtures/ea-xmi-2.5.1.xmi +0 -1487
- data/spec/fixtures/requirements.wsd +0 -98
- data/spec/lutaml/parsers/xmi_spec.rb +0 -145
- data/spec/lutaml/xmi_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -21
@@ -1,98 +0,0 @@
|
|
1
|
-
@startuml Requirements
|
2
|
-
|
3
|
-
/'
|
4
|
-
Diagram: Requirements
|
5
|
-
DateCreate: 2019-03-06
|
6
|
-
Description: This diagram presents the model used to capture requirements, for use both in standards document markup,
|
7
|
-
and as standalone machine-readable artefacts.
|
8
|
-
|
9
|
-
History of changes:
|
10
|
-
> 2019-03-19: Added RequirementType/filename
|
11
|
-
> 2019-0-19: Added subsequence
|
12
|
-
> 2020-06-16: Added number
|
13
|
-
> 2020-06-16: Added keep-with-next
|
14
|
-
'/
|
15
|
-
|
16
|
-
|
17
|
-
'******* CLASS DEFINITION *********************************************
|
18
|
-
|
19
|
-
together {
|
20
|
-
class Requirement {
|
21
|
-
+ obligation: "requirement"
|
22
|
-
}
|
23
|
-
|
24
|
-
class Recommendation {
|
25
|
-
+ obligation: "recommendation"
|
26
|
-
}
|
27
|
-
|
28
|
-
class Permission {
|
29
|
-
+ obligation: "permission"
|
30
|
-
}
|
31
|
-
}
|
32
|
-
|
33
|
-
class RequirementType {
|
34
|
-
+ obligation: ObligationType[1..*],
|
35
|
-
+ id: String,
|
36
|
-
+ unnumbered: Boolean[0..1],
|
37
|
-
+ number: String[0..1],
|
38
|
-
+ subsequence: String[0..1],
|
39
|
-
+ keep-with-next: Boolean[0..1],
|
40
|
-
+ keep-lines-together: Boolean[0..1],
|
41
|
-
+ filename: String[0..1],
|
42
|
-
+ title: FormattedString[0..1],
|
43
|
-
+ label: String[0..1],
|
44
|
-
+ subject: String[0..1],
|
45
|
-
+ inherit: String[0..*],
|
46
|
-
+ model: String[0..1],
|
47
|
-
+ type: String[0..1],
|
48
|
-
+ classification: ClassificationType[0..*],
|
49
|
-
+ measurement-target: RequirementSubpart[0..*],
|
50
|
-
+ specification: RequirementSubpart[0..*],
|
51
|
-
+ verification: RequirementSubpart[0..*],
|
52
|
-
+ import: RequirementSubpart[0..*],
|
53
|
-
+ description: RequirementSubpart[0..*],
|
54
|
-
+ references: BibliographicItem[0..1],
|
55
|
-
+ subrequirement: RequirementType[0..*]
|
56
|
-
}
|
57
|
-
|
58
|
-
class RequirementSubpart {
|
59
|
-
+ type: String[0..1],
|
60
|
-
+ exclude: Boolean[0..1],
|
61
|
-
+ content: Block[1..*]
|
62
|
-
+ keep-with-next: Boolean[0..1],
|
63
|
-
+ keep-lines-together: Boolean[0..1],
|
64
|
-
}
|
65
|
-
|
66
|
-
class ClassificationType {
|
67
|
-
+ tag: String,
|
68
|
-
+ value: String
|
69
|
-
}
|
70
|
-
|
71
|
-
enum ObligationType <<enumeration>> {
|
72
|
-
requirement
|
73
|
-
recommendation
|
74
|
-
permission
|
75
|
-
}
|
76
|
-
|
77
|
-
class BibliographicItem <<Bibliography>> {
|
78
|
-
}
|
79
|
-
|
80
|
-
class Block <<BasicDoc>> {
|
81
|
-
}
|
82
|
-
|
83
|
-
'******* NOTES ********************************************************
|
84
|
-
note left of RequirementType: RequirementType is a generic category,\nwhich is agnostic as to obligation.\nRequirement, Recommendation, Permission\nset a specific obligation, although this\ncan be overridden
|
85
|
-
note right of RequirementType: description, import, verification,\nmeasurement-target, references\ncan appear in any order.
|
86
|
-
|
87
|
-
'******* CLASS RELATIONS **********************************************
|
88
|
-
Requirement --down-|> RequirementType
|
89
|
-
Recommendation --down-|> RequirementType
|
90
|
-
Permission --down-|> RequirementType
|
91
|
-
|
92
|
-
RequirementType <-- ObligationType
|
93
|
-
RequirementType <-- ClassificationType
|
94
|
-
RequirementType <-- BibliographicItem
|
95
|
-
RequirementType <-- Block
|
96
|
-
RequirementType <-- RequirementSubpart
|
97
|
-
|
98
|
-
@enduml
|
@@ -1,145 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Lutaml::XMI::Parsers::XML do
|
4
|
-
describe '.parse' do
|
5
|
-
subject(:parse) { described_class.parse(file) }
|
6
|
-
|
7
|
-
context 'when simple xmi schema' do
|
8
|
-
let(:file) { File.new(fixtures_path('ea-xmi-2.4.2.xmi')) }
|
9
|
-
let(:expected_class_names) do
|
10
|
-
%w[
|
11
|
-
BibliographicItem
|
12
|
-
Block
|
13
|
-
ClassificationType
|
14
|
-
Permission
|
15
|
-
Recommendation
|
16
|
-
Requirement
|
17
|
-
RequirementSubpart
|
18
|
-
RequirementType
|
19
|
-
TemporalGeometricPrimitive
|
20
|
-
]
|
21
|
-
end
|
22
|
-
let(:expected_class_xmi_ids) do
|
23
|
-
%w[
|
24
|
-
EAID_D832D6D8_0518_43f7_9166_7A4E3E8605AA
|
25
|
-
EAID_10AD8D60_9972_475a_AB7E_FA40212D5297
|
26
|
-
EAID_30B0131C_804F_4f67_8B6F_35DF5ABD8E78
|
27
|
-
EAID_82354CDC_EACB_402f_8C2B_FD627B7416E7
|
28
|
-
EAID_AD7320C2_FEE6_4352_8D56_F2C8562B6153
|
29
|
-
EAID_2AC20C81_1E83_400d_B098_BAB784395E06
|
30
|
-
EAID_035D8176_5E9E_42c8_B447_64411AE96F57
|
31
|
-
EAID_C1155D80_E68B_46d5_ADE5_F5639486163D
|
32
|
-
EAID_37BF1557_0370_435d_94BB_8FCC4574561B
|
33
|
-
]
|
34
|
-
end
|
35
|
-
let(:expected_enum_names) { ["ObligationType"] }
|
36
|
-
let(:expected_enum_xmi_ids) { ["EAID_E497ABDA_05EF_416a_A461_03535864970D"] }
|
37
|
-
let(:expected_attributes_names) do
|
38
|
-
%w[
|
39
|
-
classification
|
40
|
-
description
|
41
|
-
filename
|
42
|
-
id
|
43
|
-
import
|
44
|
-
inherit
|
45
|
-
keep-lines-together
|
46
|
-
keep-with-next
|
47
|
-
label
|
48
|
-
measurement-target
|
49
|
-
model
|
50
|
-
number
|
51
|
-
obligation
|
52
|
-
references
|
53
|
-
specification
|
54
|
-
subject
|
55
|
-
subrequirement
|
56
|
-
subsequence
|
57
|
-
title
|
58
|
-
type
|
59
|
-
unnumbered
|
60
|
-
verification
|
61
|
-
]
|
62
|
-
end
|
63
|
-
let(:expected_attributes_types) do
|
64
|
-
%w[
|
65
|
-
EAJava_ClassificationType_0..___
|
66
|
-
EAJava_RequirementSubpart_0..___
|
67
|
-
EAJava_String_0..1__
|
68
|
-
EAJava_String_
|
69
|
-
EAJava_RequirementSubpart_0..___
|
70
|
-
EAJava_String_0..___
|
71
|
-
EAJava_boolean_0..1__
|
72
|
-
EAJava_boolean_0..1__
|
73
|
-
EAJava_String_0..1__
|
74
|
-
EAJava_RequirementSubpart_0..___
|
75
|
-
EAJava_String_0..1__
|
76
|
-
EAJava_String_0..1__
|
77
|
-
EAJava_ObligationType_1..___
|
78
|
-
EAJava_BibliographicItem_0..1__
|
79
|
-
EAJava_RequirementSubpart_0..___
|
80
|
-
EAJava_String_0..1__
|
81
|
-
EAJava_RequirementSubpart_0..___
|
82
|
-
EAJava_String_0..1__
|
83
|
-
EAJava_FormattedString_0..1__
|
84
|
-
EAJava_String_0..1__
|
85
|
-
EAJava_boolean_0..1__
|
86
|
-
EAJava_RequirementSubpart_0..___
|
87
|
-
]
|
88
|
-
end
|
89
|
-
let(:expected_association_names) do
|
90
|
-
%w[
|
91
|
-
Primitive
|
92
|
-
TemporalGeometry
|
93
|
-
Interval
|
94
|
-
Instant
|
95
|
-
]
|
96
|
-
end
|
97
|
-
let(:first_package) { parse.packages.first }
|
98
|
-
let(:first_nested_package) { parse.packages.first.packages.first }
|
99
|
-
|
100
|
-
it "parses xml file into Lutaml::Uml::Node::Document object" do
|
101
|
-
expect(parse).to(be_instance_of(::Lutaml::Uml::Document))
|
102
|
-
end
|
103
|
-
|
104
|
-
it "correctly parses package tree" do
|
105
|
-
expect(parse.packages.map(&:name)).to(eq(['ISO 19170-1 Edition 1']))
|
106
|
-
expect(first_package.packages.map(&:name))
|
107
|
-
.to(eq(["requirement type class diagram", "Common Spatio-temporal Classes"]))
|
108
|
-
expect(first_package.packages.last.packages.map(&:name))
|
109
|
-
.to(eq(["Temporal and Zonal Geometry", "Temporal and Zonal RS using Identifiers"]))
|
110
|
-
end
|
111
|
-
|
112
|
-
it "correctly parses package classes" do
|
113
|
-
expect(first_nested_package.classes.map(&:name)).to(eq(expected_class_names))
|
114
|
-
expect(first_nested_package.classes.map(&:xmi_id)).to(eq(expected_class_xmi_ids))
|
115
|
-
end
|
116
|
-
|
117
|
-
it "correctly parses entities of enums type" do
|
118
|
-
expect(first_nested_package.enums.map(&:name)).to(eq(expected_enum_names))
|
119
|
-
expect(first_nested_package.enums.map(&:xmi_id)).to(eq(expected_enum_xmi_ids))
|
120
|
-
end
|
121
|
-
|
122
|
-
it "correctly parses entities and attributes for class" do
|
123
|
-
klass = first_nested_package.classes.find { |entity| entity.name == 'RequirementType' }
|
124
|
-
expect(klass.attributes.map(&:name)).to(eq(expected_attributes_names))
|
125
|
-
expect(klass.attributes.map(&:type)).to(eq(expected_attributes_types))
|
126
|
-
end
|
127
|
-
|
128
|
-
it "correctly parses associations for class" do
|
129
|
-
klass = first_nested_package.classes.find { |entity| entity.name == 'TemporalGeometricPrimitive' }
|
130
|
-
expect(klass.associations.map(&:member_end).compact).to(eq(expected_association_names))
|
131
|
-
|
132
|
-
inheritance = klass.associations.find { |entity| entity.member_end == 'TemporalGeometry' }
|
133
|
-
expect(inheritance.member_end_type).to eq('inheritance')
|
134
|
-
expect(inheritance.member_end_cardinality).to eq({"min"=>"C", "max"=>"*"})
|
135
|
-
end
|
136
|
-
|
137
|
-
it "correctly parses diagrams for package" do
|
138
|
-
root_package = parse.packages.first
|
139
|
-
expect(root_package.diagrams.length).to(eq(2))
|
140
|
-
expect(root_package.diagrams.map(&:name)).to(eq(['Fig: DGGS Package Diagram', 'Fig: Context for Temporal Geometry and Topology']))
|
141
|
-
expect(root_package.diagrams.map(&:definition)).to(eq(['this is a documentation', '']))
|
142
|
-
end
|
143
|
-
end
|
144
|
-
end
|
145
|
-
end
|
data/spec/lutaml/xmi_spec.rb
DELETED
data/spec/spec_helper.rb
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "lutaml/xmi"
|
5
|
-
require "byebug"
|
6
|
-
|
7
|
-
RSpec.configure do |config|
|
8
|
-
# Enable flags like --only-failures and --next-failure
|
9
|
-
config.example_status_persistence_file_path = ".rspec_status"
|
10
|
-
|
11
|
-
# Disable RSpec exposing methods globally on `Module` and `main`
|
12
|
-
config.disable_monkey_patching!
|
13
|
-
|
14
|
-
config.expect_with :rspec do |c|
|
15
|
-
c.syntax = :expect
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def fixtures_path(path)
|
20
|
-
File.join(File.expand_path("./fixtures", __dir__), path)
|
21
|
-
end
|