command_kit 0.1.0.rc1 → 0.1.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/ChangeLog.md +1 -1
- data/README.md +7 -4
- data/gemspec.yml +1 -1
- data/lib/command_kit.rb +1 -0
- data/lib/command_kit/arguments.rb +16 -1
- data/lib/command_kit/arguments/argument.rb +2 -0
- data/lib/command_kit/arguments/argument_value.rb +2 -0
- data/lib/command_kit/colors.rb +32 -0
- data/lib/command_kit/command.rb +5 -0
- data/lib/command_kit/command_name.rb +9 -0
- data/lib/command_kit/commands.rb +30 -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 +12 -0
- data/lib/command_kit/description.rb +12 -1
- data/lib/command_kit/env.rb +4 -0
- data/lib/command_kit/env/home.rb +9 -0
- data/lib/command_kit/env/path.rb +15 -0
- data/lib/command_kit/examples.rb +12 -1
- data/lib/command_kit/exception_handler.rb +4 -0
- data/lib/command_kit/help.rb +7 -1
- data/lib/command_kit/help/man.rb +13 -0
- data/lib/command_kit/inflector.rb +2 -0
- data/lib/command_kit/interactive.rb +62 -1
- data/lib/command_kit/main.rb +11 -0
- data/lib/command_kit/options.rb +12 -0
- data/lib/command_kit/options/option.rb +2 -0
- data/lib/command_kit/options/option_value.rb +2 -0
- data/lib/command_kit/options/parser.rb +29 -0
- 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/os.rb +6 -0
- data/lib/command_kit/pager.rb +27 -0
- data/lib/command_kit/printing.rb +23 -0
- data/lib/command_kit/printing/indent.rb +23 -0
- data/lib/command_kit/program_name.rb +7 -0
- data/lib/command_kit/stdio.rb +24 -0
- data/lib/command_kit/terminal.rb +12 -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/spec/arguments/argument_spec.rb +1 -1
- data/spec/arguments_spec.rb +3 -27
- data/spec/colors_spec.rb +21 -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 +1 -1
- 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/help/man_spec.rb +1 -1
- data/spec/help_spec.rb +0 -25
- data/spec/inflector_spec.rb +1 -1
- data/spec/main_spec.rb +7 -7
- data/spec/options/option_spec.rb +3 -3
- data/spec/options/option_value_spec.rb +1 -1
- data/spec/options_spec.rb +1 -1
- data/spec/os_spec.rb +1 -1
- data/spec/pager_spec.rb +1 -1
- 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/terminal_spec.rb +1 -1
- data/spec/usage_spec.rb +1 -1
- data/spec/xdg_spec.rb +1 -1
- metadata +3 -3
data/lib/command_kit/stdio.rb
CHANGED
@@ -34,6 +34,8 @@ module CommandKit
|
|
34
34
|
# @param [IO] stderr
|
35
35
|
# The stderr error output stream. Defaults to `$stderr`.
|
36
36
|
#
|
37
|
+
# @api public
|
38
|
+
#
|
37
39
|
def initialize(stdin: nil, stdout: nil, stderr: nil, **kwargs)
|
38
40
|
@stdin = stdin
|
39
41
|
@stdout = stdout
|
@@ -48,6 +50,8 @@ module CommandKit
|
|
48
50
|
# @return [$stdin, IO]
|
49
51
|
# The initialized `@stdin` value or `$stdin`.
|
50
52
|
#
|
53
|
+
# @api public
|
54
|
+
#
|
51
55
|
def stdin
|
52
56
|
@stdin || $stdin
|
53
57
|
end
|
@@ -58,6 +62,8 @@ module CommandKit
|
|
58
62
|
# @return [$stdout, IO]
|
59
63
|
# The initialized `@stdout` value or `$stdout`.
|
60
64
|
#
|
65
|
+
# @api public
|
66
|
+
#
|
61
67
|
def stdout
|
62
68
|
@stdout || $stdout
|
63
69
|
end
|
@@ -68,6 +74,8 @@ module CommandKit
|
|
68
74
|
# @return [$stderr, IO]
|
69
75
|
# The initialized `@stderr` value or `$stderr`.
|
70
76
|
#
|
77
|
+
# @api public
|
78
|
+
#
|
71
79
|
def stderr
|
72
80
|
@stderr || $stderr
|
73
81
|
end
|
@@ -75,6 +83,8 @@ module CommandKit
|
|
75
83
|
#
|
76
84
|
# Calls `stdin.gets`.
|
77
85
|
#
|
86
|
+
# @api public
|
87
|
+
#
|
78
88
|
def gets(*arguments)
|
79
89
|
stdin.gets(*arguments)
|
80
90
|
end
|
@@ -82,6 +92,8 @@ module CommandKit
|
|
82
92
|
#
|
83
93
|
# Calls `stdin.readline`.
|
84
94
|
#
|
95
|
+
# @api public
|
96
|
+
#
|
85
97
|
def readline(*arguments)
|
86
98
|
stdin.readline(*arguments)
|
87
99
|
end
|
@@ -89,6 +101,8 @@ module CommandKit
|
|
89
101
|
#
|
90
102
|
# Calls `stdin.readlines`.
|
91
103
|
#
|
104
|
+
# @api public
|
105
|
+
#
|
92
106
|
def readlines(*arguments)
|
93
107
|
stdin.readlines(*arguments)
|
94
108
|
end
|
@@ -99,6 +113,8 @@ module CommandKit
|
|
99
113
|
#
|
100
114
|
# Calls `stdout.putc`.
|
101
115
|
#
|
116
|
+
# @api public
|
117
|
+
#
|
102
118
|
def putc(*arguments)
|
103
119
|
stdout.putc(*arguments)
|
104
120
|
end
|
@@ -106,6 +122,8 @@ module CommandKit
|
|
106
122
|
#
|
107
123
|
# Calls `stdout.puts`.
|
108
124
|
#
|
125
|
+
# @api public
|
126
|
+
#
|
109
127
|
def puts(*arguments)
|
110
128
|
stdout.puts(*arguments)
|
111
129
|
end
|
@@ -113,6 +131,8 @@ module CommandKit
|
|
113
131
|
#
|
114
132
|
# Calls `stdout.print`.
|
115
133
|
#
|
134
|
+
# @api public
|
135
|
+
#
|
116
136
|
def print(*arguments)
|
117
137
|
stdout.print(*arguments)
|
118
138
|
end
|
@@ -120,6 +140,8 @@ module CommandKit
|
|
120
140
|
#
|
121
141
|
# Calls `stdout.printf`.
|
122
142
|
#
|
143
|
+
# @api public
|
144
|
+
#
|
123
145
|
def printf(*arguments)
|
124
146
|
stdout.printf(*arguments)
|
125
147
|
end
|
@@ -130,6 +152,8 @@ module CommandKit
|
|
130
152
|
# @param [String, nil] message
|
131
153
|
# The optional abort message.
|
132
154
|
#
|
155
|
+
# @api public
|
156
|
+
#
|
133
157
|
def abort(message=nil)
|
134
158
|
stderr.puts(message) if message
|
135
159
|
exit(1)
|
data/lib/command_kit/terminal.rb
CHANGED
@@ -41,6 +41,8 @@ module CommandKit
|
|
41
41
|
# If the `$COLUMNS` env variable is set, and is non-zero, it will be
|
42
42
|
# returned by {#terminal_width}.
|
43
43
|
#
|
44
|
+
# @api public
|
45
|
+
#
|
44
46
|
def initialize(**kwargs)
|
45
47
|
super(**kwargs)
|
46
48
|
|
@@ -63,6 +65,8 @@ module CommandKit
|
|
63
65
|
# @return [Boolean]
|
64
66
|
# Specifies whether {Stdio#stdout stdout} is connected to a terminal.
|
65
67
|
#
|
68
|
+
# @api public
|
69
|
+
#
|
66
70
|
def terminal?
|
67
71
|
IO.respond_to?(:console) && stdout.tty?
|
68
72
|
end
|
@@ -81,6 +85,8 @@ module CommandKit
|
|
81
85
|
#
|
82
86
|
# @see https://rubydoc.info/gems/io-console/IO
|
83
87
|
#
|
88
|
+
# @api semipublic
|
89
|
+
#
|
84
90
|
def terminal
|
85
91
|
IO.console if terminal?
|
86
92
|
end
|
@@ -95,6 +101,8 @@ module CommandKit
|
|
95
101
|
# terminal_height
|
96
102
|
# # => 22
|
97
103
|
#
|
104
|
+
# @api public
|
105
|
+
#
|
98
106
|
def terminal_height
|
99
107
|
if (terminal = self.terminal)
|
100
108
|
terminal.winsize[0]
|
@@ -113,6 +121,8 @@ module CommandKit
|
|
113
121
|
# terminal_width
|
114
122
|
# # => 91
|
115
123
|
#
|
124
|
+
# @api public
|
125
|
+
#
|
116
126
|
def terminal_width
|
117
127
|
if (terminal = self.terminal)
|
118
128
|
terminal.winsize[1]
|
@@ -131,6 +141,8 @@ module CommandKit
|
|
131
141
|
# terminal_size
|
132
142
|
# # => [23, 91]
|
133
143
|
#
|
144
|
+
# @api public
|
145
|
+
#
|
134
146
|
def terminal_size
|
135
147
|
if (terminal = self.terminal)
|
136
148
|
terminal.winsize
|
data/lib/command_kit/usage.rb
CHANGED
@@ -15,6 +15,9 @@ module CommandKit
|
|
15
15
|
include CommandName
|
16
16
|
include Help
|
17
17
|
|
18
|
+
#
|
19
|
+
# @api private
|
20
|
+
#
|
18
21
|
module ModuleMethods
|
19
22
|
#
|
20
23
|
# Extends {ClassMethods} or {ModuleMethods}, depending on whether {Usage}
|
@@ -50,6 +53,11 @@ module CommandKit
|
|
50
53
|
# @return [String, Array<String>]
|
51
54
|
# The class'es or superclass'es usage string(s).
|
52
55
|
#
|
56
|
+
# @example
|
57
|
+
# usage "[options] ARG1 ARG2 [ARG3 ...]"
|
58
|
+
#
|
59
|
+
# @api public
|
60
|
+
#
|
53
61
|
def usage(new_usage=nil)
|
54
62
|
if new_usage
|
55
63
|
@usage = new_usage
|
@@ -65,6 +73,8 @@ module CommandKit
|
|
65
73
|
#
|
66
74
|
# @return [Array<String>, String, nil]
|
67
75
|
#
|
76
|
+
# @api public
|
77
|
+
#
|
68
78
|
def usage
|
69
79
|
case (usage = self.class.usage)
|
70
80
|
when Array
|
@@ -77,6 +87,8 @@ module CommandKit
|
|
77
87
|
#
|
78
88
|
# Prints the `usage: ...` output.
|
79
89
|
#
|
90
|
+
# @api semipublic
|
91
|
+
#
|
80
92
|
def help_usage
|
81
93
|
case (usage = self.usage)
|
82
94
|
when Array
|
@@ -95,6 +107,8 @@ module CommandKit
|
|
95
107
|
#
|
96
108
|
# @see #help_usage
|
97
109
|
#
|
110
|
+
# @api public
|
111
|
+
#
|
98
112
|
def help
|
99
113
|
help_usage
|
100
114
|
end
|
data/lib/command_kit/version.rb
CHANGED
data/lib/command_kit/xdg.rb
CHANGED
@@ -24,6 +24,9 @@ module CommandKit
|
|
24
24
|
include CommandName
|
25
25
|
include Env::Home
|
26
26
|
|
27
|
+
#
|
28
|
+
# @api private
|
29
|
+
#
|
27
30
|
module ModuleMethods
|
28
31
|
#
|
29
32
|
# Extends {ClassMethods} or {ModuleMethods}, depending on whether {XDG} is
|
@@ -61,6 +64,8 @@ module CommandKit
|
|
61
64
|
# {CommandName::ClassMethods#command_name} if no {#xdg_namespace} has
|
62
65
|
# been defined.
|
63
66
|
#
|
67
|
+
# @api public
|
68
|
+
#
|
64
69
|
def xdg_namespace(new_namespace=nil)
|
65
70
|
if new_namespace
|
66
71
|
@xdg_namespace = new_namespace.to_s
|
@@ -77,16 +82,22 @@ module CommandKit
|
|
77
82
|
# The `~/.config/<xdg_namespace>` directory.
|
78
83
|
#
|
79
84
|
# @return [String]
|
85
|
+
#
|
86
|
+
# @api public
|
80
87
|
attr_reader :config_dir
|
81
88
|
|
82
89
|
# The `~/.local/share/<xdg_namespace>` directory.
|
83
90
|
#
|
84
91
|
# @return [String]
|
92
|
+
#
|
93
|
+
# @api public
|
85
94
|
attr_reader :local_share_dir
|
86
95
|
|
87
96
|
# The `~/.cache/<xdg_namespace>` directory.
|
88
97
|
#
|
89
98
|
# @return [String]
|
99
|
+
#
|
100
|
+
# @api public
|
90
101
|
attr_reader :cache_dir
|
91
102
|
|
92
103
|
#
|
@@ -138,6 +149,8 @@ module CommandKit
|
|
138
149
|
#
|
139
150
|
# @see ClassMethods#xdg_namespace
|
140
151
|
#
|
152
|
+
# @api semipublic
|
153
|
+
#
|
141
154
|
def xdg_namespace
|
142
155
|
self.class.xdg_namespace
|
143
156
|
end
|
data/spec/arguments_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'command_kit/arguments'
|
3
3
|
|
4
|
-
describe Arguments do
|
4
|
+
describe CommandKit::Arguments do
|
5
5
|
module TestArguments
|
6
6
|
class ImplicitCmd
|
7
7
|
include CommandKit::Arguments
|
@@ -13,8 +13,8 @@ describe Arguments do
|
|
13
13
|
describe ".included" do
|
14
14
|
subject { command_class }
|
15
15
|
|
16
|
-
it { expect(subject).to include(Main) }
|
17
|
-
it { expect(subject).to include(Help) }
|
16
|
+
it { expect(subject).to include(CommandKit::Main) }
|
17
|
+
it { expect(subject).to include(CommandKit::Help) }
|
18
18
|
end
|
19
19
|
|
20
20
|
describe ".arguments" do
|
@@ -192,29 +192,5 @@ describe Arguments do
|
|
192
192
|
|
193
193
|
subject.help
|
194
194
|
end
|
195
|
-
|
196
|
-
context "when the superclass defines it's own #help method" do
|
197
|
-
module TestDescription
|
198
|
-
class SuperclassHelpMethod
|
199
|
-
def help
|
200
|
-
puts 'superclass'
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
class InheritedHelpMethod < SuperclassHelpMethod
|
205
|
-
include CommandKit::Arguments
|
206
|
-
end
|
207
|
-
end
|
208
|
-
|
209
|
-
let(:super_command_class) { TestDescription::SuperclassHelpMethod }
|
210
|
-
let(:command_class) { TestDescription::InheritedHelpMethod }
|
211
|
-
|
212
|
-
it "must call the superclass'es #help method first" do
|
213
|
-
expect_any_instance_of(super_command_class).to receive(:help)
|
214
|
-
expect(subject).to receive(:help_arguments)
|
215
|
-
|
216
|
-
subject.help
|
217
|
-
end
|
218
|
-
end
|
219
195
|
end
|
220
196
|
end
|
data/spec/colors_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'command_kit/colors'
|
3
3
|
|
4
|
-
describe Colors do
|
4
|
+
describe CommandKit::Colors do
|
5
5
|
module TestColors
|
6
6
|
class TestCommand
|
7
7
|
include CommandKit::Colors
|
@@ -11,10 +11,10 @@ describe Colors do
|
|
11
11
|
let(:command_class) { TestColors::TestCommand }
|
12
12
|
subject { command_class.new }
|
13
13
|
|
14
|
-
it { expect(described_class).to include(Stdio) }
|
15
|
-
it { expect(described_class).to include(Env) }
|
14
|
+
it { expect(described_class).to include(CommandKit::Stdio) }
|
15
|
+
it { expect(described_class).to include(CommandKit::Env) }
|
16
16
|
|
17
|
-
describe Colors::ANSI do
|
17
|
+
describe CommandKit::Colors::ANSI do
|
18
18
|
subject { described_class }
|
19
19
|
|
20
20
|
describe "RESET" do
|
@@ -188,7 +188,7 @@ describe Colors do
|
|
188
188
|
end
|
189
189
|
end
|
190
190
|
|
191
|
-
describe Colors::PlainText do
|
191
|
+
describe CommandKit::Colors::PlainText do
|
192
192
|
subject { described_class }
|
193
193
|
|
194
194
|
let(:str) { 'foo' }
|
@@ -409,13 +409,15 @@ describe Colors do
|
|
409
409
|
|
410
410
|
before { allow(stdout).to receive(:tty?).and_return(true) }
|
411
411
|
|
412
|
-
it
|
412
|
+
it do
|
413
|
+
expect(subject.colors).to be(described_class::ANSI)
|
414
|
+
end
|
413
415
|
|
414
416
|
context "when a block is given" do
|
415
417
|
it do
|
416
418
|
expect { |b|
|
417
419
|
subject.colors(&b)
|
418
|
-
}.to yield_with_args(
|
420
|
+
}.to yield_with_args(described_class::ANSI)
|
419
421
|
end
|
420
422
|
end
|
421
423
|
end
|
@@ -424,13 +426,15 @@ describe Colors do
|
|
424
426
|
let(:stdout) { StringIO.new }
|
425
427
|
subject { command_class.new(stdout: stdout) }
|
426
428
|
|
427
|
-
it
|
429
|
+
it do
|
430
|
+
expect(subject.colors).to be(described_class::PlainText)
|
431
|
+
end
|
428
432
|
|
429
433
|
context "when a block is given" do
|
430
434
|
it do
|
431
435
|
expect { |b|
|
432
436
|
subject.colors(&b)
|
433
|
-
}.to yield_with_args(
|
437
|
+
}.to yield_with_args(described_class::PlainText)
|
434
438
|
end
|
435
439
|
end
|
436
440
|
end
|
@@ -441,13 +445,15 @@ describe Colors do
|
|
441
445
|
|
442
446
|
before { allow(stream).to receive(:tty?).and_return(true) }
|
443
447
|
|
444
|
-
it
|
448
|
+
it do
|
449
|
+
expect(subject.colors(stream)).to be(described_class::ANSI)
|
450
|
+
end
|
445
451
|
|
446
452
|
context "when a block is given" do
|
447
453
|
it do
|
448
454
|
expect { |b|
|
449
455
|
subject.colors(stream,&b)
|
450
|
-
}.to yield_with_args(
|
456
|
+
}.to yield_with_args(described_class::ANSI)
|
451
457
|
end
|
452
458
|
end
|
453
459
|
end
|
@@ -455,13 +461,15 @@ describe Colors do
|
|
455
461
|
context "but the alternate stream does not support ANSI" do
|
456
462
|
let(:stream) { StringIO.new }
|
457
463
|
|
458
|
-
it
|
464
|
+
it do
|
465
|
+
expect(subject.colors(stream)).to be(described_class::PlainText)
|
466
|
+
end
|
459
467
|
|
460
468
|
context "when a block is given" do
|
461
469
|
it do
|
462
470
|
expect { |b|
|
463
471
|
subject.colors(stream,&b)
|
464
|
-
}.to yield_with_args(
|
472
|
+
}.to yield_with_args(described_class::PlainText)
|
465
473
|
end
|
466
474
|
end
|
467
475
|
end
|
data/spec/command_name_spec.rb
CHANGED
data/spec/command_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'command_kit/command'
|
3
3
|
|
4
|
-
describe Command do
|
4
|
+
describe CommandKit::Command do
|
5
5
|
it "must include CommandKit::Main" do
|
6
6
|
expect(described_class).to include(CommandKit::Main)
|
7
7
|
end
|
@@ -46,4 +46,7 @@ describe Command do
|
|
46
46
|
expect(described_class).to include(CommandKit::ExceptionHandler)
|
47
47
|
end
|
48
48
|
|
49
|
+
it "must include FileUtils" do
|
50
|
+
expect(described_class).to include(FileUtils)
|
51
|
+
end
|
49
52
|
end
|