whatoption 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/whatoption +97 -0
- data/lib/whatoption.rb +121 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0dceb90256c82b20eb0838c98b9aa75ed1747662d93b96232e20164e1279d3ff
|
4
|
+
data.tar.gz: 8a4c446c1961099ce494e2c669154d3bbc8d8c80294e4bc179ae6ae619f7d1fb
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5baf5062312181ecb72ffff8ac6aefda961c2f499648d4d94657495ad5febc5cdc427102172b2e29497ff2ee381b30638a18970c5bde608622e0fe0aedb553aa
|
7
|
+
data.tar.gz: 170829ba3140198e7e7bf711b5275450375258b56dca1c0577b87febd13a1ce811a730c16237094055f8c4f615c2fc32fd4047579bfaf6fc01386e8e32087ec3
|
data/bin/whatoption
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# ---------------------------------------------------------------
|
3
|
+
# File : whatoption.rb
|
4
|
+
# Authors : ccmywish <ccmywish@qq.com>
|
5
|
+
# Created on : <2023-02-06>
|
6
|
+
# Last modified : <2023-02-07>
|
7
|
+
# Contributors :
|
8
|
+
#
|
9
|
+
# whatoption:
|
10
|
+
#
|
11
|
+
# Tells you what the option of the command means.
|
12
|
+
#
|
13
|
+
# ----------
|
14
|
+
# Changelog:
|
15
|
+
#
|
16
|
+
# ~> v0.1.0
|
17
|
+
# <2023-02-06> Create file
|
18
|
+
# ---------------------------------------------------------------
|
19
|
+
|
20
|
+
require 'whatoption'
|
21
|
+
|
22
|
+
####################
|
23
|
+
# main
|
24
|
+
####################
|
25
|
+
|
26
|
+
class WhatOption::CliHandler
|
27
|
+
|
28
|
+
def initialize(argv)
|
29
|
+
if argv.empty?
|
30
|
+
help || return
|
31
|
+
end
|
32
|
+
|
33
|
+
case argv[0]
|
34
|
+
when '-h'
|
35
|
+
help || return
|
36
|
+
when '-v'
|
37
|
+
puts("WhatOption v#{WhatOption::VERSION}") || return
|
38
|
+
when '-u'
|
39
|
+
# This output will be hided into the return string
|
40
|
+
# `git -C #{WhatOption::OPTIONS_DATA_DIR} pull`
|
41
|
+
|
42
|
+
# So we use system()
|
43
|
+
puts cmd = "git -C #{WhatOption::OPTIONS_DATA_DIR} pull"
|
44
|
+
system cmd
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
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
|
+
# p option
|
59
|
+
# p commands
|
60
|
+
end
|
61
|
+
|
62
|
+
# routine
|
63
|
+
def help
|
64
|
+
puts <<~HELP
|
65
|
+
Usage:
|
66
|
+
|
67
|
+
whatoption command subcommands option
|
68
|
+
|
69
|
+
Options:
|
70
|
+
|
71
|
+
-u Update ~/.whatoption data
|
72
|
+
-h Print this help
|
73
|
+
-v Print version
|
74
|
+
|
75
|
+
Examples:
|
76
|
+
|
77
|
+
whatoption ruby -c
|
78
|
+
whatoption tar x
|
79
|
+
whatoption git ls-files -z
|
80
|
+
|
81
|
+
HELP
|
82
|
+
end
|
83
|
+
|
84
|
+
# method
|
85
|
+
def work
|
86
|
+
# Because the initializer above will not always finish initializing
|
87
|
+
if (not @commands) || (not @option)
|
88
|
+
exit
|
89
|
+
end
|
90
|
+
option_info = WhatOption::OptionInfo.new @commands, @option
|
91
|
+
option_info.show
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
cli = WhatOption::CliHandler.new ARGV
|
97
|
+
cli.work
|
data/lib/whatoption.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# ---------------------------------------------------------------
|
2
|
+
# File : whatoption.rb
|
3
|
+
# Authors : ccmywish <ccmywish@qq.com>
|
4
|
+
# Created on : <2023-02-06>
|
5
|
+
# Last modified : <2023-02-07>
|
6
|
+
#
|
7
|
+
# whatoption:
|
8
|
+
#
|
9
|
+
# Lib file
|
10
|
+
#
|
11
|
+
# ----------
|
12
|
+
# Changelog:
|
13
|
+
#
|
14
|
+
# ~> v0.1.0
|
15
|
+
# <2023-02-06> Create file
|
16
|
+
# ---------------------------------------------------------------
|
17
|
+
|
18
|
+
module WhatOption
|
19
|
+
|
20
|
+
VERSION = "0.1.0"
|
21
|
+
|
22
|
+
require 'pathname'
|
23
|
+
OPTIONS_DATA_DIR = Pathname.new File.expand_path("~/.whatoption")
|
24
|
+
|
25
|
+
if not Dir.exist? OPTIONS_DATA_DIR
|
26
|
+
`git clone https://github.com/ccmywish/whatoption.toml #{OPTIONS_DATA_DIR}`
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
class OptionInfo
|
31
|
+
|
32
|
+
require 'colorator'
|
33
|
+
|
34
|
+
=begin
|
35
|
+
|
36
|
+
attribute:
|
37
|
+
|
38
|
+
@commands # all commands(including sub)
|
39
|
+
@calling_command # the calling command itself
|
40
|
+
@sub_commands # possible sub commands
|
41
|
+
@option # the option we query
|
42
|
+
|
43
|
+
@file # the target TOML file we will load in
|
44
|
+
|
45
|
+
@rec_option # record field in toml file
|
46
|
+
@rec_desc # record field in toml file
|
47
|
+
|
48
|
+
=end
|
49
|
+
|
50
|
+
|
51
|
+
# method
|
52
|
+
def initialize(commands, option)
|
53
|
+
# Must clone, because we will delete in place later
|
54
|
+
@commands = commands.clone
|
55
|
+
@calling_command = commands[0]
|
56
|
+
|
57
|
+
commands.delete_at(0)
|
58
|
+
@sub_commands = commands
|
59
|
+
|
60
|
+
@option = option
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
# routine
|
65
|
+
def load_sheet
|
66
|
+
# It's very interesting here, you have to put parentheses then 'commands.join()' is
|
67
|
+
# treated as a string.
|
68
|
+
# Without parentheses, the + is affected by OPTIONS_DATA_DIR,
|
69
|
+
# So first '+'s both side are Pathname
|
70
|
+
# And '+' is to add a '/' to component
|
71
|
+
@file = OPTIONS_DATA_DIR + (@commands.join('/') + ".toml")
|
72
|
+
if File.exist? @file
|
73
|
+
require 'tomlrb'
|
74
|
+
return Tomlrb.load_file @file
|
75
|
+
else
|
76
|
+
puts "File #@file not exist!"
|
77
|
+
nil
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
# routine
|
83
|
+
def resolve
|
84
|
+
sheet = load_sheet
|
85
|
+
if not sheet
|
86
|
+
exit 1
|
87
|
+
end
|
88
|
+
|
89
|
+
record = sheet[@option] ||
|
90
|
+
puts("Error: Option [#@option] is not recorded in #@file".red) ||
|
91
|
+
exit(1)
|
92
|
+
@rec_option = record['option'] ||
|
93
|
+
puts("Error: No field 'option' in #@file [#@calling_command]".red) ||
|
94
|
+
exit(1)
|
95
|
+
@rec_desc = record['desc'] ||
|
96
|
+
puts("Error: No field 'desc' in #@file [#@calling_command]".red) ||
|
97
|
+
exit(1)
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
# method
|
102
|
+
def show
|
103
|
+
resolve
|
104
|
+
|
105
|
+
result_cmd = @calling_command.yellow
|
106
|
+
if not @sub_commands.empty?
|
107
|
+
result_cmd += ' ' + @sub_commands.join(' ').blue
|
108
|
+
end
|
109
|
+
result_cmd += ' ' + @rec_option.magenta
|
110
|
+
puts result_cmd
|
111
|
+
|
112
|
+
# newline description
|
113
|
+
print "\n "
|
114
|
+
puts @rec_desc.green
|
115
|
+
puts
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: whatoption
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- ccmywish
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-02-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: tomlrb
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: colorator
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.1'
|
41
|
+
description: 'This command line tool `whatoption` is used to record and explain commands''
|
42
|
+
options, so there is no need to run the command itself to check what the help info
|
43
|
+
is. Besides, many options only have one character, which is sometimes not easily
|
44
|
+
understood by users to remember.
|
45
|
+
|
46
|
+
'
|
47
|
+
email: ccmywish@qq.com
|
48
|
+
executables:
|
49
|
+
- whatoption
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- bin/whatoption
|
54
|
+
- lib/whatoption.rb
|
55
|
+
homepage: https://github.com/ccmywish/whatoption
|
56
|
+
licenses:
|
57
|
+
- MIT
|
58
|
+
metadata:
|
59
|
+
bug_tracker_uri: https://github.com/ccmywish/whatoption/issues
|
60
|
+
source_code_uri: https://github.com/ccmywish/whatoption
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubygems_version: 3.3.26
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: 'whatoption: What does the option mean?'
|
80
|
+
test_files: []
|