module Journeyviz::Graphable::Externals

Private Instance Methods

graph_external_block(block, chain, sufix) click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 61
      def graph_external_block(block, chain, sufix)
        definition = graph_external_chain(chain, sufix)
        return definition if block.is_a?(Journeyviz::Journey)

        <<~SUBGRAPH
          subgraph #{sufix}_#{graph_id(block)}[#{block.name}]
          #{definition}
          end
        SUBGRAPH
      end
graph_external_chain(nodes, sufix) click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 33
def graph_external_chain(nodes, sufix)
  nodes
    .group_by(&:first)
    .flat_map { |parent, chain| graph_external_chain_node(parent, chain, sufix) }
    .join("\n")
end
graph_external_chain_node(parent, chain, sufix) click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 40
def graph_external_chain_node(parent, chain, sufix)
  chain_without_parent = chain.map { |subchain| subchain[1..-1] }

  if parent.is_a?(Journeyviz::Screen)
    [graph_external_screen(parent, sufix)] + graph_external_transitions(parent)
  else
    graph_external_block(parent, chain_without_parent, sufix)
  end
end
graph_external_screen(screen, sufix) click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 50
def graph_external_screen(screen, sufix)
  "#{sufix}_#{graph_id(screen)}[#{screen.name}]:::external_screen"
end
graph_external_transitions(screen) click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 54
def graph_external_transitions(screen)
  screen
    .actions
    .select { |action| screens.include?(action.transition) }
    .map { |action| "#{graph_id(action)}(#{action.name}):::transition" }
end
graph_inputs() click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 8
      def graph_inputs
        return '' unless defined?(root_scope)

        inputs = self.inputs.map { |screen| screen.full_scope + [screen] }

        return '' if inputs.empty?

        <<~INPUTS
          subgraph inputs
          #{graph_external_chain(inputs, 'input')}
          end
        INPUTS
      end
graph_outputs() click to toggle source
# File lib/journeyviz/graphable/externals.rb, line 22
      def graph_outputs
        outputs = self.outputs.map { |screen| screen.full_scope + [screen] }
        return '' if outputs.empty?

        <<~OUTPUTS
          subgraph outputs
          #{graph_external_chain(outputs, 'output')}
          end
        OUTPUTS
      end