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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 995544bb338cd3ca1a632cd580c978aeb4e85e59e74cce7d35df5736714e397c
4
- data.tar.gz: c1039f763b50e27f87bfc94f72fdac4de3f542b4a21e7eeb19caf688563ffe9c
3
+ metadata.gz: 6a72022a4812f53c8a781acb37516bd893f69a5213a30f7f82b1f288649e2625
4
+ data.tar.gz: 6a82f59b5fa348f14d89c18b2af5169f91a35cd4000c29e10f6c828661b78626
5
5
  SHA512:
6
- metadata.gz: cbc871ca5c043bc1555fb8940beebe50258bfe901df6b2b2e61a7f572ef103dff9aa757dd9896e555dea8da9bf8f17b5a72e8035caeab044dd9f58d5cd730e33
7
- data.tar.gz: 28a342b4ed8e0129e52f706982d3aa4d0504496fcb15f439158a5c6b8f39128fb1e3ac1dccc12033b55753876904fd9f7f659c66a8181abf3dd249d517ff0741
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 = [attr_bottom_y]
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.compact.max
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 = (is_classifier && show_operations?) ? Element::OperationRenderer.lines_for(classifier) : []
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 + 4 > bounds.y + bounds.height
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 + 4 > bounds.y + bounds.height
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
@@ -4,5 +4,5 @@ module Ea
4
4
  # Gem release version. Extracted to its own file so the
5
5
  # `gem-release` tool's `gem bump` can find and update it via the
6
6
  # standard `lib/<gem>/version.rb` convention.
7
- VERSION = "0.6.22"
7
+ VERSION = "0.6.24"
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ea
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.22
4
+ version: 0.6.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.