Build::GraphSourceBuildGraphVisualization

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 path String

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 walker Walker

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