ea 0.6.22 → 0.6.24
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/ea/svg/ea_emitter/element/compartment_geometry.rb +7 -3
- data/lib/ea/svg/ea_emitter/elements.rb +36 -4
- data/lib/ea/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 6a72022a4812f53c8a781acb37516bd893f69a5213a30f7f82b1f288649e2625
|
|
4
|
+
data.tar.gz: 6a82f59b5fa348f14d89c18b2af5169f91a35cd4000c29e10f6c828661b78626
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b7c1c47b59c593cf59c2f039419280963db21de104b3f84f4b32e9d95f7073d9e2356e068271145276a325c266ac3a5e93255bc7faa6932f0dd5b46323fec8c0
|
|
7
|
+
data.tar.gz: 4e3f163d3001eef153396e3eb1be9ecb4fdf8460fcc27c83f3c03f87fff249f6cd8d0fd6e7b2d4e7539cb613d3327955c2837f9b4af436f427fc813c89a8fd29
|
|
@@ -139,17 +139,21 @@ module Ea
|
|
|
139
139
|
return nil unless tagged_values_count.to_i.positive? ||
|
|
140
140
|
constraints_count.to_i.positive?
|
|
141
141
|
|
|
142
|
-
content_bottom_y + size + 5
|
|
142
|
+
(content_bottom_y || raw_attr_first_y) + size + 5
|
|
143
143
|
end
|
|
144
144
|
|
|
145
145
|
# The lowest content edge among attributes, enum literals,
|
|
146
146
|
# operations, and constraints — the anchor for trailing
|
|
147
147
|
# compartments and the autosize height.
|
|
148
|
+
# Nil when no compartment rows render (header-only box):
|
|
149
|
+
# the autosize gate must not treat the empty-compartment
|
|
150
|
+
# anchor as content.
|
|
148
151
|
def content_bottom_y
|
|
149
|
-
bottoms = [
|
|
152
|
+
bottoms = []
|
|
153
|
+
bottoms << attr_bottom_y if attr_lines_count.to_i.positive?
|
|
150
154
|
bottoms << enum_literals_bottom_y if enum_literals_count.to_i.positive?
|
|
151
155
|
bottoms << op_bottom_y if op_lines_count.to_i.positive?
|
|
152
|
-
bottoms.
|
|
156
|
+
bottoms.max
|
|
153
157
|
end
|
|
154
158
|
|
|
155
159
|
def enum_literals_bottom_y
|
|
@@ -73,7 +73,9 @@ module Ea
|
|
|
73
73
|
off_canvas_parent_name: parent_name,
|
|
74
74
|
foreign_package_name: foreign_package_name_for(classifier)) : []
|
|
75
75
|
is_classifier = classifier.is_a?(Ea::Model::Classifier)
|
|
76
|
-
attr_lines = if is_classifier && show_attributes?
|
|
76
|
+
attr_lines = if is_classifier && show_attributes? &&
|
|
77
|
+
!classifier.is_a?(Ea::Model::Interface) &&
|
|
78
|
+
attributes_visible?(element)
|
|
77
79
|
Element::AttributeRenderer.lines_for(
|
|
78
80
|
classifier, lookup: attribute_lookup,
|
|
79
81
|
exclude_association_ids: drawn_association_ids
|
|
@@ -81,7 +83,11 @@ module Ea
|
|
|
81
83
|
else
|
|
82
84
|
[]
|
|
83
85
|
end
|
|
84
|
-
op_lines =
|
|
86
|
+
op_lines = if is_classifier && show_operations? && operations_visible?(element)
|
|
87
|
+
Element::OperationRenderer.lines_for(classifier)
|
|
88
|
+
else
|
|
89
|
+
[]
|
|
90
|
+
end
|
|
85
91
|
geometry = compartment_geometry(bounds, size, attr_lines, op_lines,
|
|
86
92
|
tagged_values_for(classifier).size,
|
|
87
93
|
header_lines, classifier: classifier,
|
|
@@ -96,7 +102,7 @@ module Ea
|
|
|
96
102
|
# TK_PositionType keeps 7 rows ending 6px above the bottom,
|
|
97
103
|
# while a 13px-tighter box loses them all.
|
|
98
104
|
if attr_lines.any? &&
|
|
99
|
-
geometry.attr_bottom_y.to_i +
|
|
105
|
+
geometry.attr_bottom_y.to_i + 3 > bounds.y + bounds.height
|
|
100
106
|
attr_lines = []
|
|
101
107
|
geometry = compartment_geometry(bounds, size, attr_lines, op_lines,
|
|
102
108
|
tagged_values_for(classifier).size,
|
|
@@ -108,7 +114,7 @@ module Ea
|
|
|
108
114
|
# EA suppresses the operations compartment when its rows
|
|
109
115
|
# overflow the stored box height (same rule as attributes).
|
|
110
116
|
if op_lines.any? && geometry.op_first_y &&
|
|
111
|
-
geometry.op_bottom_y.to_i +
|
|
117
|
+
geometry.op_bottom_y.to_i + 3 > bounds.y + bounds.height
|
|
112
118
|
op_lines = []
|
|
113
119
|
geometry = compartment_geometry(bounds, size, attr_lines, op_lines,
|
|
114
120
|
tagged_values_for(classifier).size,
|
|
@@ -193,6 +199,32 @@ module Ea
|
|
|
193
199
|
attr_lines.first.to_s.start_with?("«") ? 11 : 7
|
|
194
200
|
end
|
|
195
201
|
|
|
202
|
+
# EA's per-instance attribute visibility toggles (ObjectStyle
|
|
203
|
+
# AttPub/AttPri/AttPro/AttPkg). When ANY toggle is stored, only
|
|
204
|
+
# attributes of an enabled visibility class render; the GM_*
|
|
205
|
+
# geometry boxes carry all four at 0 and render header-only.
|
|
206
|
+
def attributes_visible?(element)
|
|
207
|
+
toggles = visibility_toggles(element)
|
|
208
|
+
return true if toggles.empty?
|
|
209
|
+
|
|
210
|
+
toggles.values.any? { |v| v == "1" }
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def visibility_toggles(element)
|
|
214
|
+
style = element.style || {}
|
|
215
|
+
%i[attpub attpri attpro attpkg]
|
|
216
|
+
.each_with_object({}) { |k, acc| acc[k] = style[k] if style.key?(k) }
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def operations_visible?(element)
|
|
220
|
+
style = element.style || {}
|
|
221
|
+
keys = %i[oppub oppri oppro oppkg]
|
|
222
|
+
present = keys.select { |k| style.key?(k) }
|
|
223
|
+
return true if present.empty?
|
|
224
|
+
|
|
225
|
+
present.any? { |k| style[k] == "1" }
|
|
226
|
+
end
|
|
227
|
+
|
|
196
228
|
def drawn_association_ids
|
|
197
229
|
(diagram.connectors || []).select(&:renderable?)
|
|
198
230
|
.map(&:relationship_ref).compact.to_set
|
data/lib/ea/version.rb
CHANGED