Class: Lutaml::Qea::Factory::GeneralizationBuilder
Instance Attribute Summary
#database
Instance Method Summary
collapse
#initialize, #transform, #transform_collection
Instance Method Details
#base_attr_hash(attr) ⇒ Object
72
73
74
75
76
77
78
79
80
81
82
83
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 72
def base_attr_hash(attr)
{
id: attr.id,
name: attr.name,
type: attr.type,
xmi_id: attr.xmi_id,
cardinality: attr.cardinality,
definition: attr.definition&.strip,
association: attr.association,
type_ns: attr.type_ns,
}
end
|
#circular_inheritance?(object_id, visited) ⇒ Boolean
28
29
30
31
32
33
34
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 28
def circular_inheritance?(object_id, visited)
return false unless visited.include?(object_id)
warn "Circular inheritance detected for object_id #{object_id}, " \
"stopping recursion"
true
end
|
#convert_to_general_attributes(attributes) ⇒ Object
47
48
49
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 47
def convert_to_general_attributes(attributes)
attributes.map { |attr| to_general_attribute(attr) }
end
|
#convert_to_top_element_attributes(attributes) ⇒ Object
51
52
53
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 51
def convert_to_top_element_attributes(attributes)
attributes.map { |attr| to_top_element_attribute(attr) }
end
|
#load_association_generalizations(object_id) ⇒ Object
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 36
def load_association_generalizations(object_id)
return [] if object_id.nil?
gen_connectors = database.connectors_for_object(object_id)
.select { |c| c.generalization? && c.start_object_id == object_id }
gen_connectors.filter_map do |ea_connector|
build_assoc_generalization(ea_connector)
end
end
|
#load_generalization(object_id, visited = Set.new, is_leaf = true) ⇒ Object
rubocop:disable Style/OptionalBooleanParameter
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 7
def load_generalization(object_id, visited = Set.new, is_leaf = true) return nil if object_id.nil?
return nil if circular_inheritance?(object_id, visited)
visited = visited.dup.add(object_id)
current_obj = find_object_by_id(object_id)
return nil unless current_obj
generalization = build_generalization(object_id, current_obj)
return nil unless generalization
populate_generalization_attrs(generalization, object_id)
populate_parent_generalization(generalization,
ea_connector_for(object_id), visited)
collect_inherited_properties(generalization) if is_leaf && generalization.has_general
generalization
end
|
#to_general_attribute(attr) ⇒ Object
55
56
57
58
59
60
61
62
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 55
def to_general_attribute(attr)
base = base_attr_hash(attr)
Lutaml::Uml::GeneralAttribute.new.tap do |gen_attr|
base.each { |k, v| gen_attr.public_send(:"#{k}=", v) }
gen_attr.is_derived = !!attr.is_derived
gen_attr.has_association = !!attr.association
end
end
|
#to_top_element_attribute(attr) ⇒ Object
64
65
66
67
68
69
70
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 64
def to_top_element_attribute(attr)
base = base_attr_hash(attr)
Lutaml::Uml::TopElementAttribute.new.tap do |top_attr|
base.each { |k, v| top_attr.public_send(:"#{k}=", v) }
top_attr.is_derived = !!attr.is_derived
end
end
|