Module: Eco::Data::Locations::NodeBase::Treeify

Includes:
Language::AuxiliarLogger
Included in:
Builder, Parsing, Serial
Defined in:
lib/eco/data/locations/node_base/treeify.rb

Overview

Note:

expects nodes to have these properties:

  1. id, name and parentId
  2. parent
  3. tracked_level

Generic treeifier

Instance Attribute Summary

Attributes included from Language::AuxiliarLogger

#logger

Instance Method Summary collapse

Methods included from Language::AuxiliarLogger

#log

Instance Method Details

#treeify(nodes, skipped: [], unlinked_trees: []) {|NodeBase| ... } ⇒ Array<Hash>

Note:

if block is no given, it auto-detects the serializer block.

Returns a hierarchical tree of nested Hashes via nodes key.

Yields:

Yield Returns:

  • (Hash)

    custom hash model when treeifying (allows to set more keys/properties).

Returns:

  • (Array<Hash>)

    a hierarchical tree of nested Hashes via nodes key.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/eco/data/locations/node_base/treeify.rb', line 15

def treeify(nodes, skipped: [], unlinked_trees: [], &block)
  return [] if nodes.empty?
  block ||= nodes.first.class.serializer
  done_ids = {}
  warns    = []
  parents  = parents_hash(nodes)
  get_children(nil, parents, done_ids: done_ids, skipped: skipped, warns: warns, &block).tap do |tree|
    check_results(
      tree,
      nodes,
      parents,
      done_ids: done_ids,
      skipped: skipped,
      unlinked_trees: unlinked_trees,
      warns: warns,
      &block
    )
    log(:warn) { warns.join("\n") } unless warns.empty?
  end
end