cli-tree 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/json2tree.rb +13 -0
- data/bin/tree.rb +66 -5
- data/lib/cli-tree.rb +29 -1
- data/ruby-cli-tree.gemspec +28 -50
- data/test/1.json +22 -0
- data/test/2.json +9 -0
- data/test/test1.rb +16 -0
- metadata +7 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da90838e296f082ffc1c64eed162ea67d1b326e535467ae99f490cb07e03f84a
|
4
|
+
data.tar.gz: 8254103ce9f3f2f028da206874aa287aa4868847eb4669aaf1a425c84b068399
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a747e8dc304f108e57bca638fb3f94be3c291d03847d294a9a1123792da40a0540e52482f667abbf203d1ff386375bbcb8cf6f9f6593d3073ebc78c57595aba6
|
7
|
+
data.tar.gz: 49c150eb070e86c54305cb63b57c48e5651b7c2857c0adec500209b0bb8003413ad701b0b378f942ab12bb29d2175bf77ddd8c9b81f29bc9409b51c1050736c3
|
data/bin/json2tree.rb
ADDED
data/bin/tree.rb
CHANGED
@@ -1,16 +1,76 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
|
+
require 'getoptlong'
|
4
5
|
require_relative '../lib/cli-tree'
|
5
6
|
|
6
|
-
|
7
|
-
|
7
|
+
Program = File.basename $0
|
8
|
+
|
9
|
+
Usage = <<EOF
|
10
|
+
Usage: #{Program} [options] [dir]
|
11
|
+
|
12
|
+
Options:
|
13
|
+
-h, --help Print this help message and exit
|
14
|
+
-v, --version Print version information and exit
|
15
|
+
-a, --all All files are printed, including hidden files
|
16
|
+
-d, --dir-only List directories only
|
17
|
+
-f, --full-prefix Prints the full path prefix for each file
|
18
|
+
|
19
|
+
Arguments:
|
20
|
+
dir The directory to traverse (Default: .)
|
21
|
+
EOF
|
22
|
+
|
23
|
+
VersionInfo = "#{Program} v#{TreeNode::VERSION}"
|
24
|
+
|
25
|
+
def parse_arguments
|
26
|
+
opts = GetoptLong.new(
|
27
|
+
['--help', '-h', GetoptLong::NO_ARGUMENT],
|
28
|
+
['--version', '-v', GetoptLong::NO_ARGUMENT],
|
29
|
+
['--all', '-a', GetoptLong::NO_ARGUMENT],
|
30
|
+
['--dir-only', '-d', GetoptLong::NO_ARGUMENT],
|
31
|
+
['--full-prefix', '-f', GetoptLong::NO_ARGUMENT],
|
32
|
+
)
|
33
|
+
|
34
|
+
args = {
|
35
|
+
show_all: false,
|
36
|
+
dir_only: false,
|
37
|
+
full_prefix: false,
|
38
|
+
}
|
39
|
+
|
40
|
+
begin
|
41
|
+
opts.each do |opt, arg|
|
42
|
+
case opt
|
43
|
+
when '--help'
|
44
|
+
puts Usage
|
45
|
+
exit 0
|
46
|
+
when '--version'
|
47
|
+
puts VersionInfo
|
48
|
+
exit 0
|
49
|
+
when '--all'
|
50
|
+
args[:show_all] = true
|
51
|
+
when '--dir-only'
|
52
|
+
args[:dir_only] = true
|
53
|
+
when '--full-prefix'
|
54
|
+
args[:full_prefix] = true
|
55
|
+
end
|
56
|
+
end
|
57
|
+
rescue GetoptLong::Error
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
|
61
|
+
args
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_tree_node(path, **kwargs)
|
65
|
+
name = kwargs[:full_prefix] ? path : File.basename(path)
|
8
66
|
if File.directory?(path)
|
9
67
|
children = []
|
10
68
|
Dir.new(path).each do |entry|
|
11
69
|
next if ['.', '..'].include?(entry)
|
70
|
+
next if entry.start_with?('.') && !kwargs[:show_all]
|
71
|
+
next if !File.directory?(entry) && kwargs[:dir_only]
|
12
72
|
entry_path = File.join(path, entry)
|
13
|
-
children << get_tree_node(entry_path)
|
73
|
+
children << get_tree_node(entry_path, **kwargs)
|
14
74
|
end
|
15
75
|
TreeNode.new(name, children)
|
16
76
|
else
|
@@ -18,6 +78,7 @@ def get_tree_node(path)
|
|
18
78
|
end
|
19
79
|
end
|
20
80
|
|
21
|
-
|
22
|
-
|
81
|
+
args = parse_arguments
|
82
|
+
dir = ARGV.first || '.'
|
83
|
+
tree = get_tree_node(dir, **args)
|
23
84
|
tree.print
|
data/lib/cli-tree.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require 'json'
|
2
|
+
|
1
3
|
class TreeNode
|
2
|
-
VERSION = '1.
|
4
|
+
VERSION = '1.1.0'
|
3
5
|
|
4
6
|
attr_accessor :name, :children
|
5
7
|
|
@@ -8,6 +10,32 @@ class TreeNode
|
|
8
10
|
@children = children
|
9
11
|
end
|
10
12
|
|
13
|
+
def TreeNode.from_h(hash)
|
14
|
+
if hash.is_a?(Hash)
|
15
|
+
raw_children = hash.has_key?(:children) ? hash[:children] : []
|
16
|
+
children = raw_children.map{|ch| TreeNode.from_h(ch)}
|
17
|
+
TreeNode.new hash[:name], children
|
18
|
+
else
|
19
|
+
TreeNode.new hash
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def TreeNode.from_json(json)
|
24
|
+
hash = JSON.parse json, symbolize_names: true
|
25
|
+
TreeNode.from_h hash
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_h
|
29
|
+
{
|
30
|
+
name: @name,
|
31
|
+
children: @children.map{|node| node.to_h}
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def to_json(**kwargs)
|
36
|
+
JSON.generate(to_h, **kwargs)
|
37
|
+
end
|
38
|
+
|
11
39
|
def render
|
12
40
|
lines = [@name]
|
13
41
|
@children.each_with_index do |child, index|
|
data/ruby-cli-tree.gemspec
CHANGED
@@ -1,50 +1,28 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require_relative 'lib/cli-tree'
|
4
|
-
|
5
|
-
Gem::Specification.new do |s|
|
6
|
-
s.name = 'cli-tree'
|
7
|
-
s.version = TreeNode::VERSION
|
8
|
-
s.date = '2018-06-02'
|
9
|
-
|
10
|
-
s.summary = 'A command line printer of tree structures (e.g. directory tree) written in Ruby.'
|
11
|
-
s.description = <<EOF
|
12
|
-
This library can be used to build a tree structure, and render or print it
|
13
|
-
like an ASCII graph. It can be used to implement a directory tree
|
14
|
-
or something like that.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
tree.print
|
30
|
-
|
31
|
-
Output:
|
32
|
-
|
33
|
-
root
|
34
|
-
└── foo
|
35
|
-
├── bar
|
36
|
-
└── baz
|
37
|
-
EOF
|
38
|
-
|
39
|
-
s.authors = ['physacco']
|
40
|
-
s.email = ['physacco@gmail.com']
|
41
|
-
s.homepage = 'https://github.com/physacco/ruby-cli-tree'
|
42
|
-
s.license = 'MIT'
|
43
|
-
|
44
|
-
s.files = Dir['lib/**/*.rb'] + Dir['bin/*'] +
|
45
|
-
['README.md', 'LICENSE', 'ruby-cli-tree.gemspec']
|
46
|
-
s.executables = ['tree.rb']
|
47
|
-
|
48
|
-
s.platform = Gem::Platform::RUBY
|
49
|
-
s.required_ruby_version = '>= 2.0.0'
|
50
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require_relative 'lib/cli-tree'
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = 'cli-tree'
|
7
|
+
s.version = TreeNode::VERSION
|
8
|
+
s.date = '2018-06-02'
|
9
|
+
|
10
|
+
s.summary = 'A command line printer of tree structures (e.g. directory tree) written in Ruby.'
|
11
|
+
s.description = <<EOF
|
12
|
+
This library can be used to build a tree structure, and render or print it
|
13
|
+
like an ASCII graph. It can be used to implement a directory tree viewer
|
14
|
+
or something like that.
|
15
|
+
EOF
|
16
|
+
|
17
|
+
s.authors = ['physacco']
|
18
|
+
s.email = ['physacco@gmail.com']
|
19
|
+
s.homepage = 'https://github.com/physacco/ruby-cli-tree'
|
20
|
+
s.license = 'MIT'
|
21
|
+
|
22
|
+
s.files = Dir['lib/**/*.rb'] + Dir['bin/*'] + Dir['test/*'] +
|
23
|
+
['README.md', 'LICENSE', 'ruby-cli-tree.gemspec']
|
24
|
+
s.executables = ['tree.rb', 'json2tree.rb']
|
25
|
+
|
26
|
+
s.platform = Gem::Platform::RUBY
|
27
|
+
s.required_ruby_version = '>= 2.0.0'
|
28
|
+
end
|
data/test/1.json
ADDED
data/test/2.json
ADDED
data/test/test1.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative '../lib/cli-tree'
|
2
|
+
|
3
|
+
tree = TreeNode.new("root", [
|
4
|
+
TreeNode.new("foo", [
|
5
|
+
TreeNode.new("bar"),
|
6
|
+
TreeNode.new("baz")
|
7
|
+
])
|
8
|
+
])
|
9
|
+
|
10
|
+
puts tree.render
|
11
|
+
|
12
|
+
json = tree.to_json(indent: " ", space: " ", object_nl: "\n", array_nl: "\n")
|
13
|
+
puts json
|
14
|
+
|
15
|
+
tree2 = TreeNode.from_json(json)
|
16
|
+
tree2.print
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cli-tree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- physacco
|
@@ -12,42 +12,25 @@ date: 2018-06-02 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
13
13
|
description: |
|
14
14
|
This library can be used to build a tree structure, and render or print it
|
15
|
-
like an ASCII graph. It can be used to implement a directory tree
|
15
|
+
like an ASCII graph. It can be used to implement a directory tree viewer
|
16
16
|
or something like that.
|
17
|
-
|
18
|
-
Example:
|
19
|
-
|
20
|
-
require 'cli-tree'
|
21
|
-
|
22
|
-
tree = TreeNode.new("root", [
|
23
|
-
TreeNode.new("foo", [
|
24
|
-
TreeNode.new("bar"),
|
25
|
-
TreeNode.new("baz")
|
26
|
-
])
|
27
|
-
])
|
28
|
-
|
29
|
-
puts tree.render
|
30
|
-
# or simply
|
31
|
-
tree.print
|
32
|
-
|
33
|
-
Output:
|
34
|
-
|
35
|
-
root
|
36
|
-
└── foo
|
37
|
-
├── bar
|
38
|
-
└── baz
|
39
17
|
email:
|
40
18
|
- physacco@gmail.com
|
41
19
|
executables:
|
42
20
|
- tree.rb
|
21
|
+
- json2tree.rb
|
43
22
|
extensions: []
|
44
23
|
extra_rdoc_files: []
|
45
24
|
files:
|
46
25
|
- LICENSE
|
47
26
|
- README.md
|
27
|
+
- bin/json2tree.rb
|
48
28
|
- bin/tree.rb
|
49
29
|
- lib/cli-tree.rb
|
50
30
|
- ruby-cli-tree.gemspec
|
31
|
+
- test/1.json
|
32
|
+
- test/2.json
|
33
|
+
- test/test1.rb
|
51
34
|
homepage: https://github.com/physacco/ruby-cli-tree
|
52
35
|
licenses:
|
53
36
|
- MIT
|