class TTY::Tree::HashWalker
Walk and collect nodes from hash data strcture.
@api public
Attributes
dirs_count[R]
files_count[R]
nodes[R]
Public Class Methods
new(options = {})
click to toggle source
# File lib/tty/tree/hash_walker.rb, line 19 def initialize(options = {}) @nodes = [] @files_count = 0 @dirs_count = 0 @level = options.fetch(:level) { -1 } @file_limit = options.fetch(:file_limit) { - 1 } end
Public Instance Methods
traverse(data)
click to toggle source
# File lib/tty/tree/hash_walker.rb, line 27 def traverse(data) walk(data, Pathname.new(''), '', 0, false) end
walk(data, parent_path, prefix, level, is_last)
click to toggle source
# File lib/tty/tree/hash_walker.rb, line 31 def walk(data, parent_path, prefix, level, is_last) node = is_last ? LeafNode : Node case data when Hash return if @level != -1 && level + 1 > @level data.each do |dir, item| dir_node = node.new(dir.to_s, parent_path, prefix, level) @nodes << dir_node @dirs_count += 1 unless dir_node.root? if level > 0 postfix = ':pipe' postfix = ':space' if is_last else postfix = '' end walk(item, parent_path + dir.to_s, prefix + postfix, level + 1, false) end when Array return if @file_limit != -1 && data.size > @file_limit last_data_index = data.size - 1 data.each_with_index do |item, i| last = (last_data_index == i) walk(item, parent_path, prefix, level, last) end else @nodes << node.new(data.to_s, parent_path, prefix, level) @files_count += 1 end end