tree_uzuki 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 64ab423150b490a350c777584e9c5729d87fcd2065d25a1fe3d4bdbb46c5553f
4
+ data.tar.gz: 92c435ad2a2e334c049b836e20cd17a4e9798f8c5440af81b3fe0f4d30bccf9c
5
+ SHA512:
6
+ metadata.gz: a7da5b0e271448d1b59966ecde9b673f01592cb8ecefdd21284c14a0bed8af9fa3ebb1468e1b61d933e92bb1e7a7ccdd0498488ea059dbbc24ef9e057cb6de9d
7
+ data.tar.gz: 5649e69a63d602c79e6e2f71f03ba8580470a135956a58ec51b3880cc7ef0d2042cefb563d2feefb12c04a12089d9ed26e8c8fa2ad81f4c232018235bce7401f
@@ -0,0 +1,44 @@
1
+ require 'pathname'
2
+
3
+
4
+ class Tree_render
5
+ def render(tree_data,root)
6
+ final_hash = {}
7
+ branch = "├── "
8
+ pipe = "│ "
9
+ turn = "└── "
10
+ space = " "
11
+
12
+ tree_data.sort!
13
+ i = tree_data.length
14
+ loop do i-=1
15
+ break if i == -1
16
+ leaf_level = tree_data[i].to_s.count('/') - root.to_s.count('/')
17
+ final_hash[i] = Array.new
18
+ if leaf_level == 1
19
+ final_hash[i] << branch
20
+ final_hash[i] << File.basename(tree_data[i])
21
+ else
22
+ final_hash[i] << space
23
+ (leaf_level-2).times {final_hash[i] << space}
24
+ final_hash[i] << branch
25
+ final_hash[i] << File.basename(tree_data[i])
26
+ end
27
+ for index in (0..final_hash[i].size)
28
+ next if final_hash[i+1] == nil
29
+ if final_hash[i][index] == space && (final_hash[i+1][index] == branch ||
30
+ final_hash[i+1][index] == pipe ||
31
+ final_hash[i+1][index] == turn)
32
+ final_hash[i][index] = pipe
33
+ elsif final_hash[i][index] == branch && (final_hash[i+1][index] != branch &&
34
+ final_hash[i+1][index] != pipe &&
35
+ final_hash[i+1][index] != turn)
36
+ final_hash[i][index] = turn
37
+ end
38
+ end
39
+ end
40
+ puts root
41
+ final_hash = final_hash.each.sort_by{ |k,v| k }
42
+ final_hash.each { |k,v| puts v.join }
43
+ end
44
+ end
@@ -0,0 +1,29 @@
1
+ require 'pathname'
2
+
3
+
4
+ class Walker
5
+ def dir_walker (path_array, directories, files, level, tree_data)
6
+ level += 1
7
+ folders_arr = []
8
+ for i in (0..path_array.length-1)
9
+ if path_array[i].file?
10
+ files += 1
11
+ next
12
+ else
13
+ directories += 1
14
+ path_array[i].each_child do |dir|
15
+ folders_arr << dir
16
+ tree_data << dir
17
+ path_array[i] = dir
18
+ end
19
+ end
20
+ end
21
+ if folders_arr.empty?
22
+ tree_data << "#{directories} directories, #{files} files"
23
+ return tree_data
24
+
25
+ else
26
+ dir_walker(folders_arr, directories, files, level, tree_data)
27
+ end
28
+ end
29
+ end
data/lib/tree.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'pathname'
2
+ require 'tree/walker'
3
+ require 'tree/tree_render'
4
+
5
+ class Tree
6
+ def self.runner(root = Dir.pwd)
7
+ level = 0
8
+ tree_data = []
9
+ directories = 0
10
+ files = 0
11
+ path_array = []
12
+ root = Pathname.new(root)
13
+ root.each_child do |dir|
14
+ path_array << dir
15
+ tree_data << dir
16
+ end
17
+ tree_data = Walker.new.dir_walker(path_array, directories, files, level, tree_data)
18
+ files = tree_data.last
19
+ tree_data.pop
20
+ Tree_render.new.render(tree_data, root)
21
+ puts files
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tree_uzuki
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sunset Uzuki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-06-03 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Directory tree
14
+ email: 10seansov@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/tree.rb
20
+ - lib/tree/tree_render.rb
21
+ - lib/tree/walker.rb
22
+ homepage: https://rubygems.org/gems/Tree_uzuki
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.3
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Tree
45
+ test_files: []