tree_uzuki 0.4.3 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/tree_uzuki +22 -4
- data/lib/tree/scanner.rb +32 -0
- data/lib/tree/tree_render.rb +41 -28
- data/lib/tree.rb +29 -17
- metadata +2 -2
- data/lib/tree/walker.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2caf22d2ab177a8257ef5a108d54337bc0cbd207d977c9c4f360e447da927050
|
4
|
+
data.tar.gz: ae750495d32cf63b9d2ffcaabb4492d21c71d0ead4e251be4a6d52bc9990d8fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a562ff1cc7082d2a3afeff097d603e4538516e00ad7323e88c9ec5839dc2de151f9d7f9d8e1dff0014e78d8e77bff652941aa21ee4ea367f0ce9a222eaac5402
|
7
|
+
data.tar.gz: 5cc0ce16318b456252683a351247786cfdae78d8ec467cab13cb06a46324d1865408230aeb5f80ee75629a73729d05382bf0bcb9125de95cce5ccf6973f64f61
|
data/bin/tree_uzuki
CHANGED
@@ -1,9 +1,27 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# !/usr/bin/env ruby
|
3
4
|
|
4
5
|
require 'tree'
|
6
|
+
|
5
7
|
if ARGV.empty?
|
6
|
-
|
8
|
+
tree = Tree.new
|
9
|
+
tree.run
|
10
|
+
path_array, directories, files, tree_data, root = tree.run_results
|
11
|
+
tree_data, root, files, directories = Scanner.new.scan(path_array,
|
12
|
+
directories,
|
13
|
+
files,
|
14
|
+
tree_data,
|
15
|
+
root)
|
16
|
+
TreeRender.new.render(tree_data, root, files, directories)
|
7
17
|
else
|
8
|
-
|
9
|
-
|
18
|
+
tree = Tree.new(ARGV[0])
|
19
|
+
tree.run
|
20
|
+
path_array, directories, files, tree_data, root = tree.run_results
|
21
|
+
tree_data, root, files, directories = Scanner.new.scan(path_array,
|
22
|
+
directories,
|
23
|
+
files,
|
24
|
+
tree_data,
|
25
|
+
root)
|
26
|
+
TreeRender.new.render(tree_data, root, files, directories)
|
27
|
+
end
|
data/lib/tree/scanner.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
# Scanner class scan all directories of root array and return all children
|
6
|
+
class Scanner
|
7
|
+
def scan(path_array, directories, files, tree_data, root)
|
8
|
+
folders_arr = []
|
9
|
+
path_array.each do |i|
|
10
|
+
if i.file?
|
11
|
+
files += 1
|
12
|
+
next
|
13
|
+
else
|
14
|
+
directories += 1
|
15
|
+
begin
|
16
|
+
i.each_child do |dir|
|
17
|
+
folders_arr << dir
|
18
|
+
tree_data << dir
|
19
|
+
i = dir
|
20
|
+
end
|
21
|
+
rescue Errno::EACCES, Errno::ENOENT, Errno::ENOTDIR
|
22
|
+
next
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
if folders_arr.empty?
|
27
|
+
return [tree_data, root, files, directories]
|
28
|
+
else
|
29
|
+
scan(folders_arr, directories, files, tree_data, root)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/tree/tree_render.rb
CHANGED
@@ -1,42 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathname'
|
2
4
|
|
3
|
-
class
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
# TreeRender class build directory tree and print it in console
|
6
|
+
class TreeRender
|
7
|
+
attr_reader :final_hash
|
8
|
+
|
9
|
+
def render(tree_data, root, files, directories)
|
10
|
+
@final_hash = {}
|
11
|
+
branch = '├── '
|
12
|
+
pipe = '│ '
|
13
|
+
turn = '└── '
|
14
|
+
space = ' '
|
10
15
|
tree_data.sort!
|
11
16
|
i = tree_data.length
|
12
|
-
loop do
|
17
|
+
loop do
|
18
|
+
i -= 1
|
13
19
|
break if i == -1
|
20
|
+
|
14
21
|
leaf_level = tree_data[i].to_s.count('/') - root.to_s.count('/')
|
15
|
-
final_hash[i] =
|
22
|
+
@final_hash[i] = []
|
16
23
|
if leaf_level == 1
|
17
|
-
final_hash[i] << branch
|
18
|
-
final_hash[i] << File.basename(tree_data[i])
|
24
|
+
@final_hash[i] << branch
|
25
|
+
@final_hash[i] << File.basename(tree_data[i])
|
19
26
|
else
|
20
|
-
final_hash[i] << space
|
21
|
-
(leaf_level-2).times {final_hash[i] << space}
|
22
|
-
final_hash[i] << branch
|
23
|
-
final_hash[i] << File.basename(tree_data[i])
|
27
|
+
@final_hash[i] << space
|
28
|
+
(leaf_level - 2).times { @final_hash[i] << space }
|
29
|
+
@final_hash[i] << branch
|
30
|
+
@final_hash[i] << File.basename(tree_data[i])
|
24
31
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
final_hash[i][index] =
|
32
|
+
(0..@final_hash[i].size).each do |index|
|
33
|
+
if @final_hash[i + 1].nil? && @final_hash[i][index] == branch
|
34
|
+
@final_hash[i][index] = turn
|
35
|
+
elsif @final_hash[i + 1].nil?
|
36
|
+
next
|
37
|
+
elsif @final_hash[i][index] == space &&
|
38
|
+
(@final_hash[i + 1][index] == branch ||
|
39
|
+
@final_hash[i + 1][index] == pipe ||
|
40
|
+
@final_hash[i + 1][index] == turn)
|
41
|
+
@final_hash[i][index] = pipe
|
42
|
+
elsif @final_hash[i][index] == branch &&
|
43
|
+
(@final_hash[i + 1][index] != branch &&
|
44
|
+
@final_hash[i + 1][index] != pipe &&
|
45
|
+
@final_hash[i + 1][index] != turn)
|
46
|
+
@final_hash[i][index] = turn
|
35
47
|
end
|
36
48
|
end
|
37
49
|
end
|
38
50
|
puts root
|
39
|
-
final_hash = final_hash.each.sort_by{ |k,
|
40
|
-
final_hash.each { |
|
51
|
+
@final_hash = @final_hash.each.sort_by { |k, _| k }
|
52
|
+
@final_hash.each { |_, v| puts v.join }
|
53
|
+
puts "#{files} files, #{directories} directories"
|
41
54
|
end
|
42
|
-
end
|
55
|
+
end
|
data/lib/tree.rb
CHANGED
@@ -1,22 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'pathname'
|
2
|
-
|
3
|
-
|
4
|
+
require_relative 'tree/scanner'
|
5
|
+
require_relative 'tree/tree_render'
|
4
6
|
|
7
|
+
# Tree class create array of all root directories
|
5
8
|
class Tree
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
attr_reader :root,
|
10
|
+
:directories,
|
11
|
+
:files,
|
12
|
+
:tree_data,
|
13
|
+
:path_array
|
14
|
+
|
15
|
+
def initialize(path = Dir.pwd)
|
16
|
+
@root = path
|
17
|
+
@directories = 0
|
18
|
+
@files = 0
|
19
|
+
@tree_data = []
|
20
|
+
@path_array = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
@root = Pathname.new(@root)
|
25
|
+
@root.each_child do |dir|
|
26
|
+
@path_array << dir
|
27
|
+
@tree_data << dir
|
15
28
|
end
|
16
|
-
tree_data = Walker.new.dir_walk(path_array, directories, files, tree_data)
|
17
|
-
files = tree_data.last
|
18
|
-
tree_data.pop
|
19
|
-
Tree_render.new.rendering(tree_data, root)
|
20
|
-
puts files
|
21
29
|
end
|
22
|
-
|
30
|
+
|
31
|
+
def run_results
|
32
|
+
[@path_array, @directories, @files, @tree_data, @root]
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tree_uzuki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sunset Uzuki
|
@@ -19,8 +19,8 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- bin/tree_uzuki
|
21
21
|
- lib/tree.rb
|
22
|
+
- lib/tree/scanner.rb
|
22
23
|
- lib/tree/tree_render.rb
|
23
|
-
- lib/tree/walker.rb
|
24
24
|
homepage: https://rubygems.org/gems/Tree_uzuki
|
25
25
|
licenses:
|
26
26
|
- MIT
|
data/lib/tree/walker.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
|
3
|
-
class Walker
|
4
|
-
def dir_walk (path_array, directories, files, tree_data)
|
5
|
-
folders_arr = []
|
6
|
-
path_array.each do |i|
|
7
|
-
if i.file?
|
8
|
-
files += 1
|
9
|
-
next
|
10
|
-
else
|
11
|
-
directories += 1
|
12
|
-
begin
|
13
|
-
i.each_child do |dir|
|
14
|
-
folders_arr << dir
|
15
|
-
tree_data << dir
|
16
|
-
i = dir
|
17
|
-
end
|
18
|
-
rescue Errno::EACCES, Errno::ENOENT,Errno::ENOTDIR
|
19
|
-
next
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
if folders_arr.empty?
|
24
|
-
tree_data << "#{directories} directories, #{files} files"
|
25
|
-
return tree_data
|
26
|
-
else
|
27
|
-
dir_walk(folders_arr, directories, files, tree_data)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|