command_kit 0.1.0.pre2 → 0.2.1
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 +141 -0
- data/ChangeLog.md +98 -2
- data/Gemfile +3 -0
- data/README.md +189 -117
- data/Rakefile +3 -2
- data/command_kit.gemspec +4 -4
- data/examples/command.rb +1 -1
- data/gemspec.yml +10 -2
- data/lib/command_kit/arguments/argument.rb +2 -0
- data/lib/command_kit/arguments/argument_value.rb +2 -0
- data/lib/command_kit/arguments.rb +23 -4
- data/lib/command_kit/colors.rb +253 -45
- data/lib/command_kit/command.rb +6 -1
- data/lib/command_kit/command_name.rb +9 -0
- data/lib/command_kit/commands/auto_load.rb +24 -1
- 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 +5 -2
- data/lib/command_kit/commands/parent_command.rb +7 -0
- data/lib/command_kit/commands/subcommand.rb +13 -1
- data/lib/command_kit/commands.rb +54 -9
- data/lib/command_kit/description.rb +12 -1
- data/lib/command_kit/env/home.rb +9 -0
- data/lib/command_kit/env/path.rb +16 -1
- data/lib/command_kit/env.rb +4 -0
- data/lib/command_kit/examples.rb +12 -1
- data/lib/command_kit/exception_handler.rb +4 -0
- data/lib/command_kit/help/man.rb +26 -30
- data/lib/command_kit/help.rb +7 -1
- data/lib/command_kit/inflector.rb +49 -17
- data/lib/command_kit/interactive.rb +248 -0
- data/lib/command_kit/main.rb +18 -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 +3 -6
- data/lib/command_kit/options/option_value.rb +5 -2
- data/lib/command_kit/options/parser.rb +46 -19
- 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 +32 -7
- 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 +80 -11
- data/lib/command_kit/printing/indent.rb +27 -4
- data/lib/command_kit/printing.rb +35 -1
- 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 +13 -0
- data/lib/command_kit.rb +1 -0
- data/spec/arguments/argument_spec.rb +2 -2
- data/spec/arguments_spec.rb +53 -27
- data/spec/colors_spec.rb +277 -13
- data/spec/command_name_spec.rb +1 -1
- data/spec/command_spec.rb +79 -5
- data/spec/commands/auto_load/subcommand_spec.rb +1 -1
- data/spec/commands/auto_load_spec.rb +34 -3
- 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 +103 -29
- data/spec/description_spec.rb +1 -25
- data/spec/env/home_spec.rb +1 -1
- data/spec/env/path_spec.rb +7 -1
- data/spec/examples_spec.rb +1 -25
- data/spec/exception_handler_spec.rb +1 -1
- data/spec/help/man_spec.rb +45 -58
- 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 +5 -5
- data/spec/options/option_value_spec.rb +56 -1
- data/spec/options_spec.rb +283 -1
- data/spec/os/linux_spec.rb +164 -0
- data/spec/os_spec.rb +201 -14
- data/spec/package_manager_spec.rb +806 -0
- data/spec/pager_spec.rb +76 -11
- data/spec/printing/indent_spec.rb +8 -6
- data/spec/printing_spec.rb +33 -3
- 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 +26 -8
- data/lib/command_kit/console.rb +0 -141
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/command.rb
CHANGED
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
|
+
rubygems_mfa_required: 'true'
|
10
18
|
|
11
19
|
required_ruby_version: ">= 2.7.0"
|
12
20
|
|
@@ -1,6 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'command_kit/arguments/argument'
|
4
|
+
require 'command_kit/usage'
|
1
5
|
require 'command_kit/main'
|
2
6
|
require 'command_kit/help'
|
3
|
-
require 'command_kit/
|
7
|
+
require 'command_kit/printing'
|
4
8
|
|
5
9
|
module CommandKit
|
6
10
|
#
|
@@ -43,9 +47,14 @@ module CommandKit
|
|
43
47
|
# end
|
44
48
|
#
|
45
49
|
module Arguments
|
50
|
+
include Usage
|
46
51
|
include Main
|
47
52
|
include Help
|
53
|
+
include Printing
|
48
54
|
|
55
|
+
#
|
56
|
+
# @api private
|
57
|
+
#
|
49
58
|
module ModuleMethods
|
50
59
|
#
|
51
60
|
# Extends {ClassMethods} or {ModuleMethods}, depending on whether
|
@@ -77,6 +86,8 @@ module CommandKit
|
|
77
86
|
# @return [Hash{Symbol => Argument}]
|
78
87
|
# The defined argument for the class and it's superclass.
|
79
88
|
#
|
89
|
+
# @api semipublic
|
90
|
+
#
|
80
91
|
def arguments
|
81
92
|
@arguments ||= if superclass.kind_of?(ClassMethods)
|
82
93
|
superclass.arguments.dup
|
@@ -131,6 +142,8 @@ module CommandKit
|
|
131
142
|
# argument :bar, repeats: true,
|
132
143
|
# desc: "Bar argument"
|
133
144
|
#
|
145
|
+
# @api public
|
146
|
+
#
|
134
147
|
def argument(name,**kwargs)
|
135
148
|
arguments[name] = Argument.new(name,**kwargs)
|
136
149
|
end
|
@@ -147,6 +160,8 @@ module CommandKit
|
|
147
160
|
# The exit status code. If too few or too many arguments are given, then
|
148
161
|
# an error message is printed and `1` is returned.
|
149
162
|
#
|
163
|
+
# @api public
|
164
|
+
#
|
150
165
|
def main(argv=[])
|
151
166
|
required_args = self.class.arguments.each_value.count(&:required?)
|
152
167
|
optional_args = self.class.arguments.each_value.count(&:optional?)
|
@@ -157,7 +172,7 @@ module CommandKit
|
|
157
172
|
help_usage
|
158
173
|
return 1
|
159
174
|
elsif argv.length > (required_args + optional_args) && !has_repeats_arg
|
160
|
-
print_error("too many arguments given")
|
175
|
+
print_error("too many arguments given.")
|
161
176
|
help_usage
|
162
177
|
return 1
|
163
178
|
end
|
@@ -168,12 +183,14 @@ module CommandKit
|
|
168
183
|
#
|
169
184
|
# Prints any defined arguments, along with the usual `--help` information.
|
170
185
|
#
|
186
|
+
# @api semipublic
|
187
|
+
#
|
171
188
|
def help_arguments
|
172
189
|
unless (arguments = self.class.arguments).empty?
|
173
190
|
puts
|
174
191
|
puts 'Arguments:'
|
175
192
|
|
176
|
-
|
193
|
+
arguments.each_value do |arg|
|
177
194
|
puts " #{arg.usage.ljust(33)}#{arg.desc}"
|
178
195
|
end
|
179
196
|
end
|
@@ -183,8 +200,10 @@ module CommandKit
|
|
183
200
|
# Calls the superclass'es `#help` method, if it's defined, then calls
|
184
201
|
# {#help_arguments}.
|
185
202
|
#
|
203
|
+
# @api public
|
204
|
+
#
|
186
205
|
def help
|
187
|
-
super
|
206
|
+
super
|
188
207
|
|
189
208
|
help_arguments
|
190
209
|
end
|
data/lib/command_kit/colors.rb
CHANGED
@@ -26,7 +26,7 @@ module CommandKit
|
|
26
26
|
#
|
27
27
|
# ## Alternatives
|
28
28
|
#
|
29
|
-
# * [ansi](
|
29
|
+
# * [ansi](https://rubyworks.github.io/ansi/)
|
30
30
|
# * [colorize](https://github.com/fazibear/colorize#readme)
|
31
31
|
#
|
32
32
|
# @see https://en.wikipedia.org/wiki/ANSI_escape_code
|
@@ -67,7 +67,7 @@ module CommandKit
|
|
67
67
|
# ANSI color code for blue
|
68
68
|
BLUE = "\e[34m"
|
69
69
|
|
70
|
-
# ANSI color code for
|
70
|
+
# ANSI color code for magenta
|
71
71
|
MAGENTA = "\e[35m"
|
72
72
|
|
73
73
|
# ANSI color code for cyan
|
@@ -79,6 +79,51 @@ module CommandKit
|
|
79
79
|
# ANSI color for the default foreground color
|
80
80
|
RESET_COLOR = "\e[39m"
|
81
81
|
|
82
|
+
# ANSI color code for background color black
|
83
|
+
#
|
84
|
+
# @since 0.2.0
|
85
|
+
ON_BLACK = "\e[40m"
|
86
|
+
|
87
|
+
# ANSI color code for background color red
|
88
|
+
#
|
89
|
+
# @since 0.2.0
|
90
|
+
ON_RED = "\e[41m"
|
91
|
+
|
92
|
+
# ANSI color code for background color green
|
93
|
+
#
|
94
|
+
# @since 0.2.0
|
95
|
+
ON_GREEN = "\e[42m"
|
96
|
+
|
97
|
+
# ANSI color code for background color yellow
|
98
|
+
#
|
99
|
+
# @since 0.2.0
|
100
|
+
ON_YELLOW = "\e[43m"
|
101
|
+
|
102
|
+
# ANSI color code for background color blue
|
103
|
+
#
|
104
|
+
# @since 0.2.0
|
105
|
+
ON_BLUE = "\e[44m"
|
106
|
+
|
107
|
+
# ANSI color code for background color magenta
|
108
|
+
#
|
109
|
+
# @since 0.2.0
|
110
|
+
ON_MAGENTA = "\e[45m"
|
111
|
+
|
112
|
+
# ANSI color code for background color cyan
|
113
|
+
#
|
114
|
+
# @since 0.2.0
|
115
|
+
ON_CYAN = "\e[46m"
|
116
|
+
|
117
|
+
# ANSI color code for background color white
|
118
|
+
#
|
119
|
+
# @since 0.2.0
|
120
|
+
ON_WHITE = "\e[47m"
|
121
|
+
|
122
|
+
# ANSI color for the default background color
|
123
|
+
#
|
124
|
+
# @since 0.2.0
|
125
|
+
RESET_BG = "\e[49m"
|
126
|
+
|
82
127
|
module_function
|
83
128
|
|
84
129
|
#
|
@@ -88,6 +133,8 @@ module CommandKit
|
|
88
133
|
#
|
89
134
|
# @see RESET
|
90
135
|
#
|
136
|
+
# @api public
|
137
|
+
#
|
91
138
|
def reset
|
92
139
|
RESET
|
93
140
|
end
|
@@ -95,6 +142,8 @@ module CommandKit
|
|
95
142
|
#
|
96
143
|
# @see reset
|
97
144
|
#
|
145
|
+
# @api public
|
146
|
+
#
|
98
147
|
def clear
|
99
148
|
reset
|
100
149
|
end
|
@@ -110,6 +159,8 @@ module CommandKit
|
|
110
159
|
#
|
111
160
|
# @see BOLD
|
112
161
|
#
|
162
|
+
# @api public
|
163
|
+
#
|
113
164
|
def bold(string=nil)
|
114
165
|
if string then "#{BOLD}#{string}#{RESET_INTENSITY}"
|
115
166
|
else BOLD
|
@@ -127,6 +178,8 @@ module CommandKit
|
|
127
178
|
#
|
128
179
|
# @see BLACK
|
129
180
|
#
|
181
|
+
# @api public
|
182
|
+
#
|
130
183
|
def black(string=nil)
|
131
184
|
if string then "#{BLACK}#{string}#{RESET_COLOR}"
|
132
185
|
else BLACK
|
@@ -144,6 +197,8 @@ module CommandKit
|
|
144
197
|
#
|
145
198
|
# @see RED
|
146
199
|
#
|
200
|
+
# @api public
|
201
|
+
#
|
147
202
|
def red(string=nil)
|
148
203
|
if string then "#{RED}#{string}#{RESET_COLOR}"
|
149
204
|
else RED
|
@@ -161,6 +216,8 @@ module CommandKit
|
|
161
216
|
#
|
162
217
|
# @see GREEN
|
163
218
|
#
|
219
|
+
# @api public
|
220
|
+
#
|
164
221
|
def green(string=nil)
|
165
222
|
if string then "#{GREEN}#{string}#{RESET_COLOR}"
|
166
223
|
else GREEN
|
@@ -178,6 +235,8 @@ module CommandKit
|
|
178
235
|
#
|
179
236
|
# @see YELLOW
|
180
237
|
#
|
238
|
+
# @api public
|
239
|
+
#
|
181
240
|
def yellow(string=nil)
|
182
241
|
if string then "#{YELLOW}#{string}#{RESET_COLOR}"
|
183
242
|
else YELLOW
|
@@ -195,6 +254,8 @@ module CommandKit
|
|
195
254
|
#
|
196
255
|
# @see BLUE
|
197
256
|
#
|
257
|
+
# @api public
|
258
|
+
#
|
198
259
|
def blue(string=nil)
|
199
260
|
if string then "#{BLUE}#{string}#{RESET_COLOR}"
|
200
261
|
else BLUE
|
@@ -212,6 +273,8 @@ module CommandKit
|
|
212
273
|
#
|
213
274
|
# @see MAGENTA
|
214
275
|
#
|
276
|
+
# @api public
|
277
|
+
#
|
215
278
|
def magenta(string=nil)
|
216
279
|
if string then "#{MAGENTA}#{string}#{RESET_COLOR}"
|
217
280
|
else MAGENTA
|
@@ -229,6 +292,8 @@ module CommandKit
|
|
229
292
|
#
|
230
293
|
# @see CYAN
|
231
294
|
#
|
295
|
+
# @api public
|
296
|
+
#
|
232
297
|
def cyan(string=nil)
|
233
298
|
if string then "#{CYAN}#{string}#{RESET_COLOR}"
|
234
299
|
else CYAN
|
@@ -246,76 +311,209 @@ module CommandKit
|
|
246
311
|
#
|
247
312
|
# @see WHITE
|
248
313
|
#
|
314
|
+
# @api public
|
315
|
+
#
|
249
316
|
def white(string=nil)
|
250
317
|
if string then "#{WHITE}#{string}#{RESET_COLOR}"
|
251
318
|
else WHITE
|
252
319
|
end
|
253
320
|
end
|
254
|
-
end
|
255
321
|
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
322
|
+
#
|
323
|
+
# Sets the background color to black.
|
324
|
+
#
|
325
|
+
# @param [String, nil] string
|
326
|
+
# An optional string.
|
327
|
+
#
|
328
|
+
# @return [String, ON_BLACK]
|
329
|
+
# The colorized string or just {ON_BLACK} if no arguments were given.
|
330
|
+
#
|
331
|
+
# @see ON_BLACK
|
332
|
+
#
|
333
|
+
# @api public
|
334
|
+
#
|
335
|
+
# @since 0.2.0
|
336
|
+
#
|
337
|
+
def on_black(string=nil)
|
338
|
+
if string then "#{ON_BLACK}#{string}#{RESET_BG}"
|
339
|
+
else ON_BLACK
|
340
|
+
end
|
341
|
+
end
|
276
342
|
|
277
|
-
|
278
|
-
|
343
|
+
#
|
344
|
+
# Sets the background color to red.
|
345
|
+
#
|
346
|
+
# @param [String, nil] string
|
347
|
+
# An optional string.
|
348
|
+
#
|
349
|
+
# @return [String, ON_RED]
|
350
|
+
# The colorized string or just {ON_RED} if no arguments were given.
|
351
|
+
#
|
352
|
+
# @see ON_RED
|
353
|
+
#
|
354
|
+
# @api public
|
355
|
+
#
|
356
|
+
# @since 0.2.0
|
357
|
+
#
|
358
|
+
def on_red(string=nil)
|
359
|
+
if string then "#{ON_RED}#{string}#{RESET_BG}"
|
360
|
+
else ON_RED
|
361
|
+
end
|
279
362
|
end
|
280
363
|
|
281
|
-
|
282
|
-
|
364
|
+
#
|
365
|
+
# Sets the background color to green.
|
366
|
+
#
|
367
|
+
# @param [String, nil] string
|
368
|
+
# An optional string.
|
369
|
+
#
|
370
|
+
# @return [String, ON_GREEN]
|
371
|
+
# The colorized string or just {ON_GREEN} if no arguments were given.
|
372
|
+
#
|
373
|
+
# @see ON_GREEN
|
374
|
+
#
|
375
|
+
# @api public
|
376
|
+
#
|
377
|
+
# @since 0.2.0
|
378
|
+
#
|
379
|
+
def on_green(string=nil)
|
380
|
+
if string then "#{ON_GREEN}#{string}#{RESET_BG}"
|
381
|
+
else ON_GREEN
|
382
|
+
end
|
283
383
|
end
|
284
384
|
|
285
|
-
|
286
|
-
|
385
|
+
#
|
386
|
+
# Sets the background color to yellow.
|
387
|
+
#
|
388
|
+
# @param [String, nil] string
|
389
|
+
# An optional string.
|
390
|
+
#
|
391
|
+
# @return [String, ON_YELLOW]
|
392
|
+
# The colorized string or just {ON_YELLOW} if no arguments were given.
|
393
|
+
#
|
394
|
+
# @see ON_YELLOW
|
395
|
+
#
|
396
|
+
# @api public
|
397
|
+
#
|
398
|
+
# @since 0.2.0
|
399
|
+
#
|
400
|
+
def on_yellow(string=nil)
|
401
|
+
if string then "#{ON_YELLOW}#{string}#{RESET_BG}"
|
402
|
+
else ON_YELLOW
|
403
|
+
end
|
287
404
|
end
|
288
405
|
|
289
|
-
|
290
|
-
|
406
|
+
#
|
407
|
+
# Sets the background color to blue.
|
408
|
+
#
|
409
|
+
# @param [String, nil] string
|
410
|
+
# An optional string.
|
411
|
+
#
|
412
|
+
# @return [String, ON_BLUE]
|
413
|
+
# The colorized string or just {ON_BLUE} if no arguments were given.
|
414
|
+
#
|
415
|
+
# @see ON_BLUE
|
416
|
+
#
|
417
|
+
# @api public
|
418
|
+
#
|
419
|
+
# @since 0.2.0
|
420
|
+
#
|
421
|
+
def on_blue(string=nil)
|
422
|
+
if string then "#{ON_BLUE}#{string}#{RESET_BG}"
|
423
|
+
else ON_BLUE
|
424
|
+
end
|
291
425
|
end
|
292
426
|
|
293
|
-
|
294
|
-
|
427
|
+
#
|
428
|
+
# Sets the background color to magenta.
|
429
|
+
#
|
430
|
+
# @param [String, nil] string
|
431
|
+
# An optional string.
|
432
|
+
#
|
433
|
+
# @return [String, ON_MAGENTA]
|
434
|
+
# The colorized string or just {ON_MAGENTA} if no arguments were given.
|
435
|
+
#
|
436
|
+
# @see ON_MAGENTA
|
437
|
+
#
|
438
|
+
# @api public
|
439
|
+
#
|
440
|
+
# @since 0.2.0
|
441
|
+
#
|
442
|
+
def on_magenta(string=nil)
|
443
|
+
if string then "#{ON_MAGENTA}#{string}#{RESET_BG}"
|
444
|
+
else ON_MAGENTA
|
445
|
+
end
|
295
446
|
end
|
296
447
|
|
297
|
-
|
298
|
-
|
448
|
+
#
|
449
|
+
# Sets the background color to cyan.
|
450
|
+
#
|
451
|
+
# @param [String, nil] string
|
452
|
+
# An optional string.
|
453
|
+
#
|
454
|
+
# @return [String, ON_CYAN]
|
455
|
+
# The colorized string or just {ON_CYAN} if no arguments were given.
|
456
|
+
#
|
457
|
+
# @see ON_CYAN
|
458
|
+
#
|
459
|
+
# @api public
|
460
|
+
#
|
461
|
+
# @since 0.2.0
|
462
|
+
#
|
463
|
+
def on_cyan(string=nil)
|
464
|
+
if string then "#{ON_CYAN}#{string}#{RESET_BG}"
|
465
|
+
else ON_CYAN
|
466
|
+
end
|
299
467
|
end
|
300
468
|
|
301
|
-
|
302
|
-
|
469
|
+
#
|
470
|
+
# Sets the background color to white.
|
471
|
+
#
|
472
|
+
# @param [String, nil] string
|
473
|
+
# An optional string.
|
474
|
+
#
|
475
|
+
# @return [String, ON_WHITE]
|
476
|
+
# The colorized string or just {ON_WHITE} if no arguments were given.
|
477
|
+
#
|
478
|
+
# @see ON_WHITE
|
479
|
+
#
|
480
|
+
# @api public
|
481
|
+
#
|
482
|
+
# @since 0.2.0
|
483
|
+
#
|
484
|
+
def on_white(string=nil)
|
485
|
+
if string then "#{ON_WHITE}#{string}#{RESET_BG}"
|
486
|
+
else ON_WHITE
|
487
|
+
end
|
303
488
|
end
|
489
|
+
end
|
304
490
|
|
305
|
-
|
306
|
-
|
491
|
+
#
|
492
|
+
# Dummy module with the same interface as {ANSI}, but for when ANSI is not
|
493
|
+
# supported.
|
494
|
+
#
|
495
|
+
module PlainText
|
496
|
+
ANSI.constants(false).each do |name|
|
497
|
+
const_set(name,'')
|
307
498
|
end
|
308
499
|
|
309
|
-
|
310
|
-
|
500
|
+
module_function
|
501
|
+
|
502
|
+
def reset
|
503
|
+
RESET
|
311
504
|
end
|
312
505
|
|
313
|
-
def
|
314
|
-
|
506
|
+
def clear
|
507
|
+
reset
|
315
508
|
end
|
316
509
|
|
317
|
-
|
318
|
-
|
510
|
+
[
|
511
|
+
:bold, :black, :red, :green, :yellow, :blue, :magenta, :cyan, :white,
|
512
|
+
:on_black, :on_red, :on_green, :on_yellow, :on_blue, :on_magenta, :on_cyan, :on_white
|
513
|
+
].each do |name|
|
514
|
+
define_method(name) do |string=nil|
|
515
|
+
string || ''
|
516
|
+
end
|
319
517
|
end
|
320
518
|
end
|
321
519
|
|
@@ -331,6 +529,8 @@ module CommandKit
|
|
331
529
|
# output. Color output will also be disabled if the given stream is not
|
332
530
|
# a TTY.
|
333
531
|
#
|
532
|
+
# @api public
|
533
|
+
#
|
334
534
|
def ansi?(stream=stdout)
|
335
535
|
env['TERM'] != 'dumb' && stream.tty?
|
336
536
|
end
|
@@ -343,6 +543,14 @@ module CommandKit
|
|
343
543
|
# @return [ANSI, PlainText]
|
344
544
|
# The ANSI module or PlainText dummy module.
|
345
545
|
#
|
546
|
+
# @example
|
547
|
+
# puts colors.green("Hello world")
|
548
|
+
#
|
549
|
+
# @example Using colors with stderr output:
|
550
|
+
# stderr.puts colors(stderr).green("Hello world")
|
551
|
+
#
|
552
|
+
# @api public
|
553
|
+
#
|
346
554
|
def colors(stream=stdout)
|
347
555
|
color = if ansi?(stream) then ANSI
|
348
556
|
else PlainText
|
data/lib/command_kit/command.rb
CHANGED
@@ -9,6 +9,8 @@ require 'command_kit/examples'
|
|
9
9
|
require 'command_kit/description'
|
10
10
|
require 'command_kit/exception_handler'
|
11
11
|
|
12
|
+
require 'fileutils'
|
13
|
+
|
12
14
|
module CommandKit
|
13
15
|
#
|
14
16
|
# The command class base-class.
|
@@ -54,7 +56,7 @@ module CommandKit
|
|
54
56
|
# end
|
55
57
|
# end
|
56
58
|
#
|
57
|
-
# ### initialize and using
|
59
|
+
# ### initialize and using instance variables
|
58
60
|
#
|
59
61
|
# option :verbose, short: '-v', desc: "Increase verbose level" do
|
60
62
|
# @verbose += 1
|
@@ -66,6 +68,8 @@ module CommandKit
|
|
66
68
|
# @verbose = 0
|
67
69
|
# end
|
68
70
|
#
|
71
|
+
# @api public
|
72
|
+
#
|
69
73
|
class Command
|
70
74
|
|
71
75
|
include Main
|
@@ -79,6 +83,7 @@ module CommandKit
|
|
79
83
|
include Examples
|
80
84
|
include Description
|
81
85
|
include ExceptionHandler
|
86
|
+
include FileUtils
|
82
87
|
|
83
88
|
end
|
84
89
|
end
|
@@ -31,6 +31,9 @@ module CommandKit
|
|
31
31
|
# # => "foo-cmd"
|
32
32
|
#
|
33
33
|
module CommandName
|
34
|
+
#
|
35
|
+
# @api private
|
36
|
+
#
|
34
37
|
module ModuleMethods
|
35
38
|
#
|
36
39
|
# Extends {ClassMethods} or {ModuleMethods}, depending on whether
|
@@ -65,6 +68,8 @@ module CommandKit
|
|
65
68
|
#
|
66
69
|
# @return [String]
|
67
70
|
#
|
71
|
+
# @api public
|
72
|
+
#
|
68
73
|
def command_name(new_command_name=nil)
|
69
74
|
if new_command_name
|
70
75
|
@command_name = new_command_name.to_s
|
@@ -77,6 +82,8 @@ module CommandKit
|
|
77
82
|
# The commands name.
|
78
83
|
#
|
79
84
|
# @return [String]
|
85
|
+
#
|
86
|
+
# @api public
|
80
87
|
attr_reader :command_name
|
81
88
|
|
82
89
|
#
|
@@ -86,6 +93,8 @@ module CommandKit
|
|
86
93
|
# Overrides the command name. Defaults to
|
87
94
|
# {ClassMethods#command_name self.class.command_name}.
|
88
95
|
#
|
96
|
+
# @api public
|
97
|
+
#
|
89
98
|
def initialize(command_name: self.class.command_name, **kwargs)
|
90
99
|
@command_name = command_name
|
91
100
|
|