Class: Opencdd::Exporters::Mermaid

Inherits:
Visitor
  • Object
show all
Defined in:
lib/opencdd/exporters/mermaid.rb

Instance Attribute Summary collapse

Attributes inherited from Visitor

#seen

Instance Method Summary collapse

Methods inherited from Visitor

#each_sorted, #reset!, #visit_classes, #visit_database, #visit_properties, #visit_property, #visit_relation, #visit_relations, #visit_unit, #visit_units, #visit_value_list, #visit_value_lists, #visit_value_term, #visit_value_terms, #visit_view_control, #visit_view_controls

Constructor Details

#initializeMermaid

Returns a new instance of Mermaid.



8
9
10
11
# File 'lib/opencdd/exporters/mermaid.rb', line 8

def initialize
  super
  @lines = ["classDiagram"]
end

Instance Attribute Details

#linesObject (readonly)

Returns the value of attribute lines.



6
7
8
# File 'lib/opencdd/exporters/mermaid.rb', line 6

def lines
  @lines
end

Instance Method Details

#to_diagram(database) ⇒ Object



13
14
15
16
17
18
# File 'lib/opencdd/exporters/mermaid.rb', line 13

def to_diagram(database)
  reset!
  @lines = ["classDiagram"]
  visit_classes(database)
  @lines.uniq.join("\n")
end

#visit_class(klass) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/opencdd/exporters/mermaid.rb', line 20

def visit_class(klass)
  emit_class_block(klass)
  parent_ref = klass.parent_irdi || klass.superclass_irdi
  if parent_ref
    parent = klass.database&.find(parent_ref)
    if parent
      safe = mermaid_id(parent)
      child = mermaid_id(klass)
      @lines << "  #{safe} <|-- #{child}"
    end
  end
  klass.is_case_of_irdis.each do |ref|
    target = klass.database&.find(ref)
    next unless target
    @lines << "  #{mermaid_id(target)} <.. #{mermaid_id(klass)} : is_case_of"
  end
  super
end