term_utils 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/AUTHORS +1 -0
- data/CHANGELOG.md +19 -0
- data/COPYING +674 -0
- data/README.md +58 -0
- data/Rakefile +46 -0
- data/doc/TermUtils/FF/Config.html +606 -0
- data/doc/TermUtils/FF/Cursor/Context.html +409 -0
- data/doc/TermUtils/FF/Cursor.html +929 -0
- data/doc/TermUtils/FF/Query.html +749 -0
- data/doc/TermUtils/FF.html +128 -0
- data/doc/TermUtils/Tab/Column.html +1290 -0
- data/doc/TermUtils/Tab/Holder.html +674 -0
- data/doc/TermUtils/Tab/Printer.html +967 -0
- data/doc/TermUtils/Tab/Table.html +1414 -0
- data/doc/TermUtils/Tab.html +508 -0
- data/doc/TermUtils.html +136 -0
- data/doc/_index.html +217 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +496 -0
- data/doc/file.README.html +131 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +131 -0
- data/doc/js/app.js +303 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +555 -0
- data/doc/top-level-namespace.html +110 -0
- data/lib/term_utils/ff/config.rb +43 -0
- data/lib/term_utils/ff/cursor.rb +153 -0
- data/lib/term_utils/ff/query.rb +66 -0
- data/lib/term_utils/ff.rb +18 -0
- data/lib/term_utils/tab.rb +22 -3
- data/lib/term_utils.rb +3 -0
- data/term_utils.gemspec +16 -0
- metadata +40 -4
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
#
|
3
|
+
# Copyright (C) 2019 Thomas Baron
|
4
|
+
#
|
5
|
+
# This file is part of term_utils.
|
6
|
+
#
|
7
|
+
# term_utils is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, version 3 of the License.
|
10
|
+
#
|
11
|
+
# term_utils is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
18
|
+
module TermUtils
|
19
|
+
# The ff module provides a way to find files.
|
20
|
+
module FF
|
21
|
+
# Represents a query configuration.
|
22
|
+
class Config
|
23
|
+
# @return [Array<Regexp>]
|
24
|
+
attr_accessor :ignore_list
|
25
|
+
# @return [Integer]
|
26
|
+
attr_accessor :min_depth
|
27
|
+
# @return [Integer]
|
28
|
+
attr_accessor :max_depth
|
29
|
+
# @return [Boolean]
|
30
|
+
attr_accessor :sorted
|
31
|
+
def initialize
|
32
|
+
@ignore_list = []
|
33
|
+
@min_depth = nil
|
34
|
+
@max_depth = nil
|
35
|
+
@sorted = false
|
36
|
+
end
|
37
|
+
def initialize_copy(other)
|
38
|
+
@ignore_list = other.ignore_list.dup
|
39
|
+
super
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
#
|
3
|
+
# Copyright (C) 2019 Thomas Baron
|
4
|
+
#
|
5
|
+
# This file is part of term_utils.
|
6
|
+
#
|
7
|
+
# term_utils is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, version 3 of the License.
|
10
|
+
#
|
11
|
+
# term_utils is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
18
|
+
module TermUtils
|
19
|
+
# The ff module provides a way to find files.
|
20
|
+
module FF
|
21
|
+
# Represents a query cursor.
|
22
|
+
class Cursor
|
23
|
+
# Represents a directory context.
|
24
|
+
Context = Struct.new(:path, :components, :entries)
|
25
|
+
# @return [Integer]
|
26
|
+
attr_reader :index
|
27
|
+
# @param config [TermUtils::FF::Config]
|
28
|
+
# @param path [String]
|
29
|
+
def initialize(config, path)
|
30
|
+
@config = config
|
31
|
+
@path = path
|
32
|
+
@contexts = []
|
33
|
+
push_context(path)
|
34
|
+
@index = 0
|
35
|
+
end
|
36
|
+
# Starts the query.
|
37
|
+
# @return [TermUtils::FF::Cursor, nil]
|
38
|
+
def bootstrap
|
39
|
+
res = self
|
40
|
+
if @config.min_depth
|
41
|
+
while depth < @config.min_depth
|
42
|
+
res = following0
|
43
|
+
break unless res
|
44
|
+
end
|
45
|
+
end
|
46
|
+
res
|
47
|
+
end
|
48
|
+
# Returns the next cursor.
|
49
|
+
# @return [TermUtils::FF::Cursor, nil]
|
50
|
+
def following
|
51
|
+
res = nil
|
52
|
+
loop do
|
53
|
+
res = following0
|
54
|
+
break unless res
|
55
|
+
if @config.min_depth
|
56
|
+
next if depth < @config.min_depth
|
57
|
+
end
|
58
|
+
if @config.max_depth
|
59
|
+
next if depth > @config.max_depth
|
60
|
+
end
|
61
|
+
@index += 1
|
62
|
+
break
|
63
|
+
end
|
64
|
+
res
|
65
|
+
end
|
66
|
+
# Returns the result associated to this one.
|
67
|
+
# @return [String]
|
68
|
+
def result
|
69
|
+
@contexts.last.path
|
70
|
+
end
|
71
|
+
# @return [Integer]
|
72
|
+
def depth
|
73
|
+
@contexts.last.components.length
|
74
|
+
end
|
75
|
+
# @return [String]
|
76
|
+
def relative_path
|
77
|
+
@contexts.last.components.join("/")
|
78
|
+
end
|
79
|
+
# @return [String]
|
80
|
+
def name
|
81
|
+
@contexts.last.components[-1]
|
82
|
+
end
|
83
|
+
# Returns the path components.
|
84
|
+
# @return [Array<String>]
|
85
|
+
def components
|
86
|
+
@contexts.last.components.dup
|
87
|
+
end
|
88
|
+
private
|
89
|
+
# Returns the next cursor.
|
90
|
+
# @return [TermUtils::FF::Cursor, nil]
|
91
|
+
def following0
|
92
|
+
ctx = @contexts.last
|
93
|
+
if ctx
|
94
|
+
if ctx.entries
|
95
|
+
# Directory.
|
96
|
+
until ctx.entries.empty?
|
97
|
+
name = ctx.entries.first
|
98
|
+
break if accept_name(name)
|
99
|
+
ctx.entries.shift
|
100
|
+
end
|
101
|
+
if ctx.entries.empty?
|
102
|
+
# Walked through every entry of directory.
|
103
|
+
@contexts.pop
|
104
|
+
following0
|
105
|
+
else
|
106
|
+
# Directory entry.
|
107
|
+
new_path = StringIO.new
|
108
|
+
new_path << ctx.path
|
109
|
+
new_path << "/" if ctx.path[-1] != "/"
|
110
|
+
new_path << ctx.entries.first
|
111
|
+
new_components = ctx.components.dup
|
112
|
+
new_components << ctx.entries.first
|
113
|
+
push_context(new_path.string, new_components)
|
114
|
+
ctx.entries.shift
|
115
|
+
self
|
116
|
+
end
|
117
|
+
else
|
118
|
+
# Not directory.
|
119
|
+
@contexts.pop
|
120
|
+
following0
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
# Pushes a new context on the stask.
|
125
|
+
# @param path [String]
|
126
|
+
def push_context(path, components = [])
|
127
|
+
entries = nil
|
128
|
+
if File.directory? path
|
129
|
+
entries = Dir.entries(path)
|
130
|
+
entries.sort! if @config.sorted
|
131
|
+
end
|
132
|
+
@contexts.push(Context.new(path, components, entries))
|
133
|
+
end
|
134
|
+
# Tests whether a given name shall be accepted.
|
135
|
+
# @param name [String]
|
136
|
+
# @return [Boolean]
|
137
|
+
def accept_name(name)
|
138
|
+
if (name != ".") and (name != "..")
|
139
|
+
ret = true
|
140
|
+
@config.ignore_list.each do |i|
|
141
|
+
if i.match? name
|
142
|
+
ret = false
|
143
|
+
break
|
144
|
+
end
|
145
|
+
end
|
146
|
+
ret
|
147
|
+
else
|
148
|
+
false
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
#
|
3
|
+
# Copyright (C) 2019 Thomas Baron
|
4
|
+
#
|
5
|
+
# This file is part of term_utils.
|
6
|
+
#
|
7
|
+
# term_utils is free software: you can redistribute it and/or modify
|
8
|
+
# it under the terms of the GNU General Public License as published by
|
9
|
+
# the Free Software Foundation, version 3 of the License.
|
10
|
+
#
|
11
|
+
# term_utils is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
14
|
+
# GNU General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU General Public License
|
17
|
+
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
18
|
+
module TermUtils
|
19
|
+
# The ff module provides a way to find files.
|
20
|
+
module FF
|
21
|
+
# Represents a file system query.
|
22
|
+
class Query
|
23
|
+
def initialize
|
24
|
+
@config = TermUtils::FF::Config.new
|
25
|
+
end
|
26
|
+
def initialize_copy(other)
|
27
|
+
@config = other.config.dup
|
28
|
+
super
|
29
|
+
end
|
30
|
+
# Adds a Regexp to ignore.
|
31
|
+
# @param regexp [Regexp]
|
32
|
+
# @return [TermUtils::FF::Query]
|
33
|
+
def ignore(regexp)
|
34
|
+
@config.ignore_list << regexp
|
35
|
+
self
|
36
|
+
end
|
37
|
+
# Sets a minimum depth.
|
38
|
+
# @param depth [Integer]
|
39
|
+
# @return [TermUtils::FF::Query]
|
40
|
+
def min_depth(depth)
|
41
|
+
@config.min_depth = depth
|
42
|
+
self
|
43
|
+
end
|
44
|
+
# Sets a maximum depth.
|
45
|
+
# @param depth [Integer]
|
46
|
+
# @return [TermUtils::FF::Query]
|
47
|
+
def max_depth(depth)
|
48
|
+
@config.max_depth = depth
|
49
|
+
self
|
50
|
+
end
|
51
|
+
# Sets whether results shall be sorted.
|
52
|
+
# @param sorted [Boolean]
|
53
|
+
# @return [TermUtils::FF::Query]
|
54
|
+
def sort(sorted = true)
|
55
|
+
@config.sorted = sorted
|
56
|
+
self
|
57
|
+
end
|
58
|
+
# Executes this one.
|
59
|
+
# @param path [String]
|
60
|
+
# @return [TermUtils::FF::Cursor]
|
61
|
+
def exec(path)
|
62
|
+
TermUtils::FF::Cursor.new(@config.dup, path).bootstrap
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# Copyright (C) 2019 Thomas Baron
|
2
|
+
#
|
3
|
+
# This file is part of term_utils.
|
4
|
+
#
|
5
|
+
# term_utils is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU General Public License as published by
|
7
|
+
# the Free Software Foundation, version 3 of the License.
|
8
|
+
#
|
9
|
+
# term_utils is distributed in the hope that it will be useful,
|
10
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
# GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
# You should have received a copy of the GNU General Public License
|
15
|
+
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
16
|
+
require 'term_utils/ff/config'
|
17
|
+
require 'term_utils/ff/cursor'
|
18
|
+
require 'term_utils/ff/query'
|
data/lib/term_utils/tab.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright (C) 2019 Thomas Baron
|
2
|
+
#
|
1
3
|
# This file is part of term_utils.
|
2
4
|
#
|
3
5
|
# term_utils is free software: you can redistribute it and/or modify
|
@@ -12,6 +14,7 @@
|
|
12
14
|
# You should have received a copy of the GNU General Public License
|
13
15
|
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
14
16
|
module TermUtils
|
17
|
+
# The tab module provides a way to print formatted tables.
|
15
18
|
module Tab
|
16
19
|
# Represents a table.
|
17
20
|
class Table
|
@@ -53,7 +56,6 @@ module TermUtils
|
|
53
56
|
end
|
54
57
|
# Creates a new table printer.
|
55
58
|
# @param io [IO]
|
56
|
-
# @param values [Array<Object>, Hash<Symbol, Object>]
|
57
59
|
# @param opts [Hash]
|
58
60
|
# @option opts [Integer] :offset
|
59
61
|
# @option opts [Integer] :column_separator_width
|
@@ -250,12 +252,25 @@ module TermUtils
|
|
250
252
|
@io = io
|
251
253
|
@options = options
|
252
254
|
end
|
255
|
+
# Prints an empty line.
|
253
256
|
def line
|
254
257
|
@io.puts ""
|
255
258
|
end
|
259
|
+
# Prints a header row.
|
260
|
+
# @param values [Array<Object>, Hash<Symbol, Object>]
|
261
|
+
# @param opts [Hash]
|
262
|
+
# @option opts [Integer] :offset
|
263
|
+
# @option opts [Integer] :column_separator_width
|
264
|
+
# @return [nil]
|
256
265
|
def header(values = nil, opts = {})
|
257
266
|
@table.print_header(@io, values, @options.merge(opts))
|
258
267
|
end
|
268
|
+
# Prints a data row.
|
269
|
+
# @param values [Array<Object>, Hash<Symbol, Object>]
|
270
|
+
# @param opts [Hash]
|
271
|
+
# @option opts [Integer] :offset
|
272
|
+
# @option opts [Integer] :column_separator_width
|
273
|
+
# @return [nil]
|
259
274
|
def data(values, opts = {})
|
260
275
|
@table.print_data(@io, values, @options.merge(opts))
|
261
276
|
end
|
@@ -299,7 +314,6 @@ module TermUtils
|
|
299
314
|
# Creates a new table printer.
|
300
315
|
# @param id [Symbol]
|
301
316
|
# @param io [IO]
|
302
|
-
# @param values [Array<Object>, Hash<Symbol, Object>]
|
303
317
|
# @param opts [Hash]
|
304
318
|
# @option opts [Integer] :offset
|
305
319
|
# @option opts [Integer] :column_separator_width
|
@@ -316,10 +330,15 @@ module TermUtils
|
|
316
330
|
def self.define_table(id, opts = {}, &block)
|
317
331
|
@@default_holder.define_table(id, opts = {}, &block)
|
318
332
|
end
|
333
|
+
# Finds a table.
|
334
|
+
# @param id [Symbol]
|
335
|
+
# @return [Tab::Table, nil]
|
336
|
+
def self.find_table(id)
|
337
|
+
@@default_holder.find_table(id)
|
338
|
+
end
|
319
339
|
# Creates a new table printer.
|
320
340
|
# @param id [Symbol]
|
321
341
|
# @param io [IO]
|
322
|
-
# @param values [Array<Object>, Hash<Symbol, Object>]
|
323
342
|
# @param opts [Hash]
|
324
343
|
# @option opts [Integer] :offset
|
325
344
|
# @option opts [Integer] :column_separator_width
|
data/lib/term_utils.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# Copyright (C) 2019 Thomas Baron
|
2
|
+
#
|
1
3
|
# This file is part of term_utils.
|
2
4
|
#
|
3
5
|
# term_utils is free software: you can redistribute it and/or modify
|
@@ -11,4 +13,5 @@
|
|
11
13
|
#
|
12
14
|
# You should have received a copy of the GNU General Public License
|
13
15
|
# along with term_utils. If not, see <https://www.gnu.org/licenses/>.
|
16
|
+
require 'term_utils/ff'
|
14
17
|
require 'term_utils/tab'
|
data/term_utils.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "term_utils"
|
3
|
+
s.version = "0.2.0"
|
4
|
+
s.date = "2019-10-17"
|
5
|
+
s.summary = "Terminal utilities."
|
6
|
+
s.description = <<-EOS
|
7
|
+
Provides terminal utilities like table formatting.
|
8
|
+
EOS
|
9
|
+
s.authors = ["Thomas Baron"]
|
10
|
+
s.email = "tvbaron at gmail dot com"
|
11
|
+
s.files = Dir["lib/**/*.rb", "doc/**/*"] + ["AUTHORS", "CHANGELOG.md", "COPYING", "Rakefile", "README.md", "term_utils.gemspec"]
|
12
|
+
s.homepage = "https://git.yellowcube.net/tvb/term_utils"
|
13
|
+
s.license = "GPL-3.0-only"
|
14
|
+
s.required_ruby_version = '>= 2.2.0'
|
15
|
+
s.metadata["yard.run"] = "yri"
|
16
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: term_utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Baron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: 'Provides terminal utilities like table formatting.
|
14
14
|
|
@@ -18,12 +18,48 @@ executables: []
|
|
18
18
|
extensions: []
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
|
+
- AUTHORS
|
22
|
+
- CHANGELOG.md
|
23
|
+
- COPYING
|
24
|
+
- README.md
|
25
|
+
- Rakefile
|
26
|
+
- doc/TermUtils.html
|
27
|
+
- doc/TermUtils/FF.html
|
28
|
+
- doc/TermUtils/FF/Config.html
|
29
|
+
- doc/TermUtils/FF/Cursor.html
|
30
|
+
- doc/TermUtils/FF/Cursor/Context.html
|
31
|
+
- doc/TermUtils/FF/Query.html
|
32
|
+
- doc/TermUtils/Tab.html
|
33
|
+
- doc/TermUtils/Tab/Column.html
|
34
|
+
- doc/TermUtils/Tab/Holder.html
|
35
|
+
- doc/TermUtils/Tab/Printer.html
|
36
|
+
- doc/TermUtils/Tab/Table.html
|
37
|
+
- doc/_index.html
|
38
|
+
- doc/class_list.html
|
39
|
+
- doc/css/common.css
|
40
|
+
- doc/css/full_list.css
|
41
|
+
- doc/css/style.css
|
42
|
+
- doc/file.README.html
|
43
|
+
- doc/file_list.html
|
44
|
+
- doc/frames.html
|
45
|
+
- doc/index.html
|
46
|
+
- doc/js/app.js
|
47
|
+
- doc/js/full_list.js
|
48
|
+
- doc/js/jquery.js
|
49
|
+
- doc/method_list.html
|
50
|
+
- doc/top-level-namespace.html
|
21
51
|
- lib/term_utils.rb
|
52
|
+
- lib/term_utils/ff.rb
|
53
|
+
- lib/term_utils/ff/config.rb
|
54
|
+
- lib/term_utils/ff/cursor.rb
|
55
|
+
- lib/term_utils/ff/query.rb
|
22
56
|
- lib/term_utils/tab.rb
|
57
|
+
- term_utils.gemspec
|
23
58
|
homepage: https://git.yellowcube.net/tvb/term_utils
|
24
59
|
licenses:
|
25
60
|
- GPL-3.0-only
|
26
|
-
metadata:
|
61
|
+
metadata:
|
62
|
+
yard.run: yri
|
27
63
|
post_install_message:
|
28
64
|
rdoc_options: []
|
29
65
|
require_paths:
|
@@ -32,7 +68,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
32
68
|
requirements:
|
33
69
|
- - ">="
|
34
70
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
71
|
+
version: 2.2.0
|
36
72
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
73
|
requirements:
|
38
74
|
- - ">="
|