Sha256: 31215bcf528f83e9c4ae513981ff768c42ef8d57fa8fed09f63e32834c07f5dd

Contents?: true

Size: 1.45 KB

Versions: 4

Compression:

Stored size: 1.45 KB

Contents

require_relative 'sequence_renderer'
require_relative 'thing'
require_relative 'process'

module Dogviz
  class Flow
    def initialize(sys, name)
      @sys = sys
      @name = name
      @calls = []
    end

    def make_connections
      calls.each { |from, to, label|
        thing_of(from).points_to thing_of(to), label: label
      }
    end

    def flows(*steps)
      from = nil
      to = nil
      label = nil
      steps.each do |step|
        if from.nil?
          from = ensure_is_thing(step)
        elsif label.nil? && step.is_a?(String)
          label = step
        elsif to.nil?
          to = ensure_is_thing(step)
        end
        unless to.nil?
          calls << [from, to, label]
          from = to
          to = label = nil
        end
      end
    end

    def ensure_is_thing(step)
      raise "Expected some thing or process: '#{step}' already got: #{calls}" unless step.is_a?(Thing) || step.is_a?(Process)
      step
    end

    def output(type_to_file)
      type = type_to_file.keys.first
      raise "Only support sequence, not: '#{type}'" unless type == :sequence
      render.output(type_to_file)
    end

    def render
      renderer = SequenceRenderer.new(@name)
      calls.each do |from, to, label|
        renderer.render_edge from, to, {label: label}
      end
      renderer.rendered
    end

    private

    attr_reader :calls, :sys

    def thing_of(it)
      return it.processor if it.is_a?(Process)
      it
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
dogviz-0.0.21 lib/dogviz/flow.rb
dogviz-0.0.20 lib/dogviz/flow.rb
dogviz-0.0.19 lib/dogviz/flow.rb
dogviz-0.0.18 lib/dogviz/flow.rb