class Visualization
Generates Mermaid flowchart visualizations of build graphs.
Definitions
def sanitize_id(path)
Convert a path to a valid Mermaid node ID.
Signature
-
parameter
pathString The path to sanitize.
-
returns
String A sanitized identifier safe for use in Mermaid diagrams.
Implementation
def sanitize_id(path)
path.to_s.gsub(/[^a-zA-Z0-9_]/, "_")
end
def generate(walker)
Generate a Mermaid flowchart diagram for a completed walker.
Signature
-
parameter
walkerWalker The completed walker containing tasks.
-
returns
String A Mermaid flowchart diagram in text format.
Implementation
def generate(walker)
lines = ["flowchart LR"]
seen = {}
walker.tasks.each do |node, task|
next unless task.inputs && task.outputs
next if task.outputs.equal?(:inherit)
input_ids = task.inputs.to_a.map{|path| sanitize_id(path)}
output_ids = task.outputs.to_a.map{|path| sanitize_id(path)}
task.inputs.each do |path|
id = sanitize_id(path)
seen[id] ||= (lines << " #{id}[#{path.basename}]")
end
task.outputs.each do |path|
id = sanitize_id(path)
seen[id] ||= (lines << " #{id}[#{path.basename}]")
end
label = node.respond_to?(:title) ? node.title.to_s : nil
input_ids.each do |input_id|
output_ids.each do |output_id|
if label && !label.empty?
lines << " #{input_id} -->|#{label}| #{output_id}"
else
lines << " #{input_id} --> #{output_id}"
end
end
end
end
return lines.join("\n")
end