module Trailblazer::Developer::Trace::Present

Public Instance Methods

call(stack, level: 1, tree: [], renderer: method(:default_renderer), **options) click to toggle source
# File lib/trailblazer/developer/trace/present.rb, line 12
def call(stack, level: 1, tree: [], renderer: method(:default_renderer), **options)
  tree(stack.to_a, level, tree: tree, renderer: renderer, **options)
end
default_renderer(task_node:, **) click to toggle source
# File lib/trailblazer/developer/trace/present.rb, line 8
def default_renderer(task_node:, **)
  [ task_node.level, %{#{task_node.value}} ]
end
tree(stack, level, tree:, renderer:, **options) click to toggle source
# File lib/trailblazer/developer/trace/present.rb, line 16
def tree(stack, level, tree:, renderer:, **options)
  opts = options.merge(tree: tree)
  tree_for(stack, level, **opts)

  nodes = tree.each_with_index.map do |task_node, position|
    renderer.(task_node: task_node, position: position, tree: tree)
  end

  Hirb::Console.format_output(nodes, class: :tree, type: :directory, multi_line_nodes: true)
end
tree_for(stack, level, tree:, **options) click to toggle source
# File lib/trailblazer/developer/trace/present.rb, line 27
def tree_for(stack, level, tree:, **options)
  stack.each do |lvl| # always a Stack::Task[input, ..., output]
    input, output, nested = Trace::Level.input_output_nested_for_level(lvl)

    tree.push(*TreeNodes.for(level, **options.merge(input: input, output: output)))

    if nested.any? # nesting
      opts = options.merge(tree: tree)
      tree_for(nested, level + 1, **opts)
    end

    tree
  end
end