ea 0.5.1 → 0.6.0
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/TODO.complete/01-t-xref-parsing.md +1 -1
- data/TODO.complete/02-per-label-geometry.md +1 -1
- data/TODO.complete/03-object-properties-constraints.md +1 -1
- data/TODO.complete/04-operation-params.md +1 -1
- data/TODO.complete/05-pdata-flag-matrix.md +1 -1
- data/TODO.complete/06-emf-image-rendering.md +1 -1
- data/TODO.complete/07-auxiliary-tables.md +1 -1
- data/TODO.complete/10-mdg-stereotype-registry.md +1 -1
- data/TODO.complete/11-gml-xsd-generation.md +1 -1
- data/TODO.complete/13-shapescript-interpreter.md +12 -23
- data/TODO.complete/20-cli-diff.md +1 -1
- data/TODO.complete/21-cli-render.md +1 -1
- data/TODO.complete/22-cli-export.md +1 -1
- data/TODO.complete/23-cli-mdg.md +1 -1
- data/TODO.complete/30-headerlines-ocp-refactor.md +1 -1
- data/TODO.complete/32-spec-coverage.md +1 -1
- data/TODO.complete/33-blocked-parity-gaps.md +1 -1
- data/TODO.complete/36-stereotype-icon-wiring.md +1 -1
- data/TODO.complete/37-cli-lint.md +1 -1
- data/TODO.complete/38-cli-query.md +1 -1
- data/TODO.complete/39-cli-info.md +1 -1
- data/TODO.complete/40-ocl-evaluator.md +1 -1
- data/TODO.complete/41-round-trip-spec.md +1 -1
- data/TODO.complete/42-html-diff-report.md +1 -1
- data/TODO.complete/43-json-schema-export.md +1 -1
- data/TODO.complete/44-remaining-qea-tables.md +1 -1
- data/TODO.complete/45-shapescript-extensions.md +1 -1
- data/TODO.complete/46-xsd-consolidation.md +1 -1
- data/TODO.complete/47-headerlines-legacy-removal.md +1 -1
- data/TODO.complete/51-remove-respond-to.md +42 -15
- data/TODO.complete/52-xsd-decouple-fixtures.md +1 -1
- data/TODO.complete/54-wire-stereotype-icon-renderer.md +1 -1
- data/TODO.complete/55-wire-shapescript.md +1 -1
- data/TODO.complete/56-wire-emf-renderer.md +1 -1
- data/TODO.complete/57-wire-ocl-evaluator.md +1 -1
- data/TODO.complete/58-diff-modifications.md +1 -1
- data/TODO.complete/59-delete-toy-xmi-export.md +1 -1
- data/TODO.complete/60-curate-json-export.md +1 -1
- data/TODO.complete/61-plantuml-relationships.md +1 -1
- data/TODO.complete/62-changelog.md +1 -1
- data/TODO.complete/63-dependabot-fix.md +1 -1
- data/TODO.complete/64-qeatoxmi-connectors.md +15 -0
- data/TODO.complete/65-qeatoxmi-diagrams.md +15 -0
- data/TODO.complete/66-qeatoxmi-style-tags-docs.md +35 -0
- data/TODO.complete/67-ocl-collection-ops.md +20 -0
- data/TODO.complete/68-ocl-comparison-ops.md +24 -0
- data/TODO.complete/69-spec-new-models.md +20 -0
- data/TODO.complete/70-specs-for-all-models.md +21 -0
- data/TODO.complete/71-autoload-audit.md +26 -0
- data/TODO.complete/72-extension-serializer-ocp-naming.md +26 -0
- data/TODO.complete/73-ocl-validator-latent-bugs.md +50 -0
- data/TODO.complete/74-visibility-symbol-dry.md +39 -0
- data/TODO.complete/75-database-table-collection-registry.md +32 -0
- data/TODO.complete/76-stale-todo-cleanup.md +52 -0
- data/TODO.complete/77-eliminate-banned-patterns-from-specs.md +55 -0
- data/TODO.complete/78-mdg-stereotype-emission.md +66 -0
- data/TODO.complete/79-equivalence-fixes.md +57 -0
- data/TODO.complete/80-performance-extension-serializer-indexes.md +43 -0
- data/TODO.complete/81-dry-scope-guid-extraction.md +33 -0
- data/TODO.complete/82-public-send-audit-conclusion.md +25 -0
- data/TODO.complete/83-dry-shared-xml-escape-guid-format.md +52 -0
- data/TODO.complete/84-ocp-markers-shape-registry.md +54 -0
- data/TODO.complete/85-frozen-literal-rubocop-normalize-type-spec.md +38 -0
- data/TODO.complete/86-frozen-sweep-lint-query-specs.md +55 -0
- data/TODO.complete/STATUS.md +26 -5
- data/lib/ea/cli/app.rb +1 -0
- data/lib/ea/cli/command/convert.rb +1 -1
- data/lib/ea/cli/command/export.rb +10 -1
- data/lib/ea/cli/command/mdg.rb +1 -10
- data/lib/ea/cli/command/render.rb +2 -1
- data/lib/ea/diff/html_reporter.rb +1 -5
- data/lib/ea/export/json/generator.rb +5 -6
- data/lib/ea/export/plantuml/generator.rb +5 -3
- data/lib/ea/guid_format.rb +91 -0
- data/lib/ea/mdg/document.rb +2 -1
- data/lib/ea/mdg/loader.rb +2 -1
- data/lib/ea/mdg/registry.rb +57 -2
- data/lib/ea/mdg/xml/applies_to.rb +1 -1
- data/lib/ea/mdg/xml/apply.rb +1 -1
- data/lib/ea/mdg/xml/content.rb +1 -1
- data/lib/ea/mdg/xml/documentation.rb +1 -1
- data/lib/ea/mdg/xml/stereotype.rb +1 -1
- data/lib/ea/mdg/xml/stereotypes.rb +1 -1
- data/lib/ea/mdg/xml/tag.rb +1 -1
- data/lib/ea/mdg/xml/tagged_values.rb +1 -1
- data/lib/ea/mdg/xml/technology.rb +1 -1
- data/lib/ea/mdg/xml/uml_profile.rb +1 -1
- data/lib/ea/mdg/xml/uml_profiles.rb +1 -1
- data/lib/ea/mdg/xml.rb +2 -1
- data/lib/ea/mdg.rb +2 -1
- data/lib/ea/model/ghost_label.rb +2 -1
- data/lib/ea/ocl/evaluator.rb +39 -0
- data/lib/ea/ocl/nodes.rb +9 -0
- data/lib/ea/ocl/parser.rb +60 -6
- data/lib/ea/qea/database.rb +57 -2
- data/lib/ea/qea/factory/reference_resolver.rb +1 -1
- data/lib/ea/qea/models/ea_attribute.rb +1 -17
- data/lib/ea/qea/models/ea_connector.rb +3 -2
- data/lib/ea/qea/models/ea_object.rb +14 -9
- data/lib/ea/qea/models/ea_operation.rb +1 -17
- data/lib/ea/qea/models/ea_xref.rb +3 -0
- data/lib/ea/qea/models/scope_predicate.rb +29 -0
- data/lib/ea/qea/models.rb +1 -0
- data/lib/ea/qea/repositories/base_repository.rb +4 -1
- data/lib/ea/qea/validation/base_validator.rb +3 -48
- data/lib/ea/qea/validation/database/ocl_constraint_validator.rb +23 -13
- data/lib/ea/shapescript/renderer.rb +1 -3
- data/lib/ea/sources/qea/diagram_builder.rb +1 -0
- data/lib/ea/sources/qea/id_normalizer.rb +2 -2
- data/lib/ea/svg/ea_emitter/background.rb +2 -1
- data/lib/ea/svg/ea_emitter/element/attribute_line_builder.rb +1 -6
- data/lib/ea/svg/ea_emitter/element/operation_renderer.rb +2 -7
- data/lib/ea/svg/ea_emitter/elements.rb +1 -3
- data/lib/ea/svg/ea_emitter/ghost_labels.rb +2 -1
- data/lib/ea/svg/ea_emitter/label/end_label.rb +1 -6
- data/lib/ea/svg/ea_emitter/marker/package_import.rb +1 -1
- data/lib/ea/svg/ea_emitter/markers.rb +52 -23
- data/lib/ea/svg/ea_emitter/text_renderer.rb +1 -4
- data/lib/ea/svg/ea_emitter/visibility_symbol.rb +37 -0
- data/lib/ea/svg/ea_emitter.rb +1 -0
- data/lib/ea/svg/parity/source.rb +0 -2
- data/lib/ea/svg/parity/suite.rb +0 -1
- data/lib/ea/transformers/qea_to_xmi/cardinality.rb +40 -28
- data/lib/ea/transformers/qea_to_xmi/context.rb +35 -1
- data/lib/ea/transformers/qea_to_xmi/extension_serializer.rb +686 -0
- data/lib/ea/transformers/qea_to_xmi/guid_format.rb +5 -48
- data/lib/ea/transformers/qea_to_xmi/id_allocator.rb +55 -54
- data/lib/ea/transformers/qea_to_xmi/primitive_types.rb +105 -0
- data/lib/ea/transformers/qea_to_xmi/profile_serializer.rb +163 -0
- data/lib/ea/transformers/qea_to_xmi/run_state.rb +7 -6
- data/lib/ea/transformers/qea_to_xmi/transformer.rb +423 -76
- data/lib/ea/transformers/qea_to_xmi/visibility.rb +30 -19
- data/lib/ea/transformers/qea_to_xmi.rb +5 -2
- data/lib/ea/transformers.rb +8 -2
- data/lib/ea/validation.rb +1 -1
- data/lib/ea/version.rb +1 -1
- data/lib/ea/xmi/liquid_drops/attribute_drop.rb +12 -4
- data/lib/ea/xmi/liquid_drops/klass_drop.rb +1 -2
- data/lib/ea/xmi/lookup_service.rb +4 -0
- data/lib/ea/xmi/parser.rb +30 -1
- data/lib/ea/xml_escape.rb +21 -0
- data/lib/ea.rb +2 -0
- metadata +34 -11
- data/lutaml-uml-0.5.1.gem +0 -0
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8176d9a9c6b3d499aeab9f51409190c951b062a890ce66a5e39ce2e4f9fbd056
|
|
4
|
+
data.tar.gz: 0d92ca54dff55c01469465c6ff276a0e9d9ae1ad58325aed7ab5ca96443ed00a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 33649bc4e8f12a30a1838c80e2359f5dfaa03f9ffeb63ed0655a989559d2cbb0ec314fd673f0802baff90d0d53f75902b2aa3814942bf4a735f853367f31faa7
|
|
7
|
+
data.tar.gz: b2761649c59502772d5406573d6bc02e88dcc3cabe42be17cf34733a553661fc83b94cab4581c11fd80001e71c332812a77307bdb956c9b6ce1e3495c2e9d71b
|
|
@@ -1,28 +1,17 @@
|
|
|
1
1
|
# TODO.complete/13: Basic ShapeScript interpreter
|
|
2
2
|
|
|
3
|
-
## Status:
|
|
3
|
+
## Status: done
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
ShapeScript parser + renderer implemented with vars, arithmetic,
|
|
6
|
+
conditionals, subshapes, and labels. Wired into
|
|
7
|
+
StereotypeIconRenderer for stereotype decorator icons.
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
small stereotype decorator icons EA renders inside element bodies.
|
|
9
|
+
## Implementation
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
## When to revisit
|
|
19
|
-
|
|
20
|
-
- Encryption is broken and we have plaintext shape definitions.
|
|
21
|
-
- A user specifically requests stereotype decorator icon rendering.
|
|
22
|
-
- A larger gap emerges that ShapeScript would close.
|
|
23
|
-
|
|
24
|
-
## Partial path (lower effort)
|
|
25
|
-
|
|
26
|
-
If we acquire plaintext shape definitions for a few high-value stereotypes
|
|
27
|
-
(FeatureType, Type), we can hardcode their polygons without a full
|
|
28
|
-
ShapeScript interpreter. This is a tactical compromise.
|
|
11
|
+
- `lib/ea/shapescript/parser.rb` — tokenizes and parses ShapeScript
|
|
12
|
+
source into `Shape` value objects.
|
|
13
|
+
- `lib/ea/shapescript/shape.rb` — `Shape` model (rect, polygon,
|
|
14
|
+
ellipse, line, text).
|
|
15
|
+
- `lib/ea/shapescript/renderer.rb` — walks a parsed `Shape` tree and
|
|
16
|
+
emits SVG elements.
|
|
17
|
+
- 21 specs in `spec/ea/shapescript/shapescript_spec.rb` (0 failures).
|
data/TODO.complete/23-cli-mdg.md
CHANGED
|
@@ -1,25 +1,52 @@
|
|
|
1
1
|
# TODO.complete/51: Remove `respond_to?` from lib code
|
|
2
2
|
|
|
3
|
-
## Status:
|
|
3
|
+
## Status: done
|
|
4
4
|
|
|
5
|
-
The user's rule: "never use respond_to (poor typing)".
|
|
6
|
-
sites
|
|
5
|
+
The user's rule: "never use respond_to (poor typing)". All 6 call
|
|
6
|
+
sites in lib/ have been replaced with `is_a?` type checks or direct
|
|
7
|
+
method calls (typed dispatch).
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
- lib/ea/lint/rules/missing_stereotype.rb:29
|
|
10
|
-
- lib/ea/query/builder.rb:66
|
|
11
|
-
- lib/ea/ocl/evaluator.rb:41, 52
|
|
9
|
+
## Sites fixed
|
|
12
10
|
|
|
13
|
-
|
|
11
|
+
1. `lib/ea/qea/validation/database/ocl_constraint_validator.rb:54` —
|
|
12
|
+
`constraint.respond_to?(:ea_object_id)` → direct call (constraint
|
|
13
|
+
is always `EaObjectConstraint`, which has `ea_object_id`). Also
|
|
14
|
+
fixed latent bug: `o.object_id` (Ruby's `Object#object_id`) →
|
|
15
|
+
`o.ea_object_id`; the old code never matched any owner, silently
|
|
16
|
+
skipping all OCL validation.
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
2. `lib/ea/export/json/generator.rb:64` —
|
|
19
|
+
`record.class.respond_to?(:primary_key_column)` →
|
|
20
|
+
`record.is_a?(Ea::Qea::Models::BaseModel)` (BaseModel defines
|
|
21
|
+
`primary_key_column` as a class method).
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
3. `lib/ea/export/json/generator.rb:72` —
|
|
24
|
+
`record.respond_to?(:name)` → `record.to_hash["name"]` (safe hash
|
|
25
|
+
access, returns nil when absent).
|
|
26
|
+
|
|
27
|
+
4. `lib/ea/ocl/evaluator.rb:66` —
|
|
28
|
+
`collection.respond_to?(:size)` → `collection.is_a?(Array)`.
|
|
29
|
+
|
|
30
|
+
5. `lib/ea/ocl/evaluator.rb:73` —
|
|
31
|
+
`collection.respond_to?(:empty?)` → `collection.is_a?(Array)`.
|
|
32
|
+
|
|
33
|
+
6. `lib/ea/export/plantuml/generator.rb:130` —
|
|
34
|
+
`l.respond_to?(:ea_object_id)` →
|
|
35
|
+
`l.is_a?(Ea::Qea::Models::EaAttribute)`.
|
|
36
|
+
|
|
37
|
+
## Follow-on fixes
|
|
38
|
+
|
|
39
|
+
Fixing site #1 exposed two latent bugs in the OCL constraint
|
|
40
|
+
validator that had been masked by the `owner_for` always returning nil:
|
|
41
|
+
|
|
42
|
+
- `result.add(:info, ...)` was calling a non-existent API — replaced
|
|
43
|
+
with `result.add_info(category:..., message:..., **opts)`.
|
|
44
|
+
- The OCL evaluator's `attribute_value` raised `NoMethodError` on
|
|
45
|
+
unknown attributes — now rescues and returns nil (OCL semantics:
|
|
46
|
+
missing attribute = null).
|
|
21
47
|
|
|
22
48
|
## Acceptance
|
|
23
49
|
|
|
24
|
-
- `grep -rn "respond_to?" lib
|
|
25
|
-
-
|
|
50
|
+
- `grep -rn "respond_to?" lib/` returns zero results.
|
|
51
|
+
- All validation + OCL specs pass (including the previously-skipped
|
|
52
|
+
OCL validation specs that now run to completion).
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# TODO.complete/64: QeaToXmi emits connector elements
|
|
2
|
+
|
|
3
|
+
## Status: done (via TODO 66 — ExtensionSerializer)
|
|
4
|
+
|
|
5
|
+
`Ea::Transformers::QeaToXmi` now emits `<connector>` elements as part
|
|
6
|
+
of the `<connectors>` extension section. Each connector has full
|
|
7
|
+
source/target/end blocks with `<style>`, `<documentation/>`, `<tags/>`
|
|
8
|
+
each, plus connector-level body (properties, appearance, style).
|
|
9
|
+
|
|
10
|
+
Parity: 72/72 connectors matched for basic.qea.
|
|
11
|
+
|
|
12
|
+
## Implementation
|
|
13
|
+
|
|
14
|
+
Extracted to `Ea::Transformers::QeaToXmi::ExtensionSerializer` (OCP).
|
|
15
|
+
See [[66-qeatoxmi-style-tags-docs]] for the full restructuring.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# TODO.complete/65: QeaToXmi emits diagram elements
|
|
2
|
+
|
|
3
|
+
## Status: done (via TODO 66 — ExtensionSerializer)
|
|
4
|
+
|
|
5
|
+
`Ea::Transformers::QeaToXmi` now emits `<diagram>` elements as part
|
|
6
|
+
of the `<diagrams>` extension section. Each diagram has a `<model>`
|
|
7
|
+
block, `<properties>` block, and `<elements>` containing placed
|
|
8
|
+
`<element subject="EAID_..." geometry="..."/>` children.
|
|
9
|
+
|
|
10
|
+
Parity: 22/22 diagrams matched for basic.qea.
|
|
11
|
+
|
|
12
|
+
## Implementation
|
|
13
|
+
|
|
14
|
+
Extracted to `Ea::Transformers::QeaToXmi::ExtensionSerializer` (OCP).
|
|
15
|
+
See [[66-qeatoxmi-style-tags-docs]] for the full restructuring.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# TODO.complete/66: QeaToXmi emits style / tags / documentation
|
|
2
|
+
|
|
3
|
+
## Status: done
|
|
4
|
+
|
|
5
|
+
EA's reference XMI contains hundreds of `<style>`, `<tags>`, and
|
|
6
|
+
`<documentation>` elements per diagram. Previously ours emitted zero.
|
|
7
|
+
|
|
8
|
+
## Outcome
|
|
9
|
+
|
|
10
|
+
Extracted extension serialization into `ExtensionSerializer` (OCP:
|
|
11
|
+
new element types = new method, no existing code change). Emits the
|
|
12
|
+
proper Sparx XMI structure:
|
|
13
|
+
|
|
14
|
+
- `<elements>` — one `<element>` per package/classifier, each with
|
|
15
|
+
`<model>`, `<properties documentation="...">`, `<style>`, `<tags>`,
|
|
16
|
+
and (for classifiers) `<attributes>` and `<operations>` sub-blocks.
|
|
17
|
+
- `<connectors>` — full source/target/end blocks with `<style>`,
|
|
18
|
+
`<documentation/>`, `<tags/>` each, plus connector-level body.
|
|
19
|
+
- `<diagrams>` — placed `<element>` children with geometry.
|
|
20
|
+
|
|
21
|
+
Parity counts (basic.qea):
|
|
22
|
+
|
|
23
|
+
| type | before | after | ref |
|
|
24
|
+
|--------------|--------|-------|-----|
|
|
25
|
+
| style | 0 | 508 | 478 |
|
|
26
|
+
| tags | 0 | 508 | 478 |
|
|
27
|
+
| documentation| 0 | 345 | 357 |
|
|
28
|
+
|
|
29
|
+
## Notes
|
|
30
|
+
|
|
31
|
+
- Removed banned `respond_to?` patterns from the old code.
|
|
32
|
+
- The old top-level `<tags>` and `<documentation>` sections were
|
|
33
|
+
structurally wrong — Sparx nests these inside per-element blocks.
|
|
34
|
+
- `serialize(with_extensions: false)` (used by `ea convert`) skips
|
|
35
|
+
this entirely for round-trip safety.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# TODO.complete/67: OCL collection operations
|
|
2
|
+
|
|
3
|
+
## Status: done
|
|
4
|
+
|
|
5
|
+
`Ea::Ocl` evaluates `->size()` and `->isEmpty()` collection
|
|
6
|
+
operations. Specified in `spec/ea/ocl/ocl_spec.rb` (4 examples).
|
|
7
|
+
|
|
8
|
+
## Implementation
|
|
9
|
+
|
|
10
|
+
- `Nodes::CollectionSize` — `<collection>->size()` AST node.
|
|
11
|
+
- `Nodes::CollectionIsEmpty` — `<collection>->isEmpty()` AST node.
|
|
12
|
+
- `Parser` recognizes `->size` and `->isEmpty` patterns via regex.
|
|
13
|
+
- `Evaluator#eval_size` returns integer; `#eval_is_empty` returns
|
|
14
|
+
boolean. Both check `is_a?(Array)` (not `respond_to?`) per the
|
|
15
|
+
typing rules.
|
|
16
|
+
|
|
17
|
+
## Acceptance
|
|
18
|
+
|
|
19
|
+
- `inv: self.items->size() > 0` parses + evaluates.
|
|
20
|
+
- `inv: self.items->isEmpty() or self.required` parses + evaluates.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# TODO.complete/68: OCL comparison operators
|
|
2
|
+
|
|
3
|
+
## Status: done
|
|
4
|
+
|
|
5
|
+
`Ea::Ocl` evaluates all comparison operators: `>`, `<`, `>=`, `<=`,
|
|
6
|
+
`=`, `==`, `!=`. Non-numeric operands raise `UnsupportedError`.
|
|
7
|
+
|
|
8
|
+
## Implementation
|
|
9
|
+
|
|
10
|
+
- `Nodes::Comparison` — `left op right` AST node.
|
|
11
|
+
- `Parser#split_on_comparison_op` handles all 7 operators with
|
|
12
|
+
correct precedence (multi-char ops like `>=` checked before `>`).
|
|
13
|
+
- `Evaluator#eval_comparison` dispatches on `ast.op`, enforces
|
|
14
|
+
`Numeric` operands.
|
|
15
|
+
|
|
16
|
+
## Acceptance
|
|
17
|
+
|
|
18
|
+
- `inv: self.age >= 18` parses + evaluates.
|
|
19
|
+
- `inv: self.count < self.max` parses + evaluates.
|
|
20
|
+
- `inv: self.x = self.y` evaluates as equality.
|
|
21
|
+
- `inv: self.x != self.y` evaluates as inequality.
|
|
22
|
+
- Non-numeric comparison raises `UnsupportedError`.
|
|
23
|
+
|
|
24
|
+
All specified in `spec/ea/ocl/ocl_spec.rb` (3 examples, 6 assertions).
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# TODO.complete/69: Specs for newly-added QEA models
|
|
2
|
+
|
|
3
|
+
## Status: done
|
|
4
|
+
|
|
5
|
+
All 13 models listed below have primary_key, table_name, column_map,
|
|
6
|
+
and from_db_row coverage in
|
|
7
|
+
`spec/ea/qea/models/auxiliary_models_spec.rb` (66 examples, 0
|
|
8
|
+
failures).
|
|
9
|
+
|
|
10
|
+
## Models covered
|
|
11
|
+
|
|
12
|
+
`EaSecrypt`, `EaPalette`, `EaPaletteItem`, `EaImplement`,
|
|
13
|
+
`EaRoleConstraint`, `EaObjectProblem`, `EaObjectRisk`, `EaObjectTest`,
|
|
14
|
+
`EaObjectEffort`, `EaObjectResource`, `EaObjectScenario`,
|
|
15
|
+
`EaObjectRequire`, `EaObjectTrx`.
|
|
16
|
+
|
|
17
|
+
## Follow-up
|
|
18
|
+
|
|
19
|
+
See [[70-specs-for-all-models]] for expanding spec coverage to the
|
|
20
|
+
remaining 18 models that currently rely on integration tests only.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# TODO.complete/70: Specs for all remaining QEA models
|
|
2
|
+
|
|
3
|
+
## Status: done
|
|
4
|
+
|
|
5
|
+
Added consolidated spec coverage for the 18 remaining QEA models
|
|
6
|
+
that had no dedicated specs. Each model gets `table_name`,
|
|
7
|
+
`primary_key_column`, and `from_db_row` coverage.
|
|
8
|
+
|
|
9
|
+
## Models covered
|
|
10
|
+
|
|
11
|
+
`EaAttributeTag`, `EaAuthor`, `EaComplexityType`, `EaConnectorType`,
|
|
12
|
+
`EaConstraintType`, `EaDatatype`, `EaDiagramLink`,
|
|
13
|
+
`EaDiagramObject`, `EaDiagramType`, `EaGlossary`, `EaImage`,
|
|
14
|
+
`EaList`, `EaObjectProperty`, `EaObjectType`, `EaPhase`,
|
|
15
|
+
`EaStatusType`, `EaStereotype`, `EaTaggedValue`, `EaVersion`.
|
|
16
|
+
|
|
17
|
+
## Implementation
|
|
18
|
+
|
|
19
|
+
Spec file: `spec/ea/qea/models/all_models_spec.rb`. Uses the same
|
|
20
|
+
consolidated pattern as `auxiliary_models_spec.rb` — one shared
|
|
21
|
+
example per model, parameterized by expected table/pk.
|