Class: Lhj::Tree
- Inherits:
-
Object
- Object
- Lhj::Tree
- Defined in:
- lib/lhj/tree/node.rb,
lib/lhj/tree/tree.rb,
lib/lhj/tree/hash_walker.rb,
lib/lhj/tree/path_walker.rb,
lib/lhj/tree/number_renderer.rb,
lib/lhj/tree/directory_renderer.rb
Defined Under Namespace
Classes: DirectoryRenderer, HashWalker, LeafNode, Node, NumberRenderer, PathWalker
Instance Attribute Summary collapse
-
#nodes ⇒ Object
readonly
The list of nodes in this tree.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(data = nil, options = {}, &block) ⇒ Tree
constructor
Create a Tree.
-
#leaf(name, &block) ⇒ Object
Add leaf node.
-
#node(name, type = Node, &block) ⇒ Object
Add node to this tree.
- #render(options = {}) ⇒ Object
Constructor Details
#initialize(data = nil, options = {}, &block) ⇒ Tree
Create a Tree
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/lhj/tree/tree.rb', line 24 def initialize(data = nil, = {}, &block) @data = data ? data.dup.freeze : nil @walker = select_walker.new() @nodes = [] if @data @walker.traverse(data) @nodes = @walker.nodes end @nodes_stack = [] instance_eval(&block) if block_given? freeze end |
Instance Attribute Details
#nodes ⇒ Object (readonly)
The list of nodes in this tree.
17 18 19 |
# File 'lib/lhj/tree/tree.rb', line 17 def nodes @nodes end |
Class Method Details
.[](data) ⇒ Object
12 13 14 |
# File 'lib/lhj/tree/tree.rb', line 12 def self.[](data) new(data) end |
Instance Method Details
#leaf(name, &block) ⇒ Object
Add leaf node
81 82 83 |
# File 'lib/lhj/tree/tree.rb', line 81 def leaf(name, &block) node(name, LeafNode, &block) end |
#node(name, type = Node, &block) ⇒ Object
Add node to this tree.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/lhj/tree/tree.rb', line 57 def node(name, type = Node, &block) parent = @nodes_stack.empty? ? Node::ROOT : @nodes_stack.last level = [0, @nodes_stack.size - 1].max prefix = ':pipe' * level if parent.class == LeafNode prefix = ':space' * level end node = type.new(name, parent.full_path, prefix, @nodes_stack.size) @nodes << node return unless block_given? @nodes_stack << node if block.arity.zero? instance_eval(&block) else instance_eval(&(->(*_args) { block[node] })) end @nodes_stack.pop end |
#render(options = {}) ⇒ Object
86 87 88 89 90 |
# File 'lib/lhj/tree/tree.rb', line 86 def render( = {}) as = .delete(:as) || :dir renderer = select_renderer(as).new(nodes, ) renderer.render end |