Sha256: 94831d3053daa1b79fb8b8d2893c79ae2c3d5a3774b7eb423538a8a67be620a7

Contents?: true

Size: 1.97 KB

Versions: 1

Compression:

Stored size: 1.97 KB

Contents

require_relative 'parent'
require_relative 'nominator'
require_relative 'registry'

module Dogviz
  class System
    include Parent
    include Nominator

    attr_reader :render_hints, :title, :children, :graph

    alias :name :title
    alias :render_options :render_hints

    def initialize(name, hints = {splines: 'line'})
      @children = []
      @by_name = Registry.new name
      @non_render_hints = remove_dogviz_hints!(hints)
      @render_hints = hints
      @title = create_title(name)
      @rendered = false
    end

    def output(*args)
      render
      out = graph.output *args
      puts "Created output: #{args.join ' '}" if run_from_command_line?
      out
    end

    def flow(name)
      Flow.new self, name
    end

    def render(type=:graphviz)
      return @graph if @rendered
      renderer = create_renderer(type)

      children.each { |c|
        c.render renderer
      }
      children.each { |c|
        c.render_edges renderer
      }
      @rendered = true
      @graph = renderer.graph
    end

    def create_renderer(type)
      if type == :graphviz
        GraphvizRenderer.new @title, render_hints
      elsif type == :sigma
        SigmaRenderer.new @title
      else
        raise "dunno bout that '#{type}', only know :graphviz or :sigma"
      end

    end

    def rollup?
      false
    end

    def skip?
      false
    end

    def register(name, thing)
      @by_name.register name, thing
    end

    def colorize_edges?
      @non_render_hints[:colorize_edges]
    end

    def auto_nominate?
      @non_render_hints[:auto_nominate]
    end
    


    private

    def remove_dogviz_hints!(hints)
      dogviz_only_hints = {}
      %i(colorize_edges auto_nominate).each { |k|
        dogviz_only_hints[k] = hints.delete k
      }
      dogviz_only_hints
    end

    def create_title(name)
      now = DateTime.now
      "#{now.strftime '%H:%M'} #{name} #{now.strftime '%F'}"
    end

    def run_from_command_line?
      $stdout.isatty
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dogviz-0.0.21 lib/dogviz/system.rb