Class: Dorian::Git::Tree
- Inherits:
-
Object
- Object
- Dorian::Git::Tree
- Defined in:
- lib/dorian/git/tree.rb
Constant Summary collapse
- SPACE =
" "- RIGHT =
"└── "- DOWN =
"│ "- DOWN_AND_RIGHT =
"├── "
Class Method Summary collapse
- .git_ls_files(path) ⇒ Object
- .group(files) ⇒ Object
- .print(key:, values:, index: 0, size: 1, prefix: "") ⇒ Object
- .run ⇒ Object
Class Method Details
.git_ls_files(path) ⇒ Object
32 33 34 |
# File 'lib/dorian/git/tree.rb', line 32 def self.git_ls_files(path) `#{["git", "ls-files", path].compact.shelljoin}`.split("\n") end |
.group(files) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/dorian/git/tree.rb', line 36 def self.group(files) files .group_by { |file| file.split("/").first } .transform_values do |values| group( values .map { |value| value.split("/")[1..-1].join("/") } .reject(&:empty?) ) end end |
.print(key:, values:, index: 0, size: 1, prefix: "") ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/dorian/git/tree.rb', line 48 def self.print(key:, values:, index: 0, size: 1, prefix: "") key = "#{key}/" if values.any? last = index + 1 == size right_prefix = last ? RIGHT : DOWN_AND_RIGHT puts prefix + right_prefix + key values.each.with_index do |(value_key, value_values), value_index| print( key: value_key, values: value_values, index: value_index, size: values.size, prefix: prefix + (last ? SPACE : DOWN) ) end end |
.run ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/dorian/git/tree.rb', line 11 def self.run if ARGV[0] == "--help" || ARGV[0] == "-h" || ARGV.size > 1 puts "USAGE: git tree [PATH]" exit end key = ARGV.first || "." files = git_ls_files(key) values = group(files) key = "#{key}/" if values.any? && key != "." && key[-1] != "/" puts key values.each.with_index do |(value_key, value_values), value_index| print( key: value_key, values: value_values, index: value_index, size: values.size, ) end end |