command_kit 0.2.2 → 0.4.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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +4 -5
  3. data/.rubocop.yml +14 -1
  4. data/ChangeLog.md +82 -0
  5. data/Gemfile +2 -0
  6. data/LICENSE.txt +1 -1
  7. data/README.md +18 -9
  8. data/command_kit.gemspec +0 -1
  9. data/examples/printing/tables.rb +141 -0
  10. data/gemspec.yml +3 -3
  11. data/lib/command_kit/arguments/argument.rb +2 -2
  12. data/lib/command_kit/arguments.rb +27 -2
  13. data/lib/command_kit/bug_report.rb +105 -0
  14. data/lib/command_kit/colors.rb +488 -15
  15. data/lib/command_kit/command.rb +1 -2
  16. data/lib/command_kit/edit.rb +54 -0
  17. data/lib/command_kit/env.rb +1 -1
  18. data/lib/command_kit/file_utils.rb +46 -0
  19. data/lib/command_kit/options/option.rb +45 -22
  20. data/lib/command_kit/options/option_value.rb +2 -2
  21. data/lib/command_kit/options/parser.rb +1 -4
  22. data/lib/command_kit/options/quiet.rb +1 -1
  23. data/lib/command_kit/options/verbose.rb +2 -2
  24. data/lib/command_kit/options/version.rb +10 -0
  25. data/lib/command_kit/options.rb +89 -14
  26. data/lib/command_kit/os.rb +1 -1
  27. data/lib/command_kit/printing/fields.rb +56 -0
  28. data/lib/command_kit/printing/indent.rb +1 -1
  29. data/lib/command_kit/printing/lists.rb +91 -0
  30. data/lib/command_kit/printing/tables/border_style.rb +169 -0
  31. data/lib/command_kit/printing/tables/cell_builder.rb +93 -0
  32. data/lib/command_kit/printing/tables/row_builder.rb +111 -0
  33. data/lib/command_kit/printing/tables/style.rb +198 -0
  34. data/lib/command_kit/printing/tables/table_builder.rb +145 -0
  35. data/lib/command_kit/printing/tables/table_formatter.rb +254 -0
  36. data/lib/command_kit/printing/tables.rb +208 -0
  37. data/lib/command_kit/program_name.rb +9 -0
  38. data/lib/command_kit/stdio.rb +5 -1
  39. data/lib/command_kit/version.rb +1 -1
  40. data/spec/arguments_spec.rb +33 -0
  41. data/spec/bug_report_spec.rb +266 -0
  42. data/spec/colors_spec.rb +232 -195
  43. data/spec/command_name_spec.rb +1 -1
  44. data/spec/command_spec.rb +2 -2
  45. data/spec/edit_spec.rb +72 -0
  46. data/spec/file_utils_spec.rb +59 -0
  47. data/spec/fixtures/template.erb +5 -0
  48. data/spec/options/option_spec.rb +48 -2
  49. data/spec/options/parser_spec.rb +0 -10
  50. data/spec/options/quiet_spec.rb +51 -0
  51. data/spec/options/verbose_spec.rb +51 -0
  52. data/spec/options/version_spec.rb +146 -0
  53. data/spec/options_spec.rb +46 -0
  54. data/spec/pager_spec.rb +1 -1
  55. data/spec/printing/fields_spec.rb +167 -0
  56. data/spec/printing/lists_spec.rb +99 -0
  57. data/spec/printing/tables/border_style.rb +43 -0
  58. data/spec/printing/tables/cell_builer_spec.rb +135 -0
  59. data/spec/printing/tables/row_builder_spec.rb +165 -0
  60. data/spec/printing/tables/style_spec.rb +377 -0
  61. data/spec/printing/tables/table_builder_spec.rb +252 -0
  62. data/spec/printing/tables/table_formatter_spec.rb +1180 -0
  63. data/spec/printing/tables_spec.rb +1069 -0
  64. data/spec/program_name_spec.rb +8 -0
  65. metadata +36 -7
data/spec/colors_spec.rb CHANGED
@@ -65,6 +65,38 @@ 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
+
68
100
  describe "ON_BLACK" do
69
101
  it { expect(subject::ON_BLACK).to eq("\e[40m") }
70
102
  end
