tree_uzuki 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []