Module: Lutaml::Formatter::Graphviz::NodeFormatter

Included in:
Lutaml::Formatter::Graphviz
Defined in:
lib/lutaml/lml/formatter/graphviz/node_formatter.rb

Constant Summary collapse

ACCESS_SYMBOLS =
{
  'public' => '+',
  'protected' => '#',
  'private' => '-'
}.freeze

Instance Method Summary collapse

Instance Method Details

#format_attribute(node) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 13

def format_attribute(node)
  symbol = ACCESS_SYMBOLS[node.visibility]
  result = "#{symbol}#{node.name}"
  if node.type
    keyword = node.keyword ? "«#{node.keyword}»" : ''
    result += " : #{keyword}#{node.type}"
  end
  result += format_cardinality_bounds(node.cardinality) if node.cardinality
  result = escape_html_chars(result)
  result = "<U>#{result}</U>" if node.static
  result
end

#format_cardinality_bounds(cardinality) ⇒ Object



26
27
28
29
30
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 26

def format_cardinality_bounds(cardinality)
  min = cardinality.min || '*'
  max = cardinality.max || '*'
  "[#{min}..#{max}]"
end

#format_class(node, hide_members = nil) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 51

def format_class(node, hide_members = nil)
  name = ["<B>#{escape_html_chars(node.name)}</B>"]
  name.unshift("«#{escape_html_chars(node.keyword)}»") if node.keyword
  name_html = build_name_table(name)

  member_formatter = node.is_a?(Lml::Enum) ? method(:format_enum_member) : nil
  field_table = format_member_rows(node.attributes, hide_members, &member_formatter)
  method_table = format_member_rows(node.operations, hide_members) if node.operations&.any?
  table_body = build_table_body(name_html, field_table, method_table)

  <<~HEREDOC.chomp
    <TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" CELLPADDING="10">
      #{table_body}
    </TABLE>
  HEREDOC
end

#format_enum_literal(node) ⇒ Object



68
69
70
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 68

def format_enum_literal(node)
  "<I>#{escape_html_chars(node.name.to_s)}</I>"
end

#format_operation(node) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 32

def format_operation(node)
  symbol = ACCESS_SYMBOLS[node.visibility]
  params = format_operation_params(node.owned_parameter)
  result = "#{symbol} #{node.name}(#{params})"
  result << " : #{node.return_type}" if node.return_type
  result = escape_html_chars(result)
  result = "<U>#{result}</U>" if node.is_static
  result = "<I>#{result}</I>" if node.is_abstract
  result
end

#format_operation_params(params) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/lutaml/lml/formatter/graphviz/node_formatter.rb', line 43

def format_operation_params(params)
  return '' unless params&.any?

  params.map do |param|
    param.type ? "#{param.name} : #{param.type}" : param.name.to_s
  end.join(', ')
end