@@ -97,6 +129,42 @@ describe CommandKit::Colors do
97
129
  it { expect(subject::ON_WHITE).to eq("\e[47m") }
98
130
  end
99
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
+
100
168
  describe "RESET_COLOR" do
101
169
  it { expect(subject::RESET_COLOR).to eq("\e[39m") }
102
170
  end
@@ -219,401 +287,364 @@ describe CommandKit::Colors do
219
287
  end
220
288
  end
221
289
 
222
- describe ".on_black" do
290
+ describe ".bright_black" do
223
291
  context "when given a string" do
224
- it "must wrap the string with \\e[40m and \\e[39m" do
225
- expect(subject.on_black(str)).to eq("\e[40m#{str}\e[49m")
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")
226
294
  end
227
295
  end
228
296
 
229
297
  context "when given no arguments" do
230
- it { expect(subject.on_black).to eq("\e[40m") }
298
+ it { expect(subject.bright_black).to eq("\e[90m") }
231
299
  end
232
300
  end
233
301
 
234
- describe ".on_red" do
302
+ describe ".gray" do
235
303
  context "when given a string" do
236
- it "must wrap the string with \\e[41m and \\e[39m" do
237
- expect(subject.on_red(str)).to eq("\e[41m#{str}\e[49m")
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")
238
306
  end
239
307
  end
240
308
 
241
309
  context "when given no arguments" do
242
- it { expect(subject.on_red).to eq("\e[41m") }
310
+ it { expect(subject.gray).to eq("\e[90m") }
243
311
  end
244
312
  end
245
313
 
246
- describe ".on_green" do
314
+ describe ".bright_red" do
247
315
  context "when given a string" do
248
- it "must wrap the string with \\e[42m and \\e[39m" do
249
- expect(subject.on_green(str)).to eq("\e[42m#{str}\e[49m")
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")
250
318
  end
251
319
  end
252
320
 
253
321
  context "when given no arguments" do
254
- it { expect(subject.on_green).to eq("\e[42m") }
322
+ it { expect(subject.bright_red).to eq("\e[91m") }
255
323
  end
256
324
  end
257
325
 
258
- describe ".on_yellow" do
326
+ describe ".bright_green" do
259
327
  context "when given a string" do
260
- it "must wrap the string with \\e[43m and \\e[39m" do
261
- expect(subject.on_yellow(str)).to eq("\e[43m#{str}\e[49m")
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")
262
330
  end
263
331
  end
264
332
 
265
333
  context "when given no arguments" do
266
- it { expect(subject.on_yellow).to eq("\e[43m") }
334
+ it { expect(subject.bright_green).to eq("\e[92m") }
267
335
  end
268
336
  end
269
337
 
270
- describe ".on_blue" do
338
+ describe ".bright_yellow" do
271
339
  context "when given a string" do
272
- it "must wrap the string with \\e[44m and \\e[39m" do
273
- expect(subject.on_blue(str)).to eq("\e[44m#{str}\e[49m")
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")
274
342
  end
275
343
  end
276
344
 
277
345
  context "when given no arguments" do
278
- it { expect(subject.on_blue).to eq("\e[44m") }
346
+ it { expect(subject.bright_yellow).to eq("\e[93m") }
279
347
  end
280
348
  end
281
349
 
282
- describe ".on_magenta" do
350
+ describe ".bright_blue" do
283
351
  context "when given a string" do
284
- it "must wrap the string with \\e[45m and \\e[39m" do
285
- expect(subject.on_magenta(str)).to eq("\e[45m#{str}\e[49m")
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")
286
354
  end
287
355
  end
288
356
 
289
357
  context "when given no arguments" do
290
- it { expect(subject.on_magenta).to eq("\e[45m") }
358
+ it { expect(subject.bright_blue).to eq("\e[94m") }
291
359
  end
292
360
  end
293
361
 
294
- describe ".on_cyan" do
362
+ describe ".bright_magenta" do
295
363
  context "when given a string" do
296
- it "must wrap the string with \\e[46m and \\e[39m" do
297
- expect(subject.on_cyan(str)).to eq("\e[46m#{str}\e[49m")
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")
298
366
  end
299
367
  end
300
368
 
301
369
  context "when given no arguments" do
302
- it { expect(subject.on_cyan).to eq("\e[46m") }
370
+ it { expect(subject.bright_magenta).to eq("\e[95m") }
303
371
  end
