Class: Ea::Sources::Qea::TaggedValueBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ea/sources/qea/tagged_value_builder.rb

Overview

Builds Ea::Model::TaggedValue instances from EA's t_taggedvalue AND t_objectproperties tables. EA stores UML profile tagged values in t_taggedvalue (keyed by ElementID GUID), and per-object custom properties in t_objectproperties (keyed by Object_ID integer). Both surface as tagged values in the SVG output and merge into one list per classifier.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database) ⇒ TaggedValueBuilder

Returns a new instance of TaggedValueBuilder.



15
16
17
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 15

def initialize(database)
  @database = database
end

Instance Attribute Details

#databaseObject (readonly)

Returns the value of attribute database.



13
14
15
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 13

def database
  @database
end

Instance Method Details

#build_from_object_property(row) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 47

def build_from_object_property(row)
  Ea::Model::TaggedValue.new(
    id: IdNormalizer.synthetic("op", row.ea_object_id.to_s,
                               row.property&.gsub(/\W+/, "_")),
    key: row.property,
    value: row.value
  )
end

#build_from_tagged_value(row, owner_guid) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 38

def build_from_tagged_value(row, owner_guid)
  Ea::Model::TaggedValue.new(
    id: IdNormalizer.synthetic("tv", owner_guid,
                               row.tag&.gsub(/\W+/, "_")),
    key: row.tag,
    value: row.value
  )
end

#for_attribute(attribute_row) ⇒ Object



31
32
33
34
35
36
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 31

def for_attribute(attribute_row)
  return [] unless attribute_row.is_a?(Ea::Qea::Models::EaAttribute)

  rows = database.tagged_values_for_element(attribute_row.ea_guid) || []
  rows.map { |row| build_from_tagged_value(row, attribute_row.ea_guid) }
end

#for_object(ea_guid, ea_object_id: nil) ⇒ Object

Build tagged values for an EA object. Pass both the GUID (for t_taggedvalue lookups) and the integer EA Object_ID (for t_objectproperties lookups).



22
23
24
25
26
27
28
29
# File 'lib/ea/sources/qea/tagged_value_builder.rb', line 22

def for_object(ea_guid, ea_object_id: nil)
  rows = database.tagged_values_for_element(ea_guid) || []
  tv = rows.map { |row| build_from_tagged_value(row, ea_guid) }
  return tv unless ea_object_id

  prop_rows = database.properties_for_object(ea_object_id) || []
  tv + prop_rows.map { |row| build_from_object_property(row) }
end