Module: Trailblazer::Developer::Trace::Present

Defined in:
lib/trailblazer/developer/trace/present.rb

Defined Under Namespace

Modules: TreeNodes

Class Method Summary collapse

Class Method Details

.call(stack, level: 1, tree: [], renderer: method(:default_renderer), **options) ⇒ Object



12
13
14
# 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:) ⇒ Object



8
9
10
# 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) ⇒ Object



16
17
18
19
20
21
22
23
24
25
# 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) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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