304
372
  end
305
373
 
306
- describe ".on_white" do
374
+ describe ".bright_cyan" do
307
375
  context "when given a string" do
308
- it "must wrap the string with \\e[47m and \\e[39m" do
309
- expect(subject.on_white(str)).to eq("\e[47m#{str}\e[49m")
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")
310
378
  end
311
379
  end
312
380
 
313
381
  context "when given no arguments" do
314
- it { expect(subject.on_white).to eq("\e[47m") }
382
+ it { expect(subject.bright_cyan).to eq("\e[96m") }
315
383
  end
316
384
  end
317
- end
318
-
319
- describe CommandKit::Colors::PlainText do
320
- subject { described_class }
321
-
322
- let(:str) { 'foo' }
323
-
324
- describe "RESET" do
325
- it { expect(subject::RESET).to eq('') }
326
- end
327
-
328
- describe "CLEAR" do
329
- it { expect(subject::CLEAR).to eq('') }
330
- end
331
-
332
- describe "BOLD" do
333
- it { expect(subject::BOLD).to eq('') }
334
- end
335
-
336
- describe "RESET_INTENSITY" do
337
- it { expect(subject::RESET_INTENSITY).to eq('') }
338
- end
339
-
340
- describe "BLACK" do
341
- it { expect(subject::BLACK).to eq('') }
342
- end
343
-
344
- describe "RED" do
345
- it { expect(subject::RED).to eq('') }
346
- end
347
-
348
- describe "GREEN" do
349
- it { expect(subject::GREEN).to eq('') }
350
- end
351
-
352
- describe "YELLOW" do
353
- it { expect(subject::YELLOW).to eq('') }
354
- end
355
-
356
- describe "BLUE" do
357
- it { expect(subject::BLUE).to eq('') }
358
- end
359
-
360
- describe "MAGENTA" do
361
- it { expect(subject::MAGENTA).to eq('') }
362
- end
363
-
364
- describe "CYAN" do
365
- it { expect(subject::CYAN).to eq('') }
366
- end
367
-
368
- describe "WHITE" do
369
- it { expect(subject::WHITE).to eq('') }
370
- end
371
-
372
- describe "ON_BLACK" do
373
- it { expect(subject::ON_BLACK).to eq('') }
374
- end
375
385
 
376
- describe "ON_RED" do
377
- it { expect(subject::ON_RED).to eq('') }
378
- end
379
-
380
- describe "ON_GREEN" do
381
- it { expect(subject::ON_GREEN).to eq('') }
382
- end
383
-
384
- describe "ON_YELLOW" do
385
- it { expect(subject::ON_YELLOW).to eq('') }
386
- end
387
-
388
- describe "ON_BLUE" do
389
- it { expect(subject::ON_BLUE).to eq('') }
390
- end
391
-
392
- describe "ON_MAGENTA" do
393
- it { expect(subject::ON_MAGENTA).to eq('') }
394
- end
395
-
396
- describe "ON_CYAN" do
397
- it { expect(subject::ON_CYAN).to eq('') }
398
- end
399
-
400
- describe "ON_WHITE" do
401
- it { expect(subject::ON_WHITE).to eq('') }
402
- end
403
-
404
- describe "RESET_COLOR" do
405
- it { expect(subject::RESET_COLOR).to eq('') }
406
- end
407
-
408
- describe ".reset" do
409
- it { expect(subject.reset).to eq('') }
410
- end
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
411
392
 
412
- describe ".clear" do
413
- it { expect(subject.clear).to eq('') }
393
+ context "when given no arguments" do
394
+ it { expect(subject.bright_white).to eq("\e[97m") }
395
+ end
414
396
  end
415
397
 
416
- describe ".bold" do
398
+ describe ".on_black" do
417
399
  context "when given a string" do
418
- it "must return that string" do
419
- expect(subject.bold(str)).to eq(str)
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")
420
402
  end
421
403
  end
422
404
 
423
405
  context "when given no arguments" do
424
- it { expect(subject.bold).to eq('') }
406
+ it { expect(subject.on_black).to eq("\e[40m") }
425
407
  end
426
408
  end
427
409
 
428
- describe ".black" do
410
+ describe ".on_red" do
429
411
  context "when given a string" do
