Class: MARS::Rendering::Mermaid
- Inherits:
-
Object
- Object
- MARS::Rendering::Mermaid
- Defined in:
- lib/mars/rendering/mermaid.rb
Instance Attribute Summary collapse
-
#graph ⇒ Object
readonly
Returns the value of attribute graph.
-
#nodes ⇒ Object
readonly
Returns the value of attribute nodes.
-
#obj ⇒ Object
readonly
Returns the value of attribute obj.
-
#subgraphs ⇒ Object
readonly
Returns the value of attribute subgraphs.
Instance Method Summary collapse
- #edge_value(value) ⇒ Object
- #edges_mermaid ⇒ Object
- #graph_mermaid ⇒ Object
-
#initialize(obj) ⇒ Mermaid
constructor
A new instance of Mermaid.
- #nodes_mermaid ⇒ Object
- #render(options = {}) ⇒ Object
- #shape(node_id) ⇒ Object
- #subgraphs_mermaid ⇒ Object
Constructor Details
#initialize(obj) ⇒ Mermaid
Returns a new instance of Mermaid.
8 9 10 11 |
# File 'lib/mars/rendering/mermaid.rb', line 8 def initialize(obj) @obj = obj @graph, @nodes, @subgraphs = obj.build_graph end |
Instance Attribute Details
#graph ⇒ Object (readonly)
Returns the value of attribute graph.
6 7 8 |
# File 'lib/mars/rendering/mermaid.rb', line 6 def graph @graph end |
#nodes ⇒ Object (readonly)
Returns the value of attribute nodes.
6 7 8 |
# File 'lib/mars/rendering/mermaid.rb', line 6 def nodes @nodes end |
#obj ⇒ Object (readonly)
Returns the value of attribute obj.
6 7 8 |
# File 'lib/mars/rendering/mermaid.rb', line 6 def obj @obj end |
#subgraphs ⇒ Object (readonly)
Returns the value of attribute subgraphs.
6 7 8 |
# File 'lib/mars/rendering/mermaid.rb', line 6 def subgraphs @subgraphs end |
Instance Method Details
#edge_value(value) ⇒ Object
64 65 66 67 68 |
# File 'lib/mars/rendering/mermaid.rb', line 64 def edge_value(value) return "" unless value "|#{value}|" end |
#edges_mermaid ⇒ Object
40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mars/rendering/mermaid.rb', line 40 def edges_mermaid edges = [] graph.each do |from, tos| tos.each do |to| node_id, value = to edges << "#{from} -->#{edge_value(value)} #{node_id}" end end edges end |
#graph_mermaid ⇒ Object
25 26 27 |
# File 'lib/mars/rendering/mermaid.rb', line 25 def graph_mermaid nodes_mermaid + subgraphs_mermaid + edges_mermaid end |
#nodes_mermaid ⇒ Object
29 30 31 |
# File 'lib/mars/rendering/mermaid.rb', line 29 def nodes_mermaid nodes.keys.map { |node_id| "#{node_id}#{shape(node_id)}" } end |
#render(options = {}) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/mars/rendering/mermaid.rb', line 13 def render( = {}) direction = .fetch(:direction, "LR") mermaid = graph_mermaid.join("\n") <<~MERMAID ```mermaid flowchart #{direction} #{mermaid} ``` MERMAID end |
#shape(node_id) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/mars/rendering/mermaid.rb', line 51 def shape(node_id) node = nodes[node_id] case node.type when Graph::Node::INPUT, Graph::Node::OUTPUT "((#{node.name}))" when Graph::Node::GATE "{#{node.name}}" else "[#{node.name}]" end end |
#subgraphs_mermaid ⇒ Object
33 34 35 36 37 38 |
# File 'lib/mars/rendering/mermaid.rb', line 33 def subgraphs_mermaid subgraphs.values.reverse.map do |subgraph| node_names = subgraph.nodes "subgraph #{subgraph.id}[\"#{subgraph.name}\"]\n #{node_names.join("\n ")}\nend" end end |