tree_uzuki 0.4.3 → 0.7.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0ce45ffd919661e8515fa2b9486a0566ce304259bf80cb9815a56812723f13f
4
- data.tar.gz: 31ee3a043d6d8292b8bf3151778afd92e1762693c3f7f2dbdcda42d28944c634
3
+ metadata.gz: 2caf22d2ab177a8257ef5a108d54337bc0cbd207d977c9c4f360e447da927050
4
+ data.tar.gz: ae750495d32cf63b9d2ffcaabb4492d21c71d0ead4e251be4a6d52bc9990d8fc
5
5
  SHA512:
6
- metadata.gz: b6a505265946015258458883042a60ab572f66a4f1ace1c8aa677dac47ba6a97d5bfe1e55511c3263a21f9ab9fecd749e1f4b849570594f1c1c686faf3637948
7
- data.tar.gz: 11b712d4f0d93f850e6745e2db2d85f29816844051fe8fb7f2d9e49154db9cd87f8216659885e58a94058e33e373ef823e9eb818edd58a311b43ca4911ad9102
6
+ metadata.gz: a562ff1cc7082d2a3afeff097d603e4538516e00ad7323e88c9ec5839dc2de151f9d7f9d8e1dff0014e78d8e77bff652941aa21ee4ea367f0ce9a222eaac5402
7
+ data.tar.gz: 5cc0ce16318b456252683a351247786cfdae78d8ec467cab13cb06a46324d1865408230aeb5f80ee75629a73729d05382bf0bcb9125de95cce5ccf6973f64f61
data/bin/tree_uzuki CHANGED
@@ -1,9 +1,27 @@
1
- #!/usr/bin/env ruby
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
- puts Tree.run()
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
- puts Tree.run(ARGV[0])
9
- end
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
@@ -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
@@ -1,42 +1,55 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'pathname'
2
4
 
3
- class Tree_render
4
- def rendering(tree_data,root)
5
- final_hash = {}
6
- branch = "├── "
7
- pipe = "│ "
8
- turn = "└── "
9
- space = " "
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 i-=1
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] = Array.new
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
- for index in (0..final_hash[i].size)
26
- next if final_hash[i+1] == nil
27
- if final_hash[i][index] == space && (final_hash[i+1][index] == branch ||
28
- final_hash[i+1][index] == pipe ||
29
- final_hash[i+1][index] == turn)
30
- final_hash[i][index] = pipe
31
- elsif final_hash[i][index] == branch && (final_hash[i+1][index] != branch &&
32
- final_hash[i+1][index] != pipe &&
33
- final_hash[i+1][index] != turn)
34
- final_hash[i][index] = turn
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,v| k }
40
- final_hash.each { |k,v| puts v.join }
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
- require 'tree/walker'
3
- require 'tree/tree_render'
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
- def self.run(root = Dir.pwd)
7
- tree_data = []
8
- directories = 0
9
- files = 0
10
- path_array = []
11
- root = Pathname.new(root)
12
- root.each_child do |dir|
13
- path_array << dir
14
- tree_data << dir
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
- end
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.3
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