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 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