430
- it "must return that string" do
431
- expect(subject.black(str)).to eq(str)
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")
432
414
  end
433
415
  end
434
416
 
435
417
  context "when given no arguments" do
436
- it { expect(subject.black).to eq('') }
418
+ it { expect(subject.on_red).to eq("\e[41m") }
437
419
  end
438
420
  end
439
421
 
440
- describe ".red" do
422
+ describe ".on_green" do
441
423
  context "when given a string" do
442
- it "must return that string" do
443
- expect(subject.red(str)).to eq(str)
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")
444
426
  end
445
427
  end
446
428
 
447
429
  context "when given no arguments" do
448
- it { expect(subject.red).to eq('') }
430
+ it { expect(subject.on_green).to eq("\e[42m") }
449
431
  end
450
432
  end
451
433
 
452
- describe ".green" do
434
+ describe ".on_yellow" do
453
435
  context "when given a string" do
454
- it "must return that string" do
455
- expect(subject.green(str)).to eq(str)
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")
456
438
  end
457
439
  end
458
440
 
459
441
  context "when given no arguments" do
460
- it { expect(subject.green).to eq('') }
442
+ it { expect(subject.on_yellow).to eq("\e[43m") }
461
443
  end
462
444
  end
463
445
 
464
- describe ".yellow" do
446
+ describe ".on_blue" do
465
447
  context "when given a string" do
466
- it "must return that string" do
467
- expect(subject.yellow(str)).to eq(str)
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")
468
450
  end
469
451
  end
470
452
 
471
453
  context "when given no arguments" do
472
- it { expect(subject.yellow).to eq('') }
454
+ it { expect(subject.on_blue).to eq("\e[44m") }
473
455
  end
474
456
  end
475
457
 
476
- describe ".blue" do
458
+ describe ".on_magenta" do
477
459
  context "when given a string" do
478
- it "must return that string" do
479
- expect(subject.blue(str)).to eq(str)
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")
480
462
  end
481
463
  end
482
464
 
483
465
  context "when given no arguments" do
484
- it { expect(subject.blue).to eq('') }
466
+ it { expect(subject.on_magenta).to eq("\e[45m") }
485
467
  end
486
468
  end
487
469
 
488
- describe ".magenta" do
470
+ describe ".on_cyan" do
489
471
  context "when given a string" do
490
- it "must return that string" do
491
- expect(subject.magenta(str)).to eq(str)
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")
492
474
  end
493
475
  end
494
476
 
495
477
  context "when given no arguments" do
496
- it { expect(subject.magenta).to eq('') }
478
+ it { expect(subject.on_cyan).to eq("\e[46m") }
497
479
  end
498
480
  end
499
481
 
500
- describe ".cyan" do
482
+ describe ".on_white" do
501
483
  context "when given a string" do
502
- it "must return that string" do
503
- expect(subject.cyan(str)).to eq(str)
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")
504
486
  end
505
487
  end
506
488
 
507
489
  context "when given no arguments" do
508
- it { expect(subject.cyan).to eq('') }
490
+ it { expect(subject.on_white).to eq("\e[47m") }
509
491
  end
510
492
  end
511
493
 
512
- describe ".white" do
494
+ describe ".on_bright_black" do
513
495
  context "when given a string" do
514
- it "must return that string" do
515
- expect(subject.white(str)).to eq(str)
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")
516
498
  end
517
499
  end
518
500
 
519
501
  context "when given no arguments" do
520
- it { expect(subject.white).to eq('') }
502
+ it { expect(subject.on_bright_black).to eq("\e[100m") }
521
503
  end
522
504
  end
523
505
 
524
- describe ".on_black" do
506
+ describe ".on_gray" do
525
507
  context "when given a string" do
526
- it "must return that string" do
527
- expect(subject.on_black(str)).to eq(str)
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")
528
510
  end
529
511
  end
530
512
 
531
513
  context "when given no arguments" do
532
- it { expect(subject.on_black).to eq('') }
514
+ it { expect(subject.on_gray).to eq("\e[100m") }
533
515
  end
534
516
  end
535
517
 
536
- describe ".on_red" do
518
+ describe ".on_bright_red" do
537
519
  context "when given a string" do
