class TTY::Tree
Constants
- VERSION
Attributes
nodes[R]
The list of nodes in this tree.
Public Class Methods
[](data)
click to toggle source
@api public
# File lib/tty/tree.rb, line 13 def self.[](data) new(data) end
new(data = nil, options = {}, &block)
click to toggle source
Create a Tree
@param [String,Dir,Hash] data
@api public
# File lib/tty/tree.rb, line 25 def initialize(data = nil, options = {}, &block) @data = data ? data.dup.freeze : nil @walker = select_walker.new(options) @nodes = [] if @data @walker.traverse(data) @nodes = @walker.nodes end @nodes_stack = [] instance_eval(&block) if block_given? freeze end
Public Instance Methods
leaf(name, &block)
click to toggle source
Add leaf node
@api public
# File lib/tty/tree.rb, line 82 def leaf(name, &block) node(name, LeafNode, &block) end
node(name, type = Node, &block)
click to toggle source
Add node to this tree.
@param [Symbol,String] name
the name for the node
@param [Node, LeafNode] type
the type of node to add
@example
TTY::Tree.new do node '...' do node '...' end end
@api public
# File lib/tty/tree.rb, line 58 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 = {})
click to toggle source
@api public
# File lib/tty/tree.rb, line 87 def render(options = {}) as = options.delete(:as) || :dir renderer = select_renderer(as).new(nodes, options) renderer.render end
Private Instance Methods
select_renderer(as)
click to toggle source
# File lib/tty/tree.rb, line 105 def select_renderer(as) case as when :dir, :directory then DirectoryRenderer when :num, :number then NumberRenderer end end
select_walker()
click to toggle source
@api private
# File lib/tty/tree.rb, line 96 def select_walker if @data.is_a?(Hash) || @data.nil? HashWalker else @data ||= Dir.pwd PathWalker end end