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
77
78
79
80
81
82
83
84
85
86
87
88
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 77
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
33
34
35
36
37
38
39
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 33
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
52
53
54
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 52
def convert_to_general_attributes(attributes)
attributes.map { |attr| to_general_attribute(attr) }
end
|
#convert_to_top_element_attributes(attributes) ⇒ Object
56
57
58
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 56
def convert_to_top_element_attributes(attributes)
attributes.map { |attr| to_top_element_attribute(attr) }
end
|
#load_association_generalizations(object_id) ⇒ Object
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 41
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
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 12
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
60
61
62
63
64
65
66
67
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 60
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
69
70
71
72
73
74
75
|
# File 'lib/lutaml/qea/factory/generalization_builder.rb', line 69
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
|