command_kit 0.1.0 → 0.3.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 +18 -3
- data/.rubocop.yml +141 -0
- data/ChangeLog.md +165 -0
- data/Gemfile +3 -0
- data/README.md +186 -118
- data/Rakefile +3 -2
- data/command_kit.gemspec +4 -4
- data/examples/command.rb +1 -1
- data/gemspec.yml +7 -0
- data/lib/command_kit/arguments/argument.rb +2 -2
- data/lib/command_kit/arguments.rb +36 -7
- data/lib/command_kit/colors.rb +702 -53
- data/lib/command_kit/command.rb +2 -3
- data/lib/command_kit/commands/auto_load.rb +8 -1
- data/lib/command_kit/commands/help.rb +3 -2
- data/lib/command_kit/commands/subcommand.rb +1 -1
- data/lib/command_kit/commands.rb +24 -9
- data/lib/command_kit/env/path.rb +1 -1
- data/lib/command_kit/file_utils.rb +46 -0
- data/lib/command_kit/help/man.rb +17 -33
- data/lib/command_kit/inflector.rb +47 -17
- data/lib/command_kit/interactive.rb +9 -0
- data/lib/command_kit/main.rb +7 -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 +41 -27
- data/lib/command_kit/options/option_value.rb +3 -2
- data/lib/command_kit/options/parser.rb +17 -22
- data/lib/command_kit/options.rb +102 -14
- data/lib/command_kit/os/linux.rb +157 -0
- data/lib/command_kit/os.rb +159 -11
- data/lib/command_kit/package_manager.rb +200 -0
- data/lib/command_kit/pager.rb +46 -4
- data/lib/command_kit/printing/indent.rb +4 -4
- data/lib/command_kit/printing.rb +14 -3
- data/lib/command_kit/program_name.rb +9 -0
- data/lib/command_kit/sudo.rb +40 -0
- data/lib/command_kit/terminal.rb +5 -0
- data/lib/command_kit/version.rb +1 -1
- data/spec/arguments/argument_spec.rb +1 -1
- data/spec/arguments_spec.rb +84 -1
- data/spec/colors_spec.rb +357 -70
- data/spec/command_spec.rb +77 -6
- data/spec/commands/auto_load_spec.rb +33 -2
- data/spec/commands_spec.rb +101 -29
- data/spec/env/path_spec.rb +6 -0
- data/spec/exception_handler_spec.rb +1 -1
- data/spec/file_utils_spec.rb +59 -0
- data/spec/fixtures/template.erb +5 -0
- data/spec/help/man_spec.rb +54 -57
- data/spec/inflector_spec.rb +70 -8
- data/spec/man_spec.rb +46 -0
- data/spec/open_app_spec.rb +85 -0
- data/spec/options/option_spec.rb +38 -2
- data/spec/options/option_value_spec.rb +55 -0
- data/spec/options/parser_spec.rb +0 -10
- data/spec/options_spec.rb +328 -0
- data/spec/os/linux_spec.rb +164 -0
- data/spec/os_spec.rb +200 -13
- data/spec/package_manager_spec.rb +806 -0
- data/spec/pager_spec.rb +71 -6
- data/spec/printing/indent_spec.rb +7 -5
- data/spec/printing_spec.rb +23 -1
- data/spec/program_name_spec.rb +8 -0
- data/spec/sudo_spec.rb +51 -0
- data/spec/terminal_spec.rb +30 -0
- data/spec/usage_spec.rb +1 -1
- metadata +23 -4
data/spec/colors_spec.rb
CHANGED
@@ -65,6 +65,106 @@ describe CommandKit::Colors do
|
|
65
65
|
it { expect(subject::WHITE).to eq("\e[37m") }
|
66
66
|
end
|
67
67
|
|
68
|
+
describe "BRIGHT_BLACK" do
|
69
|
+
it { expect(subject::BRIGHT_BLACK).to eq("\e[90m") }
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "BRIGHT_RED" do
|
73
|
+
it { expect(subject::BRIGHT_RED).to eq("\e[91m") }
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "BRIGHT_GREEN" do
|
77
|
+
it { expect(subject::BRIGHT_GREEN).to eq("\e[92m") }
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "BRIGHT_YELLOW" do
|
81
|
+
it { expect(subject::BRIGHT_YELLOW).to eq("\e[93m") }
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "BRIGHT_BLUE" do
|
85
|
+
it { expect(subject::BRIGHT_BLUE).to eq("\e[94m") }
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "BRIGHT_MAGENTA" do
|
89
|
+
it { expect(subject::BRIGHT_MAGENTA).to eq("\e[95m") }
|
90
|
+
end
|
91
|
+
|
92
|
+
describe "BRIGHT_CYAN" do
|
93
|
+
it { expect(subject::BRIGHT_CYAN).to eq("\e[96m") }
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "BRIGHT_WHITE" do
|
97
|
+
it { expect(subject::BRIGHT_WHITE).to eq("\e[97m") }
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "ON_BLACK" do
|
101
|
+
it { expect(subject::ON_BLACK).to eq("\e[40m") }
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "ON_RED" do
|
105
|
+
it { expect(subject::ON_RED).to eq("\e[41m") }
|
106
|
+
end
|
107
|
+
|
108
|
+
describe "ON_GREEN" do
|
109
|
+
it { expect(subject::ON_GREEN).to eq("\e[42m") }
|
110
|
+
end
|
111
|
+
|
112
|
+
describe "ON_YELLOW" do
|
113
|
+
it { expect(subject::ON_YELLOW).to eq("\e[43m") }
|
114
|
+
end
|
115
|
+
|
116
|
+
describe "ON_BLUE" do
|
117
|
+
it { expect(subject::ON_BLUE).to eq("\e[44m") }
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "ON_MAGENTA" do
|
121
|
+
it { expect(subject::ON_MAGENTA).to eq("\e[45m") }
|
122
|
+
end
|
123
|
+
|
124
|
+
describe "ON_CYAN" do
|
125
|
+
it { expect(subject::ON_CYAN).to eq("\e[46m") }
|
126
|
+
end
|
127
|
+
|
128
|
+
describe "ON_WHITE" do
|
129
|
+
it { expect(subject::ON_WHITE).to eq("\e[47m") }
|
130
|
+
end
|
131
|
+
|
132
|
+
describe "ON_BRIGHT_BLACK" do
|
133
|
+
it { expect(subject::ON_BRIGHT_BLACK).to eq("\e[100m") }
|
134
|
+
end
|
135
|
+
|
136
|
+
describe "ON_BRIGHT_RED" do
|
137
|
+
it { expect(subject::ON_BRIGHT_RED).to eq("\e[101m") }
|
138
|
+
end
|
139
|
+
|
140
|
+
describe "ON_BRIGHT_GREEN" do
|
141
|
+
it { expect(subject::ON_BRIGHT_GREEN).to eq("\e[102m") }
|
142
|
+
end
|
143
|
+
|
144
|
+
describe "ON_BRIGHT_YELLOW" do
|
145
|
+
it { expect(subject::ON_BRIGHT_YELLOW).to eq("\e[103m") }
|
146
|
+
end
|
147
|
+
|
148
|
+
describe "ON_BRIGHT_BLUE" do
|
149
|
+
it { expect(subject::ON_BRIGHT_BLUE).to eq("\e[104m") }
|
150
|
+
end
|
151
|
+
|
152
|
+
describe "ON_BRIGHT_MAGENTA" do
|
153
|
+
it { expect(subject::ON_BRIGHT_MAGENTA).to eq("\e[105m") }
|
154
|
+
end
|
155
|
+
|
156
|
+
describe "ON_BRIGHT_CYAN" do
|
157
|
+
it { expect(subject::ON_BRIGHT_CYAN).to eq("\e[106m") }
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "ON_BRIGHT_WHITE" do
|
161
|
+
it { expect(subject::ON_BRIGHT_WHITE).to eq("\e[107m") }
|
162
|
+
end
|
163
|
+
|
164
|
+
describe "RESET_FG" do
|
165
|
+
it { expect(subject::RESET_FG).to eq("\e[39m") }
|
166
|
+
end
|
167
|
+
|
68
168
|
describe "RESET_COLOR" do
|
69
169
|
it { expect(subject::RESET_COLOR).to eq("\e[39m") }
|
70
170
|
end
|
@@ -186,178 +286,365 @@ describe CommandKit::Colors do
|
|
186
286
|
it { expect(subject.white).to eq("\e[37m") }
|
187
287
|
end
|
188
288
|
end
|
189
|
-
end
|
190
289
|
|
191
|
-
|
192
|
-
|
290
|
+
describe ".bright_black" do
|
291
|
+
context "when given a string" do
|
292
|
+
it "must wrap the string with \\e[90m and \\e[39m" do
|
293
|
+
expect(subject.bright_black(str)).to eq("\e[90m#{str}\e[39m")
|
294
|
+
end
|
295
|
+
end
|
193
296
|
|
194
|
-
|
297
|
+
context "when given no arguments" do
|
298
|
+
it { expect(subject.bright_black).to eq("\e[90m") }
|
299
|
+
end
|
300
|
+
end
|
195
301
|
|
196
|
-
describe "
|
197
|
-
|
302
|
+
describe ".gray" do
|
303
|
+
context "when given a string" do
|
304
|
+
it "must wrap the string with \\e[90m and \\e[39m" do
|
305
|
+
expect(subject.gray(str)).to eq("\e[90m#{str}\e[39m")
|
306
|
+
end
|
307
|
+
end
|
308
|
+
|
309
|
+
context "when given no arguments" do
|
310
|
+
it { expect(subject.gray).to eq("\e[90m") }
|
311
|
+
end
|
198
312
|
end
|
199
313
|
|
200
|
-
describe "
|
201
|
-
|
314
|
+
describe ".bright_red" do
|
315
|
+
context "when given a string" do
|
316
|
+
it "must wrap the string with \\e[91m and \\e[39m" do
|
317
|
+
expect(subject.bright_red(str)).to eq("\e[91m#{str}\e[39m")
|
318
|
+
end
|
319
|
+
end
|
320
|
+
|
321
|
+
context "when given no arguments" do
|
322
|
+
it { expect(subject.bright_red).to eq("\e[91m") }
|
323
|
+
end
|
202
324
|
end
|
203
325
|
|
204
|
-
describe "
|
205
|
-
|
326
|
+
describe ".bright_green" do
|
327
|
+
context "when given a string" do
|
328
|
+
it "must wrap the string with \\e[92m and \\e[39m" do
|
329
|
+
expect(subject.bright_green(str)).to eq("\e[92m#{str}\e[39m")
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
333
|
+
context "when given no arguments" do
|
334
|
+
it { expect(subject.bright_green).to eq("\e[92m") }
|
335
|
+
end
|
206
336
|
end
|
207
337
|
|
208
|
-
describe "
|
209
|
-
|
338
|
+
describe ".bright_yellow" do
|
339
|
+
context "when given a string" do
|
340
|
+
it "must wrap the string with \\e[93m and \\e[39m" do
|
341
|
+
expect(subject.bright_yellow(str)).to eq("\e[93m#{str}\e[39m")
|
342
|
+
end
|
343
|
+
end
|
344
|
+
|
345
|
+
context "when given no arguments" do
|
346
|
+
it { expect(subject.bright_yellow).to eq("\e[93m") }
|
347
|
+
end
|
210
348
|
end
|
211
349
|
|
212
|
-
describe "
|
213
|
-
|
350
|
+
describe ".bright_blue" do
|
351
|
+
context "when given a string" do
|
352
|
+
it "must wrap the string with \\e[94m and \\e[39m" do
|
353
|
+
expect(subject.bright_blue(str)).to eq("\e[94m#{str}\e[39m")
|
354
|
+
end
|
355
|
+
end
|
356
|
+
|
357
|
+
context "when given no arguments" do
|
358
|
+
it { expect(subject.bright_blue).to eq("\e[94m") }
|
359
|
+
end
|
214
360
|
end
|
215
361
|
|
216
|
-
describe "
|
217
|
-
|
362
|
+
describe ".bright_magenta" do
|
363
|
+
context "when given a string" do
|
364
|
+
it "must wrap the string with \\e[95m and \\e[39m" do
|
365
|
+
expect(subject.bright_magenta(str)).to eq("\e[95m#{str}\e[39m")
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
context "when given no arguments" do
|
370
|
+
it { expect(subject.bright_magenta).to eq("\e[95m") }
|
371
|
+
end
|
218
372
|
end
|
219
373
|
|
220
|
-
describe "
|
221
|
-
|
374
|
+
describe ".bright_cyan" do
|
375
|
+
context "when given a string" do
|
376
|
+
it "must wrap the string with \\e[96m and \\e[39m" do
|
377
|
+
expect(subject.bright_cyan(str)).to eq("\e[96m#{str}\e[39m")
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
context "when given no arguments" do
|
382
|
+
it { expect(subject.bright_cyan).to eq("\e[96m") }
|
383
|
+
end
|
222
384
|
end
|
223
385
|
|
224
|
-
describe "
|
225
|
-
|
386
|
+
describe ".bright_white" do
|
387
|
+
context "when given a string" do
|
388
|
+
it "must wrap the string with \\e[97m and \\e[39m" do
|
389
|
+
expect(subject.bright_white(str)).to eq("\e[97m#{str}\e[39m")
|
390
|
+
end
|
391
|
+
end
|
392
|
+
|
393
|
+
context "when given no arguments" do
|
394
|
+
it { expect(subject.bright_white).to eq("\e[97m") }
|
395
|
+
end
|
226
396
|
end
|
227
397
|
|
228
|
-
describe "
|
229
|
-
|
398
|
+
describe ".on_black" do
|
399
|
+
context "when given a string" do
|
400
|
+
it "must wrap the string with \\e[40m and \\e[39m" do
|
401
|
+
expect(subject.on_black(str)).to eq("\e[40m#{str}\e[49m")
|
402
|
+
end
|
403
|
+
end
|
404
|
+
|
405
|
+
context "when given no arguments" do
|
406
|
+
it { expect(subject.on_black).to eq("\e[40m") }
|
407
|
+
end
|
230
408
|
end
|
231
409
|
|
232
|
-
describe "
|
233
|
-
|
410
|
+
describe ".on_red" do
|
411
|
+
context "when given a string" do
|
412
|
+
it "must wrap the string with \\e[41m and \\e[39m" do
|
413
|
+
expect(subject.on_red(str)).to eq("\e[41m#{str}\e[49m")
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
417
|
+
context "when given no arguments" do
|
418
|
+
it { expect(subject.on_red).to eq("\e[41m") }
|
419
|
+
end
|
234
420
|
end
|
235
421
|
|
236
|
-
describe "
|
237
|
-
|
422
|
+
describe ".on_green" do
|
423
|
+
context "when given a string" do
|
424
|
+
it "must wrap the string with \\e[42m and \\e[39m" do
|
425
|
+
expect(subject.on_green(str)).to eq("\e[42m#{str}\e[49m")
|
426
|
+
end
|
427
|
+
end
|
428
|
+
|
429
|
+
context "when given no arguments" do
|
430
|
+
it { expect(subject.on_green).to eq("\e[42m") }
|
431
|
+
end
|
238
432
|
end
|
239
433
|
|
240
|
-
describe "
|
241
|
-
|
434
|
+
describe ".on_yellow" do
|
435
|
+
context "when given a string" do
|
436
|
+
it "must wrap the string with \\e[43m and \\e[39m" do
|
437
|
+
expect(subject.on_yellow(str)).to eq("\e[43m#{str}\e[49m")
|
438
|
+
end
|
439
|
+
end
|
440
|
+
|
441
|
+
context "when given no arguments" do
|
442
|
+
it { expect(subject.on_yellow).to eq("\e[43m") }
|
443
|
+
end
|
242
444
|
end
|
243
445
|
|
244
|
-
describe "
|
245
|
-
|
446
|
+
describe ".on_blue" do
|
447
|
+
context "when given a string" do
|
448
|
+
it "must wrap the string with \\e[44m and \\e[39m" do
|
449
|
+
expect(subject.on_blue(str)).to eq("\e[44m#{str}\e[49m")
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
context "when given no arguments" do
|
454
|
+
it { expect(subject.on_blue).to eq("\e[44m") }
|
455
|
+
end
|
246
456
|
end
|
247
457
|
|
248
|
-
describe ".
|
249
|
-
|
458
|
+
describe ".on_magenta" do
|
459
|
+
context "when given a string" do
|
460
|
+
it "must wrap the string with \\e[45m and \\e[39m" do
|
461
|
+
expect(subject.on_magenta(str)).to eq("\e[45m#{str}\e[49m")
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
465
|
+
context "when given no arguments" do
|
466
|
+
it { expect(subject.on_magenta).to eq("\e[45m") }
|
467
|
+
end
|
250
468
|
end
|
251
469
|
|
252
|
-
describe ".
|
253
|
-
|
470
|
+
describe ".on_cyan" do
|
471
|
+
context "when given a string" do
|
472
|
+
it "must wrap the string with \\e[46m and \\e[39m" do
|
473
|
+
expect(subject.on_cyan(str)).to eq("\e[46m#{str}\e[49m")
|
474
|
+
end
|
475
|
+
end
|
476
|
+
|
477
|
+
context "when given no arguments" do
|
478
|
+
it { expect(subject.on_cyan).to eq("\e[46m") }
|
479
|
+
end
|
254
480
|
end
|
255
481
|
|
256
|
-
describe ".
|
482
|
+
describe ".on_white" do
|
257
483
|
context "when given a string" do
|
258
|
-
it "must
|
259
|
-
expect(subject.
|
484
|
+
it "must wrap the string with \\e[47m and \\e[39m" do
|
485
|
+
expect(subject.on_white(str)).to eq("\e[47m#{str}\e[49m")
|
260
486
|
end
|
261
487
|
end
|
262
488
|
|
263
489
|
context "when given no arguments" do
|
264
|
-
it { expect(subject.
|
490
|
+
it { expect(subject.on_white).to eq("\e[47m") }
|
265
491
|
end
|
266
492
|
end
|
267
493
|
|
268
|
-
describe ".
|
494
|
+
describe ".on_bright_black" do
|
269
495
|
context "when given a string" do
|
270
|
-
it "must
|
271
|
-
expect(subject.
|
496
|
+
it "must wrap the string with \\e[100m and \\e[39m" do
|
497
|
+
expect(subject.on_bright_black(str)).to eq("\e[100m#{str}\e[49m")
|
272
498
|
end
|
273
499
|
end
|
274
500
|
|
275
501
|
context "when given no arguments" do
|
276
|
-
it { expect(subject.
|
502
|
+
it { expect(subject.on_bright_black).to eq("\e[100m") }
|
277
503
|
end
|
278
504
|
end
|
279
505
|
|
280
|
-
describe ".
|
506
|
+
describe ".on_gray" do
|
281
507
|
context "when given a string" do
|
282
|
-
it "must
|
283
|
-
expect(subject.
|
508
|
+
it "must wrap the string with \\e[100m and \\e[39m" do
|
509
|
+
expect(subject.on_gray(str)).to eq("\e[100m#{str}\e[49m")
|
284
510
|
end
|
285
511
|
end
|
286
512
|
|
287
513
|
context "when given no arguments" do
|
288
|
-
it { expect(subject.
|
514
|
+
it { expect(subject.on_gray).to eq("\e[100m") }
|
289
515
|
end
|
290
516
|
end
|
291
517
|
|
292
|
-
describe ".
|
518
|
+
describe ".on_bright_red" do
|
293
519
|
context "when given a string" do
|
294
|
-
it "must
|
295
|
-
expect(subject.
|
520
|
+
it "must wrap the string with \\e[101m and \\e[39m" do
|
521
|
+
expect(subject.on_bright_red(str)).to eq("\e[101m#{str}\e[49m")
|
296
522
|
end
|
297
523
|
end
|
298
524
|
|
299
525
|
context "when given no arguments" do
|
300
|
-
it { expect(subject.
|
526
|
+
it { expect(subject.on_bright_red).to eq("\e[101m") }
|
301
527
|
end
|
302
528
|
end
|
303
529
|
|
304
|
-
describe ".
|
530
|
+
describe ".on_bright_green" do
|
305
531
|
context "when given a string" do
|
306
|
-
it "must
|
307
|
-
expect(subject.
|
532
|
+
it "must wrap the string with \\e[102m and \\e[39m" do
|
533
|
+
expect(subject.on_bright_green(str)).to eq("\e[102m#{str}\e[49m")
|
308
534
|
end
|
309
535
|
end
|
310
536
|
|
311
537
|
context "when given no arguments" do
|
312
|
-
it { expect(subject.
|
538
|
+
it { expect(subject.on_bright_green).to eq("\e[102m") }
|
313
539
|
end
|
314
540
|
end
|
315
541
|
|
316
|
-
describe ".
|
542
|
+
describe ".on_bright_yellow" do
|
317
543
|
context "when given a string" do
|
318
|
-
it "must
|
319
|
-
expect(subject.
|
544
|
+
it "must wrap the string with \\e[103m and \\e[39m" do
|
545
|
+
expect(subject.on_bright_yellow(str)).to eq("\e[103m#{str}\e[49m")
|
320
546
|
end
|
321
547
|
end
|
322
548
|
|
323
549
|
context "when given no arguments" do
|
324
|
-
it { expect(subject.
|
550
|
+
it { expect(subject.on_bright_yellow).to eq("\e[103m") }
|
325
551
|
end
|
326
552
|
end
|
327
553
|
|
328
|
-
describe ".
|
554
|
+
describe ".on_bright_blue" do
|
329
555
|
context "when given a string" do
|
330
|
-
it "must
|
331
|
-
expect(subject.
|
556
|
+
it "must wrap the string with \\e[104m and \\e[39m" do
|
557
|
+
expect(subject.on_bright_blue(str)).to eq("\e[104m#{str}\e[49m")
|
332
558
|
end
|
333
559
|
end
|
334
560
|
|
335
561
|
context "when given no arguments" do
|
336
|
-
it { expect(subject.
|
562
|
+
it { expect(subject.on_bright_blue).to eq("\e[104m") }
|
337
563
|
end
|
338
564
|
end
|
339
565
|
|
340
|
-
describe ".
|
566
|
+
describe ".on_bright_magenta" do
|
341
567
|
context "when given a string" do
|
342
|
-
it "must
|
343
|
-
expect(subject.
|
568
|
+
it "must wrap the string with \\e[105m and \\e[39m" do
|
569
|
+
expect(subject.on_bright_magenta(str)).to eq("\e[105m#{str}\e[49m")
|
344
570
|
end
|
345
571
|
end
|
346
572
|
|
347
573
|
context "when given no arguments" do
|
348
|
-
it { expect(subject.
|
574
|
+
it { expect(subject.on_bright_magenta).to eq("\e[105m") }
|
349
575
|
end
|
350
576
|
end
|
351
577
|
|
352
|
-
describe ".
|
578
|
+
describe ".on_bright_cyan" do
|
579
|
+
context "when given a string" do
|
580
|
+
it "must wrap the string with \\e[106m and \\e[39m" do
|
581
|
+
expect(subject.on_bright_cyan(str)).to eq("\e[106m#{str}\e[49m")
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
context "when given no arguments" do
|
586
|
+
it { expect(subject.on_bright_cyan).to eq("\e[106m") }
|
587
|
+
end
|
588
|
+
end
|
589
|
+
|
590
|
+
describe ".on_bright_white" do
|
353
591
|
context "when given a string" do
|
354
|
-
it "must
|
355
|
-
expect(subject.
|
592
|
+
it "must wrap the string with \\e[107m and \\e[39m" do
|
593
|
+
expect(subject.on_bright_white(str)).to eq("\e[107m#{str}\e[49m")
|
356
594
|
end
|
357
595
|
end
|
358
596
|
|
359
597
|
context "when given no arguments" do
|
360
|
-
it { expect(subject.
|
598
|
+
it { expect(subject.on_bright_white).to eq("\e[107m") }
|
599
|
+
end
|
600
|
+
end
|
601
|
+
end
|
602
|
+
|
603
|
+
describe CommandKit::Colors::PlainText do
|
604
|
+
subject { described_class }
|
605
|
+
|
606
|
+
let(:str) { 'foo' }
|
607
|
+
|
608
|
+
[
|
609
|
+
:RESET, :CLEAR,
|
610
|
+
:BOLD, :RESET_INTENSITY,
|
611
|
+
:BLACK, :RED, :GREEN, :YELLOW, :BLUE, :MAGENTA, :CYAN, :WHITE,
|
612
|
+
:BRIGHT_BLACK, :BRIGHT_RED, :BRIGHT_GREEN, :BRIGHT_YELLOW, :BRIGHT_BLUE, :BRIGHT_MAGENTA, :BRIGHT_CYAN, :BRIGHT_WHITE,
|
613
|
+
:RESET_FG, :RESET_COLOR,
|
614
|
+
:ON_BLACK, :ON_RED, :ON_GREEN, :ON_YELLOW, :ON_BLUE, :ON_MAGENTA, :ON_CYAN, :ON_WHITE,
|
615
|
+
:ON_BRIGHT_BLACK, :ON_BRIGHT_RED, :ON_BRIGHT_GREEN, :ON_BRIGHT_YELLOW, :ON_BRIGHT_BLUE, :ON_BRIGHT_MAGENTA, :ON_BRIGHT_CYAN, :ON_BRIGHT_WHITE,
|
616
|
+
:RESET_BG
|
617
|
+
].each do |const_name|
|
618
|
+
describe const_name.to_s do
|
619
|
+
it { expect(subject.const_get(const_name)).to eq('') }
|
620
|
+
end
|
621
|
+
end
|
622
|
+
|
623
|
+
describe ".reset" do
|
624
|
+
it { expect(subject.reset).to eq('') }
|
625
|
+
end
|
626
|
+
|
627
|
+
describe ".clear" do
|
628
|
+
it { expect(subject.clear).to eq('') }
|
629
|
+
end
|
630
|
+
|
631
|
+
[
|
632
|
+
:bold,
|
633
|
+
:black, :red, :green, :yellow, :blue, :magenta, :cyan, :white,
|
634
|
+
:bright_black, :gray, :bright_red, :bright_green, :bright_yellow, :bright_blue, :bright_magenta, :bright_cyan, :bright_white,
|
635
|
+
:on_black, :on_red, :on_green, :on_yellow, :on_blue, :on_magenta, :on_cyan, :on_white,
|
636
|
+
:on_bright_black, :on_gray, :on_bright_red, :on_bright_green, :on_bright_yellow, :on_bright_blue, :on_bright_magenta, :on_bright_cyan, :on_bright_white
|
637
|
+
].each do |method_name|
|
638
|
+
describe ".#{method_name}" do
|
639
|
+
context "when given a string" do
|
640
|
+
it "must return that string" do
|
641
|
+
expect(subject.send(method_name,str)).to eq(str)
|
642
|
+
end
|
643
|
+
end
|
644
|
+
|
645
|
+
context "when given no arguments" do
|
646
|
+
it { expect(subject.send(method_name)).to eq('') }
|
647
|
+
end
|
361
648
|
end
|
362
649
|
end
|
363
650
|
end
|
data/spec/command_spec.rb
CHANGED
@@ -26,14 +26,14 @@ describe CommandKit::Command do
|
|
26
26
|
expect(described_class).to include(CommandKit::Usage)
|
27
27
|
end
|
28
28
|
|
29
|
-
it "must include CommandKit::Arguments" do
|
30
|
-
expect(described_class).to include(CommandKit::Arguments)
|
31
|
-
end
|
32
|
-
|
33
29
|
it "must include CommandKit::Options" do
|
34
30
|
expect(described_class).to include(CommandKit::Options)
|
35
31
|
end
|
36
32
|
|
33
|
+
it "must include CommandKit::Arguments" do
|
34
|
+
expect(described_class).to include(CommandKit::Arguments)
|
35
|
+
end
|
36
|
+
|
37
37
|
it "must include CommandKit::Examples" do
|
38
38
|
expect(described_class).to include(CommandKit::Examples)
|
39
39
|
end
|
@@ -46,7 +46,78 @@ describe CommandKit::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)
|
49
|
+
it "must include CommandKit::FileUtils" do
|
50
|
+
expect(described_class).to include(CommandKit::FileUtils)
|
51
|
+
end
|
52
|
+
|
53
|
+
module TestCommandClass
|
54
|
+
class TestCommand < CommandKit::Command
|
55
|
+
|
56
|
+
usage '[OPTIONS] ARG1 [ARG2]'
|
57
|
+
|
58
|
+
option :option1, short: '-a',
|
59
|
+
value: {
|
60
|
+
type: Integer,
|
61
|
+
default: 1
|
62
|
+
},
|
63
|
+
desc: "Option 1"
|
64
|
+
|
65
|
+
option :option2, short: '-b',
|
66
|
+
value: {
|
67
|
+
type: String,
|
68
|
+
usage: 'FILE'
|
69
|
+
},
|
70
|
+
desc: "Option 2"
|
71
|
+
|
72
|
+
argument :argument1, required: true,
|
73
|
+
usage: 'ARG1',
|
74
|
+
desc: "Argument 1"
|
75
|
+
|
76
|
+
argument :argument2, required: false,
|
77
|
+
usage: 'ARG2',
|
78
|
+
desc: "Argument 2"
|
79
|
+
|
80
|
+
examples [
|
81
|
+
'-a 42 foo/bar/baz',
|
82
|
+
'-a 42 -b bar.txt baz qux'
|
83
|
+
]
|
84
|
+
|
85
|
+
description 'Example command'
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
let(:command_class) { TestCommandClass::TestCommand }
|
91
|
+
subject { command_class.new }
|
92
|
+
|
93
|
+
describe "#help" do
|
94
|
+
let(:option1) { command_class.options[:option1] }
|
95
|
+
let(:option2) { command_class.options[:option2] }
|
96
|
+
let(:argument1) { command_class.arguments[:argument1] }
|
97
|
+
let(:argument2) { command_class.arguments[:argument2] }
|
98
|
+
|
99
|
+
it "must print the usage, options, arguments, examples, and description" do
|
100
|
+
expect { subject.help }.to output(
|
101
|
+
[
|
102
|
+
"Usage: #{subject.usage}",
|
103
|
+
'',
|
104
|
+
'Options:',
|
105
|
+
" #{option1.usage.join(', ').ljust(33 - 1)} #{option1.desc}",
|
106
|
+
" #{option2.usage.join(', ').ljust(33 - 1)} #{option2.desc}",
|
107
|
+
' -h, --help Print help information',
|
108
|
+
'',
|
109
|
+
"Arguments:",
|
110
|
+
" #{argument1.usage.ljust(33)}#{argument1.desc}",
|
111
|
+
" #{argument2.usage.ljust(33)}#{argument2.desc}",
|
112
|
+
'',
|
113
|
+
"Examples:",
|
114
|
+
" #{subject.command_name} #{command_class.examples[0]}",
|
115
|
+
" #{subject.command_name} #{command_class.examples[1]}",
|
116
|
+
'',
|
117
|
+
command_class.description,
|
118
|
+
''
|
119
|
+
].join($/)
|
120
|
+
).to_stdout
|
121
|
+
end
|
51
122
|
end
|
52
123
|
end
|