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

Version Path
aws_security_viz-0.1.2 lib/graph.rb
aws_security_viz-0.1.2.pre.alpha.pre.61 lib/graph.rb
aws_security_viz-0.1.2.pre.alpha.pre.60 lib/graph.rb
aws_security_viz-0.1.2.pre.alpha.pre.59 lib/graph.rb