Class: Lutaml::UmlRepository::StaticSite::Serializers::InheritanceResolver

Inherits:
Object
  • Object
show all
Includes:
Lutaml::Uml::ModelHelpers
Defined in:
lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb

Instance Method Summary collapse

Methods included from Lutaml::Uml::ModelHelpers

#class_type_for, #format_cardinality, #normalize_stereotypes, #package_path_for, #parse_cardinality, #qualified_name_for

Constructor Details

#initialize(repository, id_generator, options, generalization_map) ⇒ InheritanceResolver

Returns a new instance of InheritanceResolver.



17
18
19
20
21
22
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 17

def initialize(repository, id_generator, options, generalization_map)
  @repository = repository
  @id_generator = id_generator
  @options = options
  @generalization_map = generalization_map
end

Instance Method Details

#compute_inherited_associations(klass, visited = Set.new) ⇒ Object



52
53
54
55
56
57
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 52

def compute_inherited_associations(klass, visited = Set.new)
  walk_inheritance_chain(klass, visited, :parent_inherited_assocs)
rescue StandardError => e
  warn "Error computing inherited associations: #{e.message}"
  []
end

#compute_inherited_attributes(klass, visited = Set.new) ⇒ Object



45
46
47
48
49
50
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 45

def compute_inherited_attributes(klass, visited = Set.new)
  walk_inheritance_chain(klass, visited, :parent_inherited_attrs)
rescue StandardError => e
  warn "Error computing inherited attributes: #{e.message}"
  []
end

#find_generalizations(klass) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 24

def find_generalizations(klass)
  map_parents = generalization_map_parents(klass)
  return map_parents unless map_parents.nil?

  parent = @repository.supertype_of(klass)
  return [] if parent && parent.xmi_id == klass.xmi_id

  parent ? [@id_generator.class_id(parent)] : []
rescue StandardError => e
  warn "Error finding generalizations for #{klass.name}: #{e.message}"
  []
end

#find_specializations(klass) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 37

def find_specializations(klass)
  children = @repository.subtypes_of(klass)
  children.reject { |child| child.xmi_id == klass.xmi_id }
    .map { |child| @id_generator.class_id(child) }
rescue StandardError
  []
end

#serialize_general_attribute(attr) ⇒ Object



72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 72

def serialize_general_attribute(attr)
  return nil unless attr

  {
    name: attr.name,
    type: attr.type,
    cardinality: serialize_cardinality(attr.cardinality),
    definition: format_definition(attr.definition),
    upperKlass: attr.upper_klass,
    nameNs: attr.name_ns,
    typeNs: attr.type_ns,
  }
end

#serialize_generalization(klass, visited = Set.new) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/lutaml/uml_repository/static_site/serializers/inheritance_resolver.rb', line 59

def serialize_generalization(klass, visited = Set.new)
  return nil unless klass.generalization
  return nil if visited.include?(klass.xmi_id)

  visited.add(klass.xmi_id)
  gen = klass.generalization

  gen_basic_fields(gen).merge(gen_collection_fields(gen))
rescue StandardError => e
  warn "Error serializing generalization: #{e.message}"
  nil
end