ix-cli 0.0.19 → 0.0.21
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 +4 -4
- data/bin/ix-file-exists +1 -1
- data/bin/ix-files +1 -1
- data/bin/ix-json-filter +21 -4
- data/bin/ix-json-sort +35 -0
- data/bin/ix-json-template +1 -1
- data/bin/ix-json-to-table +97 -11
- data/bin/ix-json-transpose +20 -0
- data/bin/ix-slider +1 -1
- data/bin/ix-snake +1 -1
- data/bin/ix-stack +1 -1
- data/bin/ix-stack-2 +1 -1
- data/bin/ix-table +22 -0
- data/bin/ix-template +1 -1
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 310ce8e1c17438e6004dd28f1dfe8f4f9501c5c7ecbca7d5efa75c4c5095e290
|
4
|
+
data.tar.gz: 8ac9335f579d2ffbfb5549409308de3250e173c35688f130d5719d2b421acd0d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4cbf17184a8274e7579e8cbb660f972890f533421840ca0f43c2e7a2538249f5f8f022b766e464b0130ee5735629f1522ea15c0257cfdadaef2f4906cfe5d105
|
7
|
+
data.tar.gz: e5ed936aec0c930d755ff5d267425aaa01473f1220bbf9e2d9424b265e354566de834a0bb967f4e90982e2c7c78bb9e01610fe64fb0d87da81db1d8fc50ee15f
|
data/bin/ix-file-exists
CHANGED
data/bin/ix-files
CHANGED
data/bin/ix-json-filter
CHANGED
@@ -10,17 +10,22 @@ OptionParser.new do |opts|
|
|
10
10
|
|
11
11
|
opts.banner = "Usage: #{$0} [OPTIONS]"
|
12
12
|
|
13
|
-
opts.on('-f', '--field [
|
13
|
+
opts.on('-f', '--field [STRING]', 'Field.') do |value|
|
14
14
|
options[:field] = value
|
15
15
|
end
|
16
16
|
|
17
|
+
opts.on('-v', '--value [STRING]', 'Field.') do |value|
|
18
|
+
options[:field] = value
|
19
|
+
end
|
20
|
+
|
21
|
+
|
17
22
|
opts.on('-m', '--match [REGEX]', 'Match.') do |value|
|
18
23
|
options[:match] = value
|
19
24
|
end
|
20
25
|
|
21
26
|
end.parse!
|
22
27
|
|
23
|
-
required_options = [:
|
28
|
+
required_options = [:match]
|
24
29
|
required_options.each do |option|
|
25
30
|
unless options[option]
|
26
31
|
$stderr.puts "Can not run #{option.to_s} was not given."
|
@@ -28,11 +33,23 @@ required_options.each do |option|
|
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
36
|
+
if options[:field].nil? && options[:value].nil?
|
37
|
+
$stderr.puts "Can not run without field or value."
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
31
41
|
STDIN.each_line do |line|
|
32
42
|
begin
|
33
43
|
json = JSON.parse(line)
|
34
|
-
if
|
35
|
-
|
44
|
+
if options[:field]
|
45
|
+
if json[options[:field]].to_s =~ /#{options[:match]}/
|
46
|
+
puts line
|
47
|
+
end
|
48
|
+
end
|
49
|
+
if options[:value]
|
50
|
+
if json.values.any? { |v| v.to_s =~ /#{options[:match]}/ }
|
51
|
+
puts line
|
52
|
+
end
|
36
53
|
end
|
37
54
|
rescue JSON::ParserError => e
|
38
55
|
$stderr.puts "Error parsing line: #{line}"
|
data/bin/ix-json-sort
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
options = {}
|
8
|
+
|
9
|
+
OptionParser.new do |opts|
|
10
|
+
|
11
|
+
opts.banner = "Usage: #{$0} [OPTIONS]"
|
12
|
+
|
13
|
+
opts.on('-f', '--field [STRING]', 'Field.') do |value|
|
14
|
+
options[:field] = value
|
15
|
+
end
|
16
|
+
|
17
|
+
end.parse!
|
18
|
+
|
19
|
+
required_options = [:field]
|
20
|
+
required_options.each do |option|
|
21
|
+
unless options[option]
|
22
|
+
$stderr.puts "Can not run #{option.to_s} was not given."
|
23
|
+
exit 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
objects = []
|
28
|
+
|
29
|
+
STDIN.each_line do |line|
|
30
|
+
objects << JSON.parse(line)
|
31
|
+
end
|
32
|
+
|
33
|
+
objects.sort_by! { |object| object[options[:field]] }.each do |object|
|
34
|
+
puts object.to_json
|
35
|
+
end
|
data/bin/ix-json-template
CHANGED
data/bin/ix-json-to-table
CHANGED
@@ -1,21 +1,107 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'rubygems'
|
4
3
|
require 'json'
|
5
|
-
require '
|
4
|
+
require 'isna'
|
5
|
+
require 'optparse'
|
6
6
|
|
7
|
-
|
7
|
+
options = {}
|
8
|
+
options[:orient] = 'top'
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
OptionParser.new do |opts|
|
11
|
+
|
12
|
+
opts.banner = "Usage: #{$0} [OPTIONS]"
|
13
|
+
|
14
|
+
opts.on('-o', '--orient [STRING]', 'Orientation for headers: top, bottom, both, or none.') do |value|
|
15
|
+
options[:orient] = value
|
16
|
+
end
|
17
|
+
|
18
|
+
opts.on('-s', '--search [STRING]', 'Search for a particular string.') do |value|
|
19
|
+
options[:search] = Regexp.new(value, Regexp::IGNORECASE)
|
20
|
+
end
|
21
|
+
|
22
|
+
end.parse!
|
23
|
+
|
24
|
+
required_options = [:orient]
|
25
|
+
required_options.each do |option|
|
26
|
+
unless options[option]
|
27
|
+
$stderr.puts "Can not run #{option.to_s} was not given."
|
28
|
+
exit 1
|
13
29
|
end
|
14
30
|
end
|
15
31
|
|
16
|
-
|
17
|
-
|
18
|
-
|
32
|
+
data = []
|
33
|
+
|
34
|
+
STDIN.each_line do |line|
|
35
|
+
data << JSON.parse(line)
|
36
|
+
end
|
37
|
+
|
38
|
+
exit if data.empty?
|
39
|
+
|
40
|
+
def print_table(data, options)
|
41
|
+
columns = {}
|
42
|
+
|
43
|
+
data.each do |row|
|
44
|
+
row.each do |key, value|
|
45
|
+
columns[key] ||= key.size
|
46
|
+
columns[key] = value.to_s.size if value.to_s.size > columns[key]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
config = {
|
51
|
+
:top_left => '╭',
|
52
|
+
:top_right => '╮',
|
53
|
+
:bottom_left => '╰',
|
54
|
+
:bottom_right => '╯',
|
55
|
+
:vertical => '│',
|
56
|
+
:horizontal => '─',
|
57
|
+
:cross => '┼',
|
58
|
+
:top => '┬',
|
59
|
+
:bottom => '┴',
|
60
|
+
:left => '├',
|
61
|
+
:right => '┤'
|
62
|
+
}
|
63
|
+
|
64
|
+
cm = columns.keys.sort.map do |key|
|
65
|
+
s = ''
|
66
|
+
value = columns[key]
|
67
|
+
s << key.ljust(value, ' ')
|
68
|
+
s
|
69
|
+
end
|
70
|
+
|
71
|
+
top_ruler = "#{config[:top_left]}#{config[:horizontal]}#{(cm.map { |s| s.gsub(/./, config[:horizontal]) }).join("#{config[:horizontal]}#{config[:top]}#{config[:horizontal]}")}#{config[:horizontal]}#{config[:top_right]}"
|
72
|
+
bottom_ruler = "#{config[:bottom_left]}#{config[:horizontal]}#{(cm.map { |s| s.gsub(/./, config[:horizontal]) }).join("#{config[:horizontal]}#{config[:bottom]}#{config[:horizontal]}")}#{config[:horizontal]}#{config[:bottom_right]}"
|
73
|
+
middle_ruler = "#{config[:left]}#{config[:horizontal]}#{(cm.map { |s| s.gsub(/./, config[:horizontal]) }).join("#{config[:horizontal]}#{config[:cross]}#{config[:horizontal]}")}#{config[:horizontal]}#{config[:right]}"
|
74
|
+
|
75
|
+
headers = "#{config[:vertical]} " + cm.join(" #{config[:vertical]} ") + " #{config[:vertical]}"
|
76
|
+
|
77
|
+
puts top_ruler
|
78
|
+
|
79
|
+
if options[:orient] == 'top' || options[:orient] == 'both'
|
80
|
+
puts headers
|
81
|
+
puts middle_ruler
|
82
|
+
end
|
83
|
+
|
84
|
+
data.each do |row|
|
85
|
+
rm = columns.keys.sort.map do |key|
|
86
|
+
s = ''
|
87
|
+
value = row[key]
|
88
|
+
if options[:search] =~ value.to_s
|
89
|
+
s << value.to_s.ljust(columns[key], ' ').gsub(options[:search]) { |m| m.to_ansi.green.to_s }
|
90
|
+
else
|
91
|
+
s << value.to_s.ljust(columns[key], ' ')
|
92
|
+
end
|
93
|
+
s
|
94
|
+
end
|
95
|
+
puts "#{config[:vertical]} " + rm.join(" #{config[:vertical]} ") + " #{config[:vertical]}"
|
96
|
+
end
|
97
|
+
|
98
|
+
if options[:orient] == 'bottom' || options[:orient] == 'both'
|
99
|
+
puts middle_ruler
|
100
|
+
puts headers
|
101
|
+
end
|
102
|
+
puts bottom_ruler
|
103
|
+
|
104
|
+
puts "Total: #{data.size} rows"
|
19
105
|
end
|
20
106
|
|
21
|
-
|
107
|
+
print_table(data, options)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
transposed = {}
|
6
|
+
|
7
|
+
STDIN.each_line do |line|
|
8
|
+
data = JSON.parse(line)
|
9
|
+
data.each do |key, value|
|
10
|
+
transposed[key] ||= []
|
11
|
+
transposed[key] << value
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
transposed.each do |key, values|
|
16
|
+
values.each do |value|
|
17
|
+
puts({ :column => key, :value => value }.to_json)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
data/bin/ix-slider
CHANGED
data/bin/ix-snake
CHANGED
data/bin/ix-stack
CHANGED
data/bin/ix-stack-2
CHANGED
data/bin/ix-table
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
options = {}
|
6
|
+
|
7
|
+
OptionParser.new do |opts|
|
8
|
+
|
9
|
+
opts.banner = "Usage: #{$0} [OPTIONS]"
|
10
|
+
|
11
|
+
opts.on('-v', '--vertical', 'Vertical.') do |value|
|
12
|
+
options[:vertical] = value
|
13
|
+
end
|
14
|
+
|
15
|
+
end.parse!
|
16
|
+
|
17
|
+
if options[:vertical]
|
18
|
+
system 'ruby ./ix-json-transpose | ruby ./ix-json-to-table'
|
19
|
+
else
|
20
|
+
system 'ruby ./ix-json-to-table'
|
21
|
+
end
|
22
|
+
|
data/bin/ix-template
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ix-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kazuyoshi Tlacaelel
|
@@ -156,6 +156,7 @@ executables:
|
|
156
156
|
- ix-json-records-to-array
|
157
157
|
- ix-json-remove-key
|
158
158
|
- ix-json-replace-values
|
159
|
+
- ix-json-sort
|
159
160
|
- ix-json-stats
|
160
161
|
- ix-json-swap
|
161
162
|
- ix-json-template
|
@@ -167,6 +168,7 @@ executables:
|
|
167
168
|
- ix-json-to-table
|
168
169
|
- ix-json-to-table-2
|
169
170
|
- ix-json-to-yaml
|
171
|
+
- ix-json-transpose
|
170
172
|
- ix-json-values
|
171
173
|
- ix-jsonpp
|
172
174
|
- ix-lake
|
@@ -285,6 +287,7 @@ executables:
|
|
285
287
|
- ix-symlink
|
286
288
|
- ix-tab
|
287
289
|
- ix-tabify
|
290
|
+
- ix-table
|
288
291
|
- ix-tac
|
289
292
|
- ix-task
|
290
293
|
- ix-technical
|
@@ -460,6 +463,7 @@ files:
|
|
460
463
|
- bin/ix-json-records-to-array
|
461
464
|
- bin/ix-json-remove-key
|
462
465
|
- bin/ix-json-replace-values
|
466
|
+
- bin/ix-json-sort
|
463
467
|
- bin/ix-json-stats
|
464
468
|
- bin/ix-json-swap
|
465
469
|
- bin/ix-json-template
|
@@ -471,6 +475,7 @@ files:
|
|
471
475
|
- bin/ix-json-to-table
|
472
476
|
- bin/ix-json-to-table-2
|
473
477
|
- bin/ix-json-to-yaml
|
478
|
+
- bin/ix-json-transpose
|
474
479
|
- bin/ix-json-values
|
475
480
|
- bin/ix-jsonpp
|
476
481
|
- bin/ix-lake
|
@@ -589,6 +594,7 @@ files:
|
|
589
594
|
- bin/ix-symlink
|
590
595
|
- bin/ix-tab
|
591
596
|
- bin/ix-tabify
|
597
|
+
- bin/ix-table
|
592
598
|
- bin/ix-tac
|
593
599
|
- bin/ix-task
|
594
600
|
- bin/ix-technical
|