command_kit 0.1.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|