command_kit 0.1.0.pre1 → 0.2.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/.github/workflows/ruby.yml +15 -0
- data/.rubocop.yml +138 -0
- data/ChangeLog.md +34 -2
- data/Gemfile +3 -0
- data/README.md +135 -214
- data/Rakefile +3 -2
- data/command_kit.gemspec +4 -4
- data/examples/colors.rb +30 -0
- data/examples/command.rb +65 -0
- data/examples/pager.rb +30 -0
- data/gemspec.yml +10 -2
- data/lib/command_kit/arguments/argument.rb +16 -44
- data/lib/command_kit/arguments/argument_value.rb +3 -30
- data/lib/command_kit/arguments.rb +66 -20
- data/lib/command_kit/colors.rb +253 -45
- data/lib/command_kit/command.rb +50 -3
- data/lib/command_kit/command_name.rb +9 -0
- data/lib/command_kit/commands/auto_load/subcommand.rb +3 -0
- data/lib/command_kit/commands/auto_load.rb +16 -0
- data/lib/command_kit/commands/auto_require.rb +16 -0
- data/lib/command_kit/commands/command.rb +3 -0
- data/lib/command_kit/commands/help.rb +2 -0
- data/lib/command_kit/commands/parent_command.rb +7 -0
- data/lib/command_kit/commands/subcommand.rb +15 -0
- data/lib/command_kit/commands.rb +40 -4
- data/lib/command_kit/description.rb +15 -2
- data/lib/command_kit/env/home.rb +9 -0
- data/lib/command_kit/env/path.rb +15 -0
- data/lib/command_kit/env.rb +4 -0
- data/lib/command_kit/examples.rb +15 -2
- data/lib/command_kit/exception_handler.rb +4 -0
- data/lib/command_kit/help/man.rb +74 -47
- data/lib/command_kit/help.rb +10 -1
- data/lib/command_kit/inflector.rb +49 -17
- data/lib/command_kit/interactive.rb +239 -0
- data/lib/command_kit/main.rb +20 -9
- data/lib/command_kit/man.rb +44 -0
- data/lib/command_kit/open_app.rb +69 -0
- data/lib/command_kit/options/option.rb +36 -9
- data/lib/command_kit/options/option_value.rb +42 -3
- data/lib/command_kit/options/parser.rb +44 -17
- data/lib/command_kit/options/quiet.rb +3 -0
- data/lib/command_kit/options/verbose.rb +5 -0
- data/lib/command_kit/options/version.rb +6 -0
- data/lib/command_kit/options.rb +59 -10
- data/lib/command_kit/os/linux.rb +157 -0
- data/lib/command_kit/os.rb +165 -11
- data/lib/command_kit/package_manager.rb +200 -0
- data/lib/command_kit/pager.rb +84 -9
- data/lib/command_kit/printing/indent.rb +25 -2
- data/lib/command_kit/printing.rb +23 -0
- data/lib/command_kit/program_name.rb +7 -0
- data/lib/command_kit/stdio.rb +24 -0
- data/lib/command_kit/sudo.rb +40 -0
- data/lib/command_kit/terminal.rb +159 -0
- data/lib/command_kit/usage.rb +14 -0
- data/lib/command_kit/version.rb +1 -1
- data/lib/command_kit/xdg.rb +21 -1
- data/lib/command_kit.rb +1 -0
- data/spec/arguments/argument_spec.rb +5 -41
- data/spec/arguments/argument_value_spec.rb +1 -61
- data/spec/arguments_spec.rb +8 -25
- data/spec/colors_spec.rb +277 -13
- data/spec/command_name_spec.rb +1 -1
- data/spec/command_spec.rb +4 -1
- data/spec/commands/auto_load/subcommand_spec.rb +1 -1
- data/spec/commands/auto_load_spec.rb +1 -1
- data/spec/commands/auto_require_spec.rb +2 -2
- data/spec/commands/help_spec.rb +1 -1
- data/spec/commands/parent_command_spec.rb +1 -1
- data/spec/commands/subcommand_spec.rb +1 -1
- data/spec/commands_spec.rb +2 -2
- data/spec/description_spec.rb +1 -25
- data/spec/env/home_spec.rb +1 -1
- data/spec/env/path_spec.rb +1 -1
- data/spec/examples_spec.rb +1 -25
- data/spec/exception_handler_spec.rb +1 -1
- data/spec/help/man_spec.rb +316 -0
- data/spec/help_spec.rb +0 -25
- data/spec/inflector_spec.rb +71 -9
- data/spec/interactive_spec.rb +415 -0
- data/spec/main_spec.rb +7 -7
- data/spec/man_spec.rb +46 -0
- data/spec/open_app_spec.rb +85 -0
- data/spec/options/option_spec.rb +48 -9
- data/spec/options/option_value_spec.rb +53 -4
- data/spec/options_spec.rb +1 -1
- data/spec/os/linux_spec.rb +154 -0
- data/spec/os_spec.rb +201 -14
- data/spec/package_manager_spec.rb +806 -0
- data/spec/pager_spec.rb +78 -15
- data/spec/printing/indent_spec.rb +1 -1
- data/spec/printing_spec.rb +10 -2
- data/spec/program_name_spec.rb +1 -1
- data/spec/spec_helper.rb +0 -3
- data/spec/sudo_spec.rb +51 -0
- data/spec/{console_spec.rb → terminal_spec.rb} +65 -35
- data/spec/usage_spec.rb +2 -2
- data/spec/xdg_spec.rb +1 -1
- metadata +32 -13
- data/lib/command_kit/arguments/usage.rb +0 -6
- data/lib/command_kit/console.rb +0 -141
- data/lib/command_kit/options/usage.rb +0 -6
data/Rakefile
CHANGED
data/command_kit.gemspec
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'yaml'
|
4
2
|
|
5
3
|
Gem::Specification.new do |gem|
|
@@ -20,11 +18,13 @@ Gem::Specification.new do |gem|
|
|
20
18
|
gem.authors = Array(gemspec['authors'])
|
21
19
|
gem.email = gemspec['email']
|
22
20
|
gem.homepage = gemspec['homepage']
|
21
|
+
gem.metadata = gemspec['metadata'] if gemspec['metadata']
|
23
22
|
|
24
23
|
glob = lambda { |patterns| gem.files & Dir[*patterns] }
|
25
24
|
|
26
|
-
gem.files =
|
27
|
-
|
25
|
+
gem.files = if gemspec['files'] then glob[gemspec['files']]
|
26
|
+
else `git ls-files`.split($/)
|
27
|
+
end
|
28
28
|
|
29
29
|
gem.executables = gemspec.fetch('executables') do
|
30
30
|
glob['bin/*'].map { |path| File.basename(path) }
|
data/examples/colors.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib',__FILE__))
|
4
|
+
require 'command_kit/command'
|
5
|
+
require 'command_kit/colors'
|
6
|
+
|
7
|
+
class ColorsCmd < CommandKit::Command
|
8
|
+
|
9
|
+
include CommandKit::Colors
|
10
|
+
|
11
|
+
description "Prints all of the standard ANSI colors"
|
12
|
+
|
13
|
+
def run
|
14
|
+
colors do |c|
|
15
|
+
puts c.black("Black") + "\t" + c.bold(c.black("Bold"))
|
16
|
+
puts c.red("Red") + "\t" + c.bold(c.red("Bold"))
|
17
|
+
puts c.green("Green") + "\t" + c.bold(c.green("Bold"))
|
18
|
+
puts c.yellow("Yellow") + "\t" + c.bold(c.yellow("Bold"))
|
19
|
+
puts c.blue("Blue") + "\t" + c.bold(c.blue("Bold"))
|
20
|
+
puts c.magenta("Magenta") + "\t" + c.bold(c.magenta("Bold"))
|
21
|
+
puts c.cyan("Cyan") + "\t" + c.bold(c.cyan("Bold"))
|
22
|
+
puts c.cyan("White") + "\t" + c.bold(c.white("Bold"))
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
if __FILE__ == $0
|
29
|
+
ColorsCmd.start
|
30
|
+
end
|
data/examples/command.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib',__FILE__))
|
4
|
+
require 'command_kit/command'
|
5
|
+
|
6
|
+
class Command < CommandKit::Command
|
7
|
+
|
8
|
+
usage '[OPTIONS] [-o OUTPUT] FILE'
|
9
|
+
|
10
|
+
option :count, short: '-c',
|
11
|
+
value: {
|
12
|
+
type: Integer,
|
13
|
+
default: 1
|
14
|
+
},
|
15
|
+
desc: "Number of times"
|
16
|
+
|
17
|
+
option :output, value: {
|
18
|
+
type: String,
|
19
|
+
usage: 'FILE'
|
20
|
+
},
|
21
|
+
short: '-o',
|
22
|
+
desc: "Optional output file"
|
23
|
+
|
24
|
+
option :verbose, short: '-v', desc: "Increase verbose level" do
|
25
|
+
@verbose += 1
|
26
|
+
end
|
27
|
+
|
28
|
+
argument :file, required: true,
|
29
|
+
usage: 'FILE',
|
30
|
+
desc: "Input file"
|
31
|
+
|
32
|
+
examples [
|
33
|
+
'-o path/to/output.txt path/to/input.txt',
|
34
|
+
'-v -c 2 -o path/to/output.txt path/to/input.txt'
|
35
|
+
]
|
36
|
+
|
37
|
+
description "Example command"
|
38
|
+
|
39
|
+
def initialize
|
40
|
+
super
|
41
|
+
|
42
|
+
@verbose = 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def run(file)
|
46
|
+
unless options.empty?
|
47
|
+
puts "Options:"
|
48
|
+
options.each do |name,value|
|
49
|
+
puts " #{name.inspect} => #{value.inspect}"
|
50
|
+
end
|
51
|
+
puts
|
52
|
+
end
|
53
|
+
|
54
|
+
puts "Arguments:"
|
55
|
+
puts " file = #{file.inspect}"
|
56
|
+
puts
|
57
|
+
|
58
|
+
puts "Custom Variables:"
|
59
|
+
puts " version = #{@verbose.inspect}"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if __FILE__ == $0
|
64
|
+
Command.start
|
65
|
+
end
|
data/examples/pager.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib',__FILE__))
|
4
|
+
require 'command_kit/command'
|
5
|
+
require 'command_kit/pager'
|
6
|
+
|
7
|
+
class PagerCmd < CommandKit::Command
|
8
|
+
|
9
|
+
include CommandKit::Pager
|
10
|
+
|
11
|
+
description "Demos using the pager"
|
12
|
+
|
13
|
+
def run
|
14
|
+
puts "Starting pager ..."
|
15
|
+
|
16
|
+
pager do |io|
|
17
|
+
10.times do |i|
|
18
|
+
io.puts i
|
19
|
+
sleep 0.5
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
puts "Exiting pager ..."
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
if __FILE__ == $0
|
29
|
+
PagerCmd.start
|
30
|
+
end
|
data/gemspec.yml
CHANGED
@@ -2,11 +2,19 @@ name: command_kit
|
|
2
2
|
summary: A toolkit for building Ruby CLI commands
|
3
3
|
description:
|
4
4
|
A Ruby toolkit for building clean, correct, and robust CLI commands as
|
5
|
-
Ruby classes.
|
5
|
+
plain-old Ruby classes.
|
6
|
+
|
6
7
|
license: MIT
|
7
8
|
authors: Postmodern
|
8
9
|
email: postmodern.mod3@gmail.com
|
9
|
-
homepage: https://github.com/postmodern/command_kit#readme
|
10
|
+
homepage: https://github.com/postmodern/command_kit.rb#readme
|
11
|
+
|
12
|
+
metadata:
|
13
|
+
documentation_uri: https://rubydoc.info/gems/command_kit
|
14
|
+
source_code_uri: https://github.com/postmodern/command_kit.rb
|
15
|
+
bug_tracker_uri: https://github.com/postmodern/command_kit.rb/issues
|
16
|
+
changelog_uri: https://github.com/postmodern/command_kit.rb/blob/main/ChangeLog.md
|
17
|
+
|
10
18
|
|
11
19
|
required_ruby_version: ">= 2.7.0"
|
12
20
|
|
@@ -5,84 +5,56 @@ module CommandKit
|
|
5
5
|
#
|
6
6
|
# Represents a defined argument.
|
7
7
|
#
|
8
|
+
# @api private
|
9
|
+
#
|
8
10
|
class Argument < ArgumentValue
|
9
11
|
|
12
|
+
# The argument's name.
|
13
|
+
#
|
10
14
|
# @return [Symbol]
|
11
15
|
attr_reader :name
|
12
16
|
|
13
|
-
#
|
14
|
-
|
15
|
-
|
16
|
-
# @return [String, nil]
|
17
|
+
# The argument's description.
|
18
|
+
#
|
19
|
+
# @return [String]
|
17
20
|
attr_reader :desc
|
18
21
|
|
19
|
-
# @return [Regexp, nil]
|
20
|
-
attr_reader :pattern
|
21
|
-
|
22
|
-
# @return [Proc, nil]
|
23
|
-
attr_reader :parser
|
24
|
-
|
25
|
-
# @return [Proc, nil]
|
26
|
-
attr_reader :block
|
27
|
-
|
28
22
|
#
|
29
23
|
# Initializes the argument.
|
30
24
|
#
|
31
25
|
# @param [Symbol] name
|
32
|
-
#
|
33
|
-
# @param [Class, Hash, Array, Regexp] type
|
26
|
+
# The name of the argument.
|
34
27
|
#
|
35
28
|
# @param [String, nil] usage
|
36
|
-
#
|
37
|
-
# @param [Object, Proc, nil] default
|
29
|
+
# The usage string for the argument. Defaults to the argument's name.
|
38
30
|
#
|
39
31
|
# @param [Boolean] required
|
32
|
+
# Specifies whether the argument is required or optional.
|
40
33
|
#
|
41
34
|
# @param [Boolean] repeats
|
35
|
+
# Specifies whether the argument can be repeated multiple times.
|
42
36
|
#
|
43
37
|
# @param [String] desc
|
44
|
-
#
|
45
|
-
# @note `usage` will be assigned a default value based on `type` and
|
46
|
-
# `name`.
|
38
|
+
# The description for the argument.
|
47
39
|
#
|
48
40
|
# @yield [(value)]
|
41
|
+
# If a block is given, it will be used to parse the argument's value.
|
42
|
+
# Note: not currently used.
|
49
43
|
#
|
50
44
|
# @yieldparam [Object, nil] value
|
51
45
|
#
|
52
|
-
def initialize(name,
|
53
|
-
usage: name.to_s.upcase,
|
54
|
-
default: nil,
|
46
|
+
def initialize(name, usage: name.to_s.upcase,
|
55
47
|
required: true,
|
56
48
|
repeats: false,
|
57
|
-
desc:
|
58
|
-
&block)
|
49
|
+
desc: )
|
59
50
|
super(
|
60
|
-
type: type,
|
61
51
|
usage: usage,
|
62
|
-
default: default,
|
63
52
|
required: required
|
64
53
|
)
|
65
54
|
|
66
55
|
@name = name
|
67
56
|
@repeats = repeats
|
68
57
|
@desc = desc
|
69
|
-
|
70
|
-
@pattern, @parser = self.class.parser(@type)
|
71
|
-
|
72
|
-
@block = block
|
73
|
-
end
|
74
|
-
|
75
|
-
#
|
76
|
-
# Looks up the option parser for the given `OptionParser` type.
|
77
|
-
#
|
78
|
-
# @param [Class] type
|
79
|
-
# The `OptionParser` type class.
|
80
|
-
#
|
81
|
-
# @return [(Regexp, Proc), nil]
|
82
|
-
# The matching pattern and converter proc.
|
83
|
-
#
|
84
|
-
def self.parser(type)
|
85
|
-
OptionParser::DefaultList.search(:atype,type)
|
86
58
|
end
|
87
59
|
|
88
60
|
#
|
@@ -3,18 +3,10 @@ module CommandKit
|
|
3
3
|
#
|
4
4
|
# Represents an individual argument value.
|
5
5
|
#
|
6
|
+
# @api private
|
7
|
+
#
|
6
8
|
class ArgumentValue
|
7
9
|
|
8
|
-
# The desired type of the argument value.
|
9
|
-
#
|
10
|
-
# @return [Class, Hash, Array, Regexp, nil]
|
11
|
-
attr_reader :type
|
12
|
-
|
13
|
-
# The default parsed value for the argument value.
|
14
|
-
#
|
15
|
-
# @return [Object, Proc, nil]
|
16
|
-
attr_reader :default
|
17
|
-
|
18
10
|
# Specifies whether the argument value is required or optional.
|
19
11
|
#
|
20
12
|
# @return [Boolean]
|
@@ -28,22 +20,14 @@ module CommandKit
|
|
28
20
|
#
|
29
21
|
# Initializes the argument value.
|
30
22
|
#
|
31
|
-
# @param [Class, Hash, Array, Regexp] type
|
32
|
-
# The type of the argument value.
|
33
|
-
#
|
34
23
|
# @param [Boolean] required
|
35
24
|
# Specifies whether the argument value is required or optional.
|
36
25
|
#
|
37
26
|
# @param [String] usage
|
38
27
|
# The usage string to represent the argument value.
|
39
28
|
#
|
40
|
-
|
41
|
-
# The default parsed value for the argument value.
|
42
|
-
#
|
43
|
-
def initialize(type: nil, required: true, default: nil, usage: )
|
44
|
-
@type = type
|
29
|
+
def initialize(required: true, usage: )
|
45
30
|
@required = required
|
46
|
-
@default = default
|
47
31
|
@usage = usage
|
48
32
|
end
|
49
33
|
|
@@ -65,17 +49,6 @@ module CommandKit
|
|
65
49
|
!@required
|
66
50
|
end
|
67
51
|
|
68
|
-
#
|
69
|
-
# Returns a new default value.
|
70
|
-
#
|
71
|
-
# @return [Object]
|
72
|
-
#
|
73
|
-
def default_value
|
74
|
-
if @default.respond_to?(:call) then @default.call
|
75
|
-
else @default.dup
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
52
|
end
|
80
53
|
end
|
81
54
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'command_kit/main'
|
1
4
|
require 'command_kit/help'
|
2
5
|
require 'command_kit/arguments/argument'
|
3
6
|
|
@@ -9,15 +12,45 @@ module CommandKit
|
|
9
12
|
#
|
10
13
|
# include CommandKit::Arguments
|
11
14
|
#
|
12
|
-
# argument :output,
|
13
|
-
#
|
15
|
+
# argument :output, desc: 'The output file'
|
16
|
+
#
|
17
|
+
# argument :input, desc: 'The input file(s)'
|
14
18
|
#
|
15
|
-
#
|
16
|
-
#
|
19
|
+
# def run(output,input)
|
20
|
+
# end
|
21
|
+
#
|
22
|
+
# ### Optional Arguments
|
23
|
+
#
|
24
|
+
# argument :dir, required: false,
|
25
|
+
# desc: 'Can be omitted'
|
26
|
+
#
|
27
|
+
# def run(dir=nil)
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# ### Repeating Arguments
|
31
|
+
#
|
32
|
+
# argument :files, repeats: true,
|
33
|
+
# desc: 'Can be repeated one or more times'
|
34
|
+
#
|
35
|
+
# def run(*files)
|
36
|
+
# end
|
37
|
+
#
|
38
|
+
# ### Optional Repeating Arguments
|
39
|
+
#
|
40
|
+
# argument :files, required: true,
|
41
|
+
# repeats: true,
|
42
|
+
# desc: 'Can be repeated one or more times'
|
43
|
+
#
|
44
|
+
# def run(*files)
|
45
|
+
# end
|
17
46
|
#
|
18
47
|
module Arguments
|
48
|
+
include Main
|
19
49
|
include Help
|
20
50
|
|
51
|
+
#
|
52
|
+
# @api private
|
53
|
+
#
|
21
54
|
module ModuleMethods
|
22
55
|
#
|
23
56
|
# Extends {ClassMethods} or {ModuleMethods}, depending on whether
|
@@ -49,6 +82,8 @@ module CommandKit
|
|
49
82
|
# @return [Hash{Symbol => Argument}]
|
50
83
|
# The defined argument for the class and it's superclass.
|
51
84
|
#
|
85
|
+
# @api semipublic
|
86
|
+
#
|
52
87
|
def arguments
|
53
88
|
@arguments ||= if superclass.kind_of?(ClassMethods)
|
54
89
|
superclass.arguments.dup
|
@@ -61,13 +96,22 @@ module CommandKit
|
|
61
96
|
# Defines an argument for the class.
|
62
97
|
#
|
63
98
|
# @param [Symbol] name
|
64
|
-
# The argument
|
99
|
+
# The name of the argument.
|
100
|
+
#
|
101
|
+
# @param [Hash{Symbol => Object}] kwargs
|
102
|
+
# Keyword arguments.
|
65
103
|
#
|
66
|
-
# @
|
67
|
-
#
|
104
|
+
# @option kwargs [String, nil] usage
|
105
|
+
# The usage string for the argument. Defaults to the argument's name.
|
68
106
|
#
|
69
|
-
# @
|
70
|
-
#
|
107
|
+
# @option kwargs [Boolean] required
|
108
|
+
# Specifies whether the argument is required or optional.
|
109
|
+
#
|
110
|
+
# @option kwargs [Boolean] repeats
|
111
|
+
# Specifies whether the argument can be repeated multiple times.
|
112
|
+
#
|
113
|
+
# @option kwargs [String] desc
|
114
|
+
# The description for the argument.
|
71
115
|
#
|
72
116
|
# @return [Argument]
|
73
117
|
# The newly defined argument.
|
@@ -79,14 +123,8 @@ module CommandKit
|
|
79
123
|
# option :bar, usage: 'BAR',
|
80
124
|
# desc: "Bar argument"
|
81
125
|
#
|
82
|
-
# @example With a custom block:
|
83
|
-
# argument :bar, desc: "Bar argument" do |bar|
|
84
|
-
# # ...
|
85
|
-
# end
|
86
|
-
#
|
87
126
|
# @example With a custom type:
|
88
|
-
# argument :bar,
|
89
|
-
# desc: "Bar argument"
|
127
|
+
# argument :bar, desc: "Bar argument"
|
90
128
|
#
|
91
129
|
# @example With a default value:
|
92
130
|
# argument :bar, default: "bar.txt",
|
@@ -100,8 +138,10 @@ module CommandKit
|
|
100
138
|
# argument :bar, repeats: true,
|
101
139
|
# desc: "Bar argument"
|
102
140
|
#
|
103
|
-
|
104
|
-
|
141
|
+
# @api public
|
142
|
+
#
|
143
|
+
def argument(name,**kwargs)
|
144
|
+
arguments[name] = Argument.new(name,**kwargs)
|
105
145
|
end
|
106
146
|
end
|
107
147
|
|
@@ -116,6 +156,8 @@ module CommandKit
|
|
116
156
|
# The exit status code. If too few or too many arguments are given, then
|
117
157
|
# an error message is printed and `1` is returned.
|
118
158
|
#
|
159
|
+
# @api public
|
160
|
+
#
|
119
161
|
def main(argv=[])
|
120
162
|
required_args = self.class.arguments.each_value.count(&:required?)
|
121
163
|
optional_args = self.class.arguments.each_value.count(&:optional?)
|
@@ -137,12 +179,14 @@ module CommandKit
|
|
137
179
|
#
|
138
180
|
# Prints any defined arguments, along with the usual `--help` information.
|
139
181
|
#
|
182
|
+
# @api semipublic
|
183
|
+
#
|
140
184
|
def help_arguments
|
141
185
|
unless (arguments = self.class.arguments).empty?
|
142
186
|
puts
|
143
187
|
puts 'Arguments:'
|
144
188
|
|
145
|
-
|
189
|
+
arguments.each_value do |arg|
|
146
190
|
puts " #{arg.usage.ljust(33)}#{arg.desc}"
|
147
191
|
end
|
148
192
|
end
|
@@ -152,8 +196,10 @@ module CommandKit
|
|
152
196
|
# Calls the superclass'es `#help` method, if it's defined, then calls
|
153
197
|
# {#help_arguments}.
|
154
198
|
#
|
199
|
+
# @api public
|
200
|
+
#
|
155
201
|
def help
|
156
|
-
super
|
202
|
+
super
|
157
203
|
|
158
204
|
help_arguments
|
159
205
|
end
|