Sha256: cb9083f35b29f15a5bdbd2d776c77c00c0aa8490ff424277b561ca1d0d078361

Contents?: true

Size: 1.13 KB

Versions: 4

Compression:

Stored size: 1.13 KB

Contents

require_relative 'process'
require_relative 'rendered_sequence'

module Dogviz
  class SequenceRenderer
    attr_reader :lines

    def initialize(title)
      @lines = []
    end

    def render_edge(from, other, options)

      detail = options[:label]
      receiver_label = other.name
      sender_label = from.name
      if other.is_a?(Process)
        detail = process_annotations(detail, sender_label, receiver_label, other.description)
        receiver_label = process_start_label(receiver_label)
      elsif from.is_a?(Process)
        receiver_label = process_end_label(receiver_label)
      end
      lines << "#{sender_label} -> #{receiver_label}: #{detail}"
    end

    def rendered
      RenderedSequence.new lines
    end

    private

    def process_start_label(receiver_label)
      "+#{receiver_label}"
    end

    def process_end_label(receiver_label)
      "-#{receiver_label}"
    end

    def process_annotations(detail, sender, receiver, process_description)
      detail = [detail,
                "note right of #{receiver}",
                "  #{process_description}",
                'end note'].join("\n")
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

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