Class: StackOperations::MkTree

Inherits:
Object
  • Object
show all
Defined in:
lib/mk_stack/mk_stack.rb

Direct Known Subclasses

MkFlatten, MkNest, MkStack

Instance Method Summary collapse

Instance Method Details

#mk_dir_tree(dir, current_level = 1, max_level = 2, dirs_only: false) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/mk_stack/mk_stack.rb', line 37

def mk_dir_tree(dir, current_level = 1, max_level = 2, dirs_only: false)
  tree = {}
  return tree unless File.directory?(dir)

  Dir.children(dir).sort.each do |entry|
    path = File.join(dir, entry)
    is_dir = File.directory?(path)
    next if dirs_only && !is_dir

    if is_dir
      tree[entry] = current_level < max_level ? mk_dir_tree(path, current_level + 1, max_level, dirs_only: dirs_only) : {}
    else
      tree[entry] = nil
    end
  end
  tree
end


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/mk_stack/mk_stack.rb', line 55

def print_tree(tree, is_last_arr = [])
  entries = tree.keys
  entries.each_with_index do |entry, idx|
    is_last = idx == entries.size - 1
    prefix = ""
    is_last_arr.each { |last| prefix += last ? "    " : "" }
    prefix += is_last ? "└── " : "├── "
    
    is_dir = tree[entry].is_a?(Hash)
    name = is_dir ? "#{entry}/" : entry
    puts "#{prefix}#{name}"
    
    if is_dir
      print_tree(tree[entry], is_last_arr + [is_last])
    end
  end
end