travis-cl 1.2.4
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 +7 -0
- data/CHANGELOG.md +134 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +59 -0
- data/MIT_LICENSE.md +21 -0
- data/README.md +1283 -0
- data/cl.gemspec +30 -0
- data/examples/README.md +22 -0
- data/examples/_src/args/cast.erb.rb +100 -0
- data/examples/_src/args/opts.erb.rb +100 -0
- data/examples/_src/args/required.erb.rb +63 -0
- data/examples/_src/args/splat.erb.rb +55 -0
- data/examples/_src/gem.erb.rb +99 -0
- data/examples/_src/heroku.erb.rb +47 -0
- data/examples/_src/rakeish.erb.rb +54 -0
- data/examples/_src/readme/abstract.erb.rb +27 -0
- data/examples/_src/readme/alias.erb.rb +22 -0
- data/examples/_src/readme/arg.erb.rb +21 -0
- data/examples/_src/readme/arg_array.erb.rb +21 -0
- data/examples/_src/readme/arg_type.erb.rb +23 -0
- data/examples/_src/readme/args_splat.erb.rb +55 -0
- data/examples/_src/readme/array.erb.rb +21 -0
- data/examples/_src/readme/basic.erb.rb +72 -0
- data/examples/_src/readme/default.erb.rb +21 -0
- data/examples/_src/readme/deprecated.erb.rb +21 -0
- data/examples/_src/readme/deprecated_alias.erb.rb +21 -0
- data/examples/_src/readme/description.erb.rb +60 -0
- data/examples/_src/readme/downcase.erb.rb +21 -0
- data/examples/_src/readme/enum.erb.rb +35 -0
- data/examples/_src/readme/example.erb.rb +25 -0
- data/examples/_src/readme/format.erb.rb +35 -0
- data/examples/_src/readme/internal.erb.rb +28 -0
- data/examples/_src/readme/negate.erb.rb +37 -0
- data/examples/_src/readme/note.erb.rb +25 -0
- data/examples/_src/readme/opts.erb.rb +33 -0
- data/examples/_src/readme/opts_block.erb.rb +30 -0
- data/examples/_src/readme/range.erb.rb +35 -0
- data/examples/_src/readme/registry.erb.rb +18 -0
- data/examples/_src/readme/required.erb.rb +35 -0
- data/examples/_src/readme/requireds.erb.rb +46 -0
- data/examples/_src/readme/requires.erb.rb +35 -0
- data/examples/_src/readme/runner.erb.rb +29 -0
- data/examples/_src/readme/runner_custom.erb.rb +25 -0
- data/examples/_src/readme/secret.erb.rb +22 -0
- data/examples/_src/readme/see.erb.rb +25 -0
- data/examples/_src/readme/type.erb.rb +21 -0
- data/examples/args/cast +98 -0
- data/examples/args/opts +98 -0
- data/examples/args/required +62 -0
- data/examples/args/splat +58 -0
- data/examples/gem +97 -0
- data/examples/heroku +48 -0
- data/examples/rakeish +50 -0
- data/examples/readme/abstract +28 -0
- data/examples/readme/alias +21 -0
- data/examples/readme/arg +20 -0
- data/examples/readme/arg_array +20 -0
- data/examples/readme/arg_type +22 -0
- data/examples/readme/args_splat +58 -0
- data/examples/readme/array +20 -0
- data/examples/readme/basic +67 -0
- data/examples/readme/default +20 -0
- data/examples/readme/deprecated +20 -0
- data/examples/readme/deprecated_alias +20 -0
- data/examples/readme/description +56 -0
- data/examples/readme/downcase +20 -0
- data/examples/readme/enum +33 -0
- data/examples/readme/example +21 -0
- data/examples/readme/format +33 -0
- data/examples/readme/internal +24 -0
- data/examples/readme/negate +44 -0
- data/examples/readme/note +21 -0
- data/examples/readme/opts +31 -0
- data/examples/readme/opts_block +29 -0
- data/examples/readme/range +33 -0
- data/examples/readme/registry +15 -0
- data/examples/readme/required +33 -0
- data/examples/readme/requireds +46 -0
- data/examples/readme/requires +33 -0
- data/examples/readme/runner +30 -0
- data/examples/readme/runner_custom +22 -0
- data/examples/readme/secret +21 -0
- data/examples/readme/see +21 -0
- data/examples/readme/type +20 -0
- data/lib/cl/arg.rb +79 -0
- data/lib/cl/args.rb +92 -0
- data/lib/cl/cast.rb +55 -0
- data/lib/cl/cmd.rb +74 -0
- data/lib/cl/config/env.rb +52 -0
- data/lib/cl/config/files.rb +34 -0
- data/lib/cl/config.rb +30 -0
- data/lib/cl/ctx.rb +36 -0
- data/lib/cl/dsl.rb +182 -0
- data/lib/cl/errors.rb +119 -0
- data/lib/cl/help/cmd.rb +118 -0
- data/lib/cl/help/cmds.rb +26 -0
- data/lib/cl/help/format.rb +69 -0
- data/lib/cl/help/table.rb +58 -0
- data/lib/cl/help/usage.rb +26 -0
- data/lib/cl/help.rb +37 -0
- data/lib/cl/helper/suggest.rb +10 -0
- data/lib/cl/helper.rb +47 -0
- data/lib/cl/opt.rb +276 -0
- data/lib/cl/opts/validate.rb +117 -0
- data/lib/cl/opts.rb +114 -0
- data/lib/cl/parser/format.rb +63 -0
- data/lib/cl/parser.rb +70 -0
- data/lib/cl/runner/default.rb +86 -0
- data/lib/cl/runner/multi.rb +34 -0
- data/lib/cl/runner.rb +10 -0
- data/lib/cl/ui.rb +146 -0
- data/lib/cl/version.rb +3 -0
- data/lib/cl.rb +62 -0
- metadata +177 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
class Cl
|
|
2
|
+
module Runner
|
|
3
|
+
class Multi
|
|
4
|
+
Runner.register :multi, self
|
|
5
|
+
|
|
6
|
+
attr_reader :ctx, :cmds
|
|
7
|
+
|
|
8
|
+
def initialize(ctx, *args)
|
|
9
|
+
@ctx = ctx
|
|
10
|
+
@cmds = build(group(args))
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def run
|
|
14
|
+
cmds.map(&:run)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
private
|
|
18
|
+
|
|
19
|
+
def group(args, cmds = [])
|
|
20
|
+
args.flatten.map(&:to_s).inject([[]]) do |cmds, arg|
|
|
21
|
+
cmd = Cmd.registered?(arg) ? Cmd[arg] : nil
|
|
22
|
+
cmd ? cmds << [cmd] : cmds.last << arg
|
|
23
|
+
cmds.reject(&:empty?)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def build(cmds)
|
|
28
|
+
cmds.map do |(cmd, *args)|
|
|
29
|
+
cmd.new(ctx, args)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
data/lib/cl/runner.rb
ADDED
data/lib/cl/ui.rb
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require 'stringio'
|
|
2
|
+
|
|
3
|
+
class Cl
|
|
4
|
+
module Ui
|
|
5
|
+
def self.new(ctx, opts)
|
|
6
|
+
const = Test if ctx.test?
|
|
7
|
+
const ||= Silent if opts[:silent]
|
|
8
|
+
const ||= Tty # if $stdout.tty?
|
|
9
|
+
# const ||= Pipe
|
|
10
|
+
const.new(opts)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class Base < Struct.new(:opts)
|
|
14
|
+
attr_writer :stdout
|
|
15
|
+
|
|
16
|
+
def stdout
|
|
17
|
+
@stdout ||= opts[:stdout] || $stdout
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def puts(*strs)
|
|
21
|
+
stdout.puts(*strs)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def abort(error, *strs)
|
|
25
|
+
self.error [error.message, *strs].join("\n\n")
|
|
26
|
+
exit 1
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class Silent < Base
|
|
31
|
+
%i(announce info notice warn error success cmd).each do |name|
|
|
32
|
+
define_method (name) { |*| }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class Test < Base
|
|
37
|
+
%i(announce info notice warn error success cmd).each do |name|
|
|
38
|
+
define_method (name) do |*args|
|
|
39
|
+
puts ["[#{name}]", *args.map(&:inspect)].join(' ')
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def stdout
|
|
44
|
+
@stdout ||= StringIO.new
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def abort(error, *strs)
|
|
48
|
+
raise error
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class Pipe < Base
|
|
53
|
+
%i(announce info notice warn error).each do |name|
|
|
54
|
+
define_method (name) do |msg, args = nil, _ = nil|
|
|
55
|
+
puts format_msg(msg, args)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
%i(success cmd).each do |name|
|
|
60
|
+
define_method (name) { |*| }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
private
|
|
64
|
+
|
|
65
|
+
def format_msg(msg, args)
|
|
66
|
+
msg = [msg, args].flatten.map(&:to_s)
|
|
67
|
+
msg = msg.map { |str| quote_spaced(str) }
|
|
68
|
+
msg.join(' ').strip
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def quote_spaced(str)
|
|
72
|
+
str.include?(' ') ? %("#{str}") : str
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
module Colors
|
|
77
|
+
COLORS = {
|
|
78
|
+
red: "\e[31m",
|
|
79
|
+
green: "\e[32m",
|
|
80
|
+
yellow: "\e[33m",
|
|
81
|
+
blue: "\e[34m",
|
|
82
|
+
gray: "\e[37m",
|
|
83
|
+
reset: "\e[0m"
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
def colored(color, str)
|
|
87
|
+
[COLORS[color], str, COLORS[:reset]].join
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class Tty < Base
|
|
92
|
+
include Colors
|
|
93
|
+
|
|
94
|
+
def announce(msg, args = [], msgs = [])
|
|
95
|
+
msg = format_msg(msg, args, msgs)
|
|
96
|
+
puts colored(:green, with_spacing(msg, true))
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def info(msg, args = [], msgs = [])
|
|
100
|
+
msg = format_msg(msg, args, msgs)
|
|
101
|
+
puts colored(:blue, with_spacing(msg, true))
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def notice(msg, args = [], msgs = [])
|
|
105
|
+
msg = format_msg(msg, args, msgs)
|
|
106
|
+
puts colored(:gray, with_spacing(msg, false))
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def warn(msg, args = [], msgs = [])
|
|
110
|
+
msg = format_msg(msg, args, msgs)
|
|
111
|
+
puts colored(:yellow, with_spacing(msg, false))
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def error(msg, args = [], msgs = [])
|
|
115
|
+
msg = format_msg(msg, args, msgs)
|
|
116
|
+
puts colored(:red, with_spacing(msg, true))
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def success(msg)
|
|
120
|
+
announce(msg)
|
|
121
|
+
puts
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def cmd(msg)
|
|
125
|
+
notice("$ #{msg}")
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
private
|
|
129
|
+
|
|
130
|
+
def colored(color, str)
|
|
131
|
+
opts[:color] ? super : str
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def format_msg(msg, args, msgs)
|
|
135
|
+
msg = msgs[msg] % args if msg.is_a?(Symbol)
|
|
136
|
+
msg.strip
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def with_spacing(str, space)
|
|
140
|
+
str = "\n#{str}" if space && !@last
|
|
141
|
+
@last = space
|
|
142
|
+
str
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
data/lib/cl/version.rb
ADDED
data/lib/cl.rb
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require 'cl/cmd'
|
|
2
|
+
require 'cl/help'
|
|
3
|
+
require 'cl/runner'
|
|
4
|
+
require 'cl/errors'
|
|
5
|
+
|
|
6
|
+
class Cl
|
|
7
|
+
singleton_class.send(:attr_accessor, :flag_values) # remove unless Dpl needs this
|
|
8
|
+
|
|
9
|
+
attr_reader :ctx, :name, :opts
|
|
10
|
+
|
|
11
|
+
# @overload initialize(ctx, name, opts)
|
|
12
|
+
# @param ctx [Cl::Ctx] the current execution context (optional)
|
|
13
|
+
# @param name [String] the program (executable) name (optional, defaults to the last segment of $0)
|
|
14
|
+
# @param opts [Hash] options (optional)
|
|
15
|
+
# @option opts [Cl::Runner] :runner registry key for a runner (optional, defaults to :default)
|
|
16
|
+
# @option opts [Cl::Ui] :ui the ui for handling user interaction
|
|
17
|
+
def initialize(*args)
|
|
18
|
+
ctx = args.shift if args.first.is_a?(Ctx)
|
|
19
|
+
@opts = args.last.is_a?(Hash) ? args.pop : {}
|
|
20
|
+
@name = args.shift || $0.split('/').last
|
|
21
|
+
@ctx = ctx || Ctx.new(name, opts)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Runs the command.
|
|
25
|
+
#
|
|
26
|
+
# Instantiates a runner with the given arguments, and runs it.
|
|
27
|
+
#
|
|
28
|
+
# If the command fails (raises a Cl::Error) then the exception is caught, and
|
|
29
|
+
# the process aborted with the error message and help output for the given
|
|
30
|
+
# command.
|
|
31
|
+
#
|
|
32
|
+
# @param args [Array<String>] arguments (usually ARGV)
|
|
33
|
+
def run(args)
|
|
34
|
+
runner(args).run
|
|
35
|
+
rescue UnknownCmd => e
|
|
36
|
+
ctx.abort e
|
|
37
|
+
rescue Error => e
|
|
38
|
+
ctx.abort e, help(args.first)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# Returns a runner instance for the given arguments.
|
|
42
|
+
def runner(args)
|
|
43
|
+
runner = :default if args.first.to_s == 'help'
|
|
44
|
+
runner ||= opts[:runner] || :default
|
|
45
|
+
Runner[runner].new(ctx, args)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Returns help output for the given command
|
|
49
|
+
def help(*args)
|
|
50
|
+
runner(['help', *args]).cmd.help
|
|
51
|
+
rescue StandardError
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
# Tainting is being used for identifying values on options that have
|
|
57
|
+
# been declared as secret. Ruby taints incoming arguments, so we want to
|
|
58
|
+
# untaint them here.
|
|
59
|
+
def untaint(args)
|
|
60
|
+
args.map(&:dup)
|
|
61
|
+
end
|
|
62
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: travis-cl
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.2.4
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- Sven Fuchs
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: bin
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2024-04-25 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: regstry
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - "~>"
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '1.0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - "~>"
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '1.0'
|
|
27
|
+
description: |-
|
|
28
|
+
OptionParser based CLI support for rapid CLI development in an object-oriented
|
|
29
|
+
context.
|
|
30
|
+
|
|
31
|
+
This library wraps Ruby's OptionParser for parsing your options under the hood,
|
|
32
|
+
so you get all the goodness that the Ruby standard library provides.
|
|
33
|
+
|
|
34
|
+
On top of that it adds a rich and powerful DSL for defining, validating, and
|
|
35
|
+
normalizing options, as well as automatic and gorgeous help output (modeled
|
|
36
|
+
after `gem --help`).
|
|
37
|
+
email:
|
|
38
|
+
executables: []
|
|
39
|
+
extensions: []
|
|
40
|
+
extra_rdoc_files: []
|
|
41
|
+
files:
|
|
42
|
+
- CHANGELOG.md
|
|
43
|
+
- Gemfile
|
|
44
|
+
- Gemfile.lock
|
|
45
|
+
- MIT_LICENSE.md
|
|
46
|
+
- README.md
|
|
47
|
+
- cl.gemspec
|
|
48
|
+
- examples/README.md
|
|
49
|
+
- examples/_src/args/cast.erb.rb
|
|
50
|
+
- examples/_src/args/opts.erb.rb
|
|
51
|
+
- examples/_src/args/required.erb.rb
|
|
52
|
+
- examples/_src/args/splat.erb.rb
|
|
53
|
+
- examples/_src/gem.erb.rb
|
|
54
|
+
- examples/_src/heroku.erb.rb
|
|
55
|
+
- examples/_src/rakeish.erb.rb
|
|
56
|
+
- examples/_src/readme/abstract.erb.rb
|
|
57
|
+
- examples/_src/readme/alias.erb.rb
|
|
58
|
+
- examples/_src/readme/arg.erb.rb
|
|
59
|
+
- examples/_src/readme/arg_array.erb.rb
|
|
60
|
+
- examples/_src/readme/arg_type.erb.rb
|
|
61
|
+
- examples/_src/readme/args_splat.erb.rb
|
|
62
|
+
- examples/_src/readme/array.erb.rb
|
|
63
|
+
- examples/_src/readme/basic.erb.rb
|
|
64
|
+
- examples/_src/readme/default.erb.rb
|
|
65
|
+
- examples/_src/readme/deprecated.erb.rb
|
|
66
|
+
- examples/_src/readme/deprecated_alias.erb.rb
|
|
67
|
+
- examples/_src/readme/description.erb.rb
|
|
68
|
+
- examples/_src/readme/downcase.erb.rb
|
|
69
|
+
- examples/_src/readme/enum.erb.rb
|
|
70
|
+
- examples/_src/readme/example.erb.rb
|
|
71
|
+
- examples/_src/readme/format.erb.rb
|
|
72
|
+
- examples/_src/readme/internal.erb.rb
|
|
73
|
+
- examples/_src/readme/negate.erb.rb
|
|
74
|
+
- examples/_src/readme/note.erb.rb
|
|
75
|
+
- examples/_src/readme/opts.erb.rb
|
|
76
|
+
- examples/_src/readme/opts_block.erb.rb
|
|
77
|
+
- examples/_src/readme/range.erb.rb
|
|
78
|
+
- examples/_src/readme/registry.erb.rb
|
|
79
|
+
- examples/_src/readme/required.erb.rb
|
|
80
|
+
- examples/_src/readme/requireds.erb.rb
|
|
81
|
+
- examples/_src/readme/requires.erb.rb
|
|
82
|
+
- examples/_src/readme/runner.erb.rb
|
|
83
|
+
- examples/_src/readme/runner_custom.erb.rb
|
|
84
|
+
- examples/_src/readme/secret.erb.rb
|
|
85
|
+
- examples/_src/readme/see.erb.rb
|
|
86
|
+
- examples/_src/readme/type.erb.rb
|
|
87
|
+
- examples/args/cast
|
|
88
|
+
- examples/args/opts
|
|
89
|
+
- examples/args/required
|
|
90
|
+
- examples/args/splat
|
|
91
|
+
- examples/gem
|
|
92
|
+
- examples/heroku
|
|
93
|
+
- examples/rakeish
|
|
94
|
+
- examples/readme/abstract
|
|
95
|
+
- examples/readme/alias
|
|
96
|
+
- examples/readme/arg
|
|
97
|
+
- examples/readme/arg_array
|
|
98
|
+
- examples/readme/arg_type
|
|
99
|
+
- examples/readme/args_splat
|
|
100
|
+
- examples/readme/array
|
|
101
|
+
- examples/readme/basic
|
|
102
|
+
- examples/readme/default
|
|
103
|
+
- examples/readme/deprecated
|
|
104
|
+
- examples/readme/deprecated_alias
|
|
105
|
+
- examples/readme/description
|
|
106
|
+
- examples/readme/downcase
|
|
107
|
+
- examples/readme/enum
|
|
108
|
+
- examples/readme/example
|
|
109
|
+
- examples/readme/format
|
|
110
|
+
- examples/readme/internal
|
|
111
|
+
- examples/readme/negate
|
|
112
|
+
- examples/readme/note
|
|
113
|
+
- examples/readme/opts
|
|
114
|
+
- examples/readme/opts_block
|
|
115
|
+
- examples/readme/range
|
|
116
|
+
- examples/readme/registry
|
|
117
|
+
- examples/readme/required
|
|
118
|
+
- examples/readme/requireds
|
|
119
|
+
- examples/readme/requires
|
|
120
|
+
- examples/readme/runner
|
|
121
|
+
- examples/readme/runner_custom
|
|
122
|
+
- examples/readme/secret
|
|
123
|
+
- examples/readme/see
|
|
124
|
+
- examples/readme/type
|
|
125
|
+
- lib/cl.rb
|
|
126
|
+
- lib/cl/arg.rb
|
|
127
|
+
- lib/cl/args.rb
|
|
128
|
+
- lib/cl/cast.rb
|
|
129
|
+
- lib/cl/cmd.rb
|
|
130
|
+
- lib/cl/config.rb
|
|
131
|
+
- lib/cl/config/env.rb
|
|
132
|
+
- lib/cl/config/files.rb
|
|
133
|
+
- lib/cl/ctx.rb
|
|
134
|
+
- lib/cl/dsl.rb
|
|
135
|
+
- lib/cl/errors.rb
|
|
136
|
+
- lib/cl/help.rb
|
|
137
|
+
- lib/cl/help/cmd.rb
|
|
138
|
+
- lib/cl/help/cmds.rb
|
|
139
|
+
- lib/cl/help/format.rb
|
|
140
|
+
- lib/cl/help/table.rb
|
|
141
|
+
- lib/cl/help/usage.rb
|
|
142
|
+
- lib/cl/helper.rb
|
|
143
|
+
- lib/cl/helper/suggest.rb
|
|
144
|
+
- lib/cl/opt.rb
|
|
145
|
+
- lib/cl/opts.rb
|
|
146
|
+
- lib/cl/opts/validate.rb
|
|
147
|
+
- lib/cl/parser.rb
|
|
148
|
+
- lib/cl/parser/format.rb
|
|
149
|
+
- lib/cl/runner.rb
|
|
150
|
+
- lib/cl/runner/default.rb
|
|
151
|
+
- lib/cl/runner/multi.rb
|
|
152
|
+
- lib/cl/ui.rb
|
|
153
|
+
- lib/cl/version.rb
|
|
154
|
+
homepage: https://github.com/svenfuchs/cl
|
|
155
|
+
licenses:
|
|
156
|
+
- MIT
|
|
157
|
+
metadata: {}
|
|
158
|
+
post_install_message:
|
|
159
|
+
rdoc_options: []
|
|
160
|
+
require_paths:
|
|
161
|
+
- lib
|
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - ">="
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0'
|
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
|
+
requirements:
|
|
169
|
+
- - ">="
|
|
170
|
+
- !ruby/object:Gem::Version
|
|
171
|
+
version: '0'
|
|
172
|
+
requirements: []
|
|
173
|
+
rubygems_version: 3.4.21
|
|
174
|
+
signing_key:
|
|
175
|
+
specification_version: 4
|
|
176
|
+
summary: Object-oriented OptionParser based CLI support
|
|
177
|
+
test_files: []
|