Module: Lutaml::Formatter::Graphviz::DocumentFormatter
- Included in:
- Lutaml::Formatter::Graphviz
- Defined in:
- lib/lutaml/lml/formatter/graphviz/document_formatter.rb
Instance Method Summary collapse
- #build_associations(node, hide_other_classes) ⇒ Object
- #build_digraph(classes, associations) ⇒ Object
- #collect_all_associations(node) ⇒ Object
- #extract_fidelity_options(node) ⇒ Object
- #format_all_classes(node, hide_members) ⇒ Object
- #format_document(node) ⇒ Object
- #format_filtered_associations(associations, classes_names, hide_other_classes) ⇒ Object
- #indent_lines(text) ⇒ Object
Instance Method Details
#build_associations(node, hide_other_classes) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 38 def build_associations(node, hide_other_classes) associations = collect_all_associations(node) associations = sort_by_document_grouping(node.groups, associations) if node.groups classes_names = node.classes.map(&:name) format_filtered_associations(associations, classes_names, hide_other_classes) end |
#build_digraph(classes, associations) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 60 def build_digraph(classes, associations) indented_classes = indent_lines(classes) indented_assocs = indent_lines(associations) <<~HEREDOC digraph G { graph [#{@graph}] edge [#{@edge}] node [#{@node}] #{indented_classes} #{indented_assocs} } HEREDOC end |
#collect_all_associations(node) ⇒ Object
45 46 47 48 49 50 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 45 def collect_all_associations(node) class_level = node.classifiable_classes seen = Set.new all = class_level.filter_map(&:associations).flatten + node.associations all.uniq { |a| association_key(a) } end |
#extract_fidelity_options(node) ⇒ Object
18 19 20 21 22 23 24 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 18 def (node) if node.fidelity [node.fidelity.hideMembers, node.fidelity.hideOtherClasses] else [nil, nil] end end |
#format_all_classes(node, hide_members) ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 26 def format_all_classes(node, hide_members) node.all_classes.map do |class_node| graph_node_name = generate_graph_name(class_node.name) <<~HEREDOC #{graph_node_name} [ shape="plain" fontname="#{@fontname || DEFAULT_CLASS_FONT}" label=<#{format_class(class_node, hide_members)}>] HEREDOC end.join("\n") end |
#format_document(node) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 7 def format_document(node) @fontname = node.fontname || DEFAULT_CLASS_FONT @node['fontname'] = "#{@fontname}-bold" hide_members, hide_other_classes = (node) classes = format_all_classes(node, hide_members) associations = build_associations(node, hide_other_classes) build_digraph(classes, associations) end |
#format_filtered_associations(associations, classes_names, hide_other_classes) ⇒ Object
52 53 54 55 56 57 58 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 52 def format_filtered_associations(associations, classes_names, hide_other_classes) associations.filter_map do |assoc_node| next if hide_other_classes && !classes_names.include?(assoc_node.member_end) format_relationship(assoc_node) end.join("\n") end |
#indent_lines(text) ⇒ Object
77 78 79 |
# File 'lib/lutaml/lml/formatter/graphviz/document_formatter.rb', line 77 def indent_lines(text) text.lines.map { |line| " #{line}" }.join.chomp end |