whatoption 0.1.0 → 0.3.0
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/whatoption +48 -24
- data/lib/whatoption.rb +49 -15
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8ae23eb231b87c00885211c51e42ec78fa2d4b5fac7af36163c86a49478ade52
|
4
|
+
data.tar.gz: fa93f8e92fc55b95574830fc323bc854708c00c201a01afd5db802f11f496842
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27824e60eb11034c9e1f4b0f26a8732bb67a68514ce492a5ea1561314aa4ae290ff7f89fed0d6e8ceb53be7a97cacdc36536885d618daf0b213c37d09c99ccaa
|
7
|
+
data.tar.gz: e4a563e68423ce659244a67edc9d8542f8b612e6db856746be164f827c84a52fe3b691d88d4363fbfb0525f77f7276e016915e062eb259539f72ae0d5dd69c6e
|
data/bin/whatoption
CHANGED
@@ -1,20 +1,15 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# ---------------------------------------------------------------
|
3
3
|
# File : whatoption.rb
|
4
|
-
# Authors :
|
4
|
+
# Authors : Aoran Zeng <ccmywish@qq.com>
|
5
5
|
# Created on : <2023-02-06>
|
6
|
-
# Last modified : <2023-
|
6
|
+
# Last modified : <2023-03-14>
|
7
7
|
# Contributors :
|
8
8
|
#
|
9
9
|
# whatoption:
|
10
10
|
#
|
11
11
|
# Tells you what the option of the command means.
|
12
12
|
#
|
13
|
-
# ----------
|
14
|
-
# Changelog:
|
15
|
-
#
|
16
|
-
# ~> v0.1.0
|
17
|
-
# <2023-02-06> Create file
|
18
13
|
# ---------------------------------------------------------------
|
19
14
|
|
20
15
|
require 'whatoption'
|
@@ -26,6 +21,9 @@ require 'whatoption'
|
|
26
21
|
class WhatOption::CliHandler
|
27
22
|
|
28
23
|
def initialize(argv)
|
24
|
+
|
25
|
+
@argv = argv
|
26
|
+
|
29
27
|
if argv.empty?
|
30
28
|
help || return
|
31
29
|
end
|
@@ -43,24 +41,20 @@ class WhatOption::CliHandler
|
|
43
41
|
puts cmd = "git -C #{WhatOption::OPTIONS_DATA_DIR} pull"
|
44
42
|
system cmd
|
45
43
|
return
|
44
|
+
when '-l'
|
45
|
+
list_options
|
46
|
+
else
|
47
|
+
get_option
|
46
48
|
end
|
47
49
|
|
48
|
-
if argv.size == 1
|
49
|
-
puts("Please input the option for command '#{argv[0]}'".red) || return
|
50
|
-
end
|
51
|
-
|
52
|
-
@option = ARGV[-1] # Shouldn't detect where is begin with '-' or '--'
|
53
|
-
# because some options are just single characters,
|
54
|
-
# for example, 'tar x', this is to use subcommand as option
|
55
|
-
# That's reasonable also.
|
56
|
-
@commands = ARGV[0...-1]
|
57
|
-
|
58
50
|
# p option
|
59
51
|
# p commands
|
60
52
|
end
|
61
53
|
|
62
54
|
# routine
|
63
55
|
def help
|
56
|
+
puts("WhatOption v#{WhatOption::VERSION}")
|
57
|
+
puts
|
64
58
|
puts <<~HELP
|
65
59
|
Usage:
|
66
60
|
|
@@ -68,30 +62,60 @@ class WhatOption::CliHandler
|
|
68
62
|
|
69
63
|
Options:
|
70
64
|
|
71
|
-
-u
|
72
|
-
-
|
73
|
-
-
|
65
|
+
-u Update ~/.whatoption data
|
66
|
+
-l <command> List command options
|
67
|
+
-h Print this help
|
68
|
+
-v Print version
|
74
69
|
|
75
70
|
Examples:
|
76
71
|
|
77
72
|
whatoption ruby -c
|
78
73
|
whatoption tar x
|
79
74
|
whatoption git ls-files -z
|
75
|
+
whatoption bash -c
|
76
|
+
whatoption bash [ -n
|
80
77
|
|
81
78
|
HELP
|
82
79
|
end
|
83
80
|
|
84
|
-
|
85
|
-
|
81
|
+
|
82
|
+
# routine
|
83
|
+
def get_option
|
84
|
+
|
85
|
+
if @argv.size == 1
|
86
|
+
puts("Please input the option for command '#{@argv[0]}'".red) || return
|
87
|
+
end
|
88
|
+
|
89
|
+
option = ARGV[-1] # Shouldn't detect where is begin with '-' or '--'
|
90
|
+
# because some options are just single characters,
|
91
|
+
# for example, 'tar x', this is to use subcommand as option
|
92
|
+
# That's reasonable also.
|
93
|
+
commands = ARGV[0...-1]
|
94
|
+
|
86
95
|
# Because the initializer above will not always finish initializing
|
87
96
|
if (not @commands) || (not @option)
|
88
97
|
exit
|
89
98
|
end
|
90
|
-
option_info = WhatOption::OptionInfo.new
|
99
|
+
option_info = WhatOption::OptionInfo.new commands, option
|
91
100
|
option_info.show
|
92
101
|
end
|
93
102
|
|
103
|
+
|
104
|
+
# routine
|
105
|
+
def list_options
|
106
|
+
|
107
|
+
if @argv.size == 1
|
108
|
+
puts("Please input the command name after '-l'".red) || return
|
109
|
+
end
|
110
|
+
|
111
|
+
option = nil
|
112
|
+
commands = ARGV[1..-1]
|
113
|
+
option_info = WhatOption::OptionInfo.new commands, option
|
114
|
+
option_info.list
|
115
|
+
end
|
116
|
+
|
117
|
+
|
94
118
|
end
|
95
119
|
|
120
|
+
# main
|
96
121
|
cli = WhatOption::CliHandler.new ARGV
|
97
|
-
cli.work
|
data/lib/whatoption.rb
CHANGED
@@ -1,23 +1,18 @@
|
|
1
1
|
# ---------------------------------------------------------------
|
2
2
|
# File : whatoption.rb
|
3
|
-
# Authors :
|
3
|
+
# Authors : Aoran Zeng <ccmywish@qq.com>
|
4
4
|
# Created on : <2023-02-06>
|
5
|
-
# Last modified : <2023-
|
5
|
+
# Last modified : <2023-03-14>
|
6
6
|
#
|
7
7
|
# whatoption:
|
8
8
|
#
|
9
9
|
# Lib file
|
10
10
|
#
|
11
|
-
# ----------
|
12
|
-
# Changelog:
|
13
|
-
#
|
14
|
-
# ~> v0.1.0
|
15
|
-
# <2023-02-06> Create file
|
16
11
|
# ---------------------------------------------------------------
|
17
12
|
|
18
13
|
module WhatOption
|
19
14
|
|
20
|
-
VERSION = "0.
|
15
|
+
VERSION = "0.3.0"
|
21
16
|
|
22
17
|
require 'pathname'
|
23
18
|
OPTIONS_DATA_DIR = Pathname.new File.expand_path("~/.whatoption")
|
@@ -42,8 +37,9 @@ module WhatOption
|
|
42
37
|
|
43
38
|
@file # the target TOML file we will load in
|
44
39
|
|
45
|
-
@
|
46
|
-
@rec_desc # record field
|
40
|
+
@rec_usage # record field: the option's usage
|
41
|
+
@rec_desc # record field: the option's own meaning
|
42
|
+
@rec_func # record field: the function of the option
|
47
43
|
|
48
44
|
=end
|
49
45
|
|
@@ -63,14 +59,25 @@ module WhatOption
|
|
63
59
|
|
64
60
|
# routine
|
65
61
|
def load_sheet
|
62
|
+
require 'tomlrb'
|
66
63
|
# It's very interesting here, you have to put parentheses then 'commands.join()' is
|
67
64
|
# treated as a string.
|
68
65
|
# Without parentheses, the + is affected by OPTIONS_DATA_DIR,
|
69
66
|
# So first '+'s both side are Pathname
|
70
67
|
# And '+' is to add a '/' to component
|
71
68
|
@file = OPTIONS_DATA_DIR + (@commands.join('/') + ".toml")
|
69
|
+
|
70
|
+
# if the file not exists, it is maybe in the dir (with its own name)
|
71
|
+
# For example:
|
72
|
+
# "bash -c" will first search 'ROOT/bash.toml'
|
73
|
+
# if not exist, then we will search 'ROOT/bash/bash.toml'
|
74
|
+
#
|
75
|
+
if ! File.exist? @file
|
76
|
+
@file = Pathname.new(@file.to_s.delete_suffix(".toml")) +
|
77
|
+
(@commands.last + ".toml")
|
78
|
+
end
|
79
|
+
|
72
80
|
if File.exist? @file
|
73
|
-
require 'tomlrb'
|
74
81
|
return Tomlrb.load_file @file
|
75
82
|
else
|
76
83
|
puts "File #@file not exist!"
|
@@ -79,6 +86,28 @@ module WhatOption
|
|
79
86
|
end
|
80
87
|
|
81
88
|
|
89
|
+
# method
|
90
|
+
def list
|
91
|
+
sheet = load_sheet
|
92
|
+
if not sheet
|
93
|
+
exit 1
|
94
|
+
end
|
95
|
+
|
96
|
+
option_max_len = sheet.keys.map(&:length).max
|
97
|
+
left = option_max_len + 3
|
98
|
+
|
99
|
+
lmda = -> hash do hash['desc'].length end
|
100
|
+
desc_max_len = sheet.values.map(&lmda).max
|
101
|
+
|
102
|
+
middle = desc_max_len + 3
|
103
|
+
|
104
|
+
puts "Options for '#{@commands.join}':"
|
105
|
+
sheet.each do |key, value|
|
106
|
+
printf " %s%s%s\n", key.ljust(left), value['desc'].ljust(middle), value['func']
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
|
82
111
|
# routine
|
83
112
|
def resolve
|
84
113
|
sheet = load_sheet
|
@@ -89,12 +118,15 @@ module WhatOption
|
|
89
118
|
record = sheet[@option] ||
|
90
119
|
puts("Error: Option [#@option] is not recorded in #@file".red) ||
|
91
120
|
exit(1)
|
92
|
-
@
|
93
|
-
puts("Error: No field '
|
121
|
+
@rec_usage = record['usage'] ||
|
122
|
+
puts("Error: No field 'usage' in #@file [#@calling_command]".red) ||
|
94
123
|
exit(1)
|
95
124
|
@rec_desc = record['desc'] ||
|
96
125
|
puts("Error: No field 'desc' in #@file [#@calling_command]".red) ||
|
97
126
|
exit(1)
|
127
|
+
@rec_func = record['func'] ||
|
128
|
+
puts("Error: No field 'func' in #@file [#@calling_command]".red) ||
|
129
|
+
exit(1)
|
98
130
|
end
|
99
131
|
|
100
132
|
|
@@ -106,12 +138,14 @@ module WhatOption
|
|
106
138
|
if not @sub_commands.empty?
|
107
139
|
result_cmd += ' ' + @sub_commands.join(' ').blue
|
108
140
|
end
|
109
|
-
result_cmd += ' ' + @
|
141
|
+
result_cmd += ' ' + @rec_usage.magenta
|
110
142
|
puts result_cmd
|
111
143
|
|
112
144
|
# newline description
|
113
|
-
print "\n "
|
145
|
+
print "\n #{@option}: "
|
114
146
|
puts @rec_desc.green
|
147
|
+
print "\n "
|
148
|
+
puts @rec_func
|
115
149
|
puts
|
116
150
|
end
|
117
151
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whatoption
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ccmywish
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-03-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tomlrb
|
@@ -73,7 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
73
|
- !ruby/object:Gem::Version
|
74
74
|
version: '0'
|
75
75
|
requirements: []
|
76
|
-
rubygems_version: 3.
|
76
|
+
rubygems_version: 3.4.1
|
77
77
|
signing_key:
|
78
78
|
specification_version: 4
|
79
79
|
summary: 'whatoption: What does the option mean?'
|