Sha256: 028c8d03809dd0653c66fdd667a3da2e48c16a842cb164b9135d9960c0d82564
Contents?: true
Size: 896 Bytes
Versions: 4
Compression:
Stored size: 896 Bytes
Contents
class Graph attr_reader :ops def initialize(config) @config = config @ops = [] @nodes = Set.new end def add_node(name) log("node: #{name}") uniquely_add(@ops, :node, name) { [:node, name] } end #TODO : Dedup edge labels ? #TODO : Remove env dependencies def add_edge(from, to, opts) log("edge: #{from} -> #{to}") add_node(from) add_node(to) uniquely_add(@ops, :edge, from, to) { [:edge, from, to, opts] } end def output(renderer) @ops.each { |op, *args| renderer.add_node(*args) if op==:node renderer.add_edge(*args) if op==:edge } renderer.output end def uniquely_add(target, type, *opts, &block) return if opts.compact.empty? return if @nodes.include?([type, opts]) @nodes.add([type, opts]) target << yield end def log(msg) puts msg if ENV["DEBUG"] end end
Version data entries
4 entries across 4 versions & 1 rubygems