538
- it "must return that string" do
539
- expect(subject.on_red(str)).to eq(str)
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")
540
522
  end
541
523
  end
542
524
 
543
525
  context "when given no arguments" do
544
- it { expect(subject.on_red).to eq('') }
526
+ it { expect(subject.on_bright_red).to eq("\e[101m") }
545
527
  end
546
528
  end
547
529
 
548
- describe ".on_green" do
530
+ describe ".on_bright_green" do
549
531
  context "when given a string" do
550
- it "must return that string" do
551
- expect(subject.on_green(str)).to eq(str)
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")
552
534
  end
553
535
  end
554
536
 
555
537
  context "when given no arguments" do
556
- it { expect(subject.on_green).to eq('') }
538
+ it { expect(subject.on_bright_green).to eq("\e[102m") }
557
539
  end
558
540
  end
559
541
 
560
- describe ".on_yellow" do
542
+ describe ".on_bright_yellow" do
561
543
  context "when given a string" do
562
- it "must return that string" do
563
- expect(subject.on_yellow(str)).to eq(str)
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")
564
546
  end
565
547
  end
566
548
 
567
549
  context "when given no arguments" do
568
- it { expect(subject.on_yellow).to eq('') }
550
+ it { expect(subject.on_bright_yellow).to eq("\e[103m") }
569
551
  end
570
552
  end
571
553
 
572
- describe ".on_blue" do
554
+ describe ".on_bright_blue" do
573
555
  context "when given a string" do
574
- it "must return that string" do
575
- expect(subject.on_blue(str)).to eq(str)
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")
576
558
  end
577
559
  end
578
560
 
579
561
  context "when given no arguments" do
580
- it { expect(subject.on_blue).to eq('') }
562
+ it { expect(subject.on_bright_blue).to eq("\e[104m") }
581
563
  end
582
564
  end
583
565
 
584
- describe ".on_magenta" do
566
+ describe ".on_bright_magenta" do
585
567
  context "when given a string" do
586
- it "must return that string" do
587
- expect(subject.on_magenta(str)).to eq(str)
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")
588
570
  end
589
571
  end
590
572
 
591
573
  context "when given no arguments" do
592
- it { expect(subject.on_magenta).to eq('') }
574
+ it { expect(subject.on_bright_magenta).to eq("\e[105m") }
593
575
  end
594
576
  end
595
577
 
596
- describe ".on_cyan" do
578
+ describe ".on_bright_cyan" do
597
579
  context "when given a string" do
598
- it "must return that string" do
599
- expect(subject.on_cyan(str)).to eq(str)
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")
600
582
  end
601
583
  end
602
584
 
603
585
  context "when given no arguments" do
604
- it { expect(subject.on_cyan).to eq('') }
586
+ it { expect(subject.on_bright_cyan).to eq("\e[106m") }
605
587
  end
606
588
  end
607
589
 
608
- describe ".on_white" do
590
+ describe ".on_bright_white" do
609
591
  context "when given a string" do
610
- it "must return that string" do
611
- expect(subject.on_white(str)).to eq(str)
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")
612
594
  end
613
595
  end
614
596
 
615
597
  context "when given no arguments" do
616
- it { expect(subject.on_white).to eq('') }
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
617
648
  end
618
649
  end
619
650
  end
@@ -625,6 +656,12 @@ describe CommandKit::Colors do
625
656
  it { expect(subject.ansi?).to be(false) }
626
657
  end
627
658
 
659
+ context "when NO_COLOR is set" do
660
+ subject { command_class.new(env: {'NO_COLOR' => 'true'}) }
661
+
662
+ it { expect(subject.ansi?).to be(false) }
663
+ end
664
+
628
665
  context "when stdout is a TTY" do
629
666
  let(:stdout) { StringIO.new }
630
667
  subject { command_class.new(stdout: stdout) }
@@ -19,7 +19,7 @@ describe CommandKit::CommandName do
19
19
  end
20
20
  end
21
21
 
22
- context "when a command_name is explicitly set" do
22
+ context "when a command_name has been explicitly set" do
23
23
  module TestCommandName
24
24
  class ExplicitCmd
25
25
  include CommandKit::CommandName
data/spec/command_spec.rb CHANGED
@@ -46,8 +46,8 @@ 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
51
  end
52
52
 
53
53
  module TestCommandClass