command_mapper-gen 0.1.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ruby.yml +27 -0
  3. data/.gitignore +10 -0
  4. data/.rspec +1 -0
  5. data/.yardopts +1 -0
  6. data/ChangeLog.md +20 -0
  7. data/Gemfile +17 -0
  8. data/LICENSE.txt +20 -0
  9. data/README.md +145 -0
  10. data/Rakefile +15 -0
  11. data/bin/command_mapper-gen +7 -0
  12. data/commnad_mapper-gen.gemspec +61 -0
  13. data/examples/grep.rb +63 -0
  14. data/gemspec.yml +26 -0
  15. data/lib/command_mapper/gen/arg.rb +43 -0
  16. data/lib/command_mapper/gen/argument.rb +53 -0
  17. data/lib/command_mapper/gen/cli.rb +233 -0
  18. data/lib/command_mapper/gen/command.rb +202 -0
  19. data/lib/command_mapper/gen/exceptions.rb +9 -0
  20. data/lib/command_mapper/gen/option.rb +66 -0
  21. data/lib/command_mapper/gen/option_value.rb +23 -0
  22. data/lib/command_mapper/gen/parsers/common.rb +49 -0
  23. data/lib/command_mapper/gen/parsers/help.rb +351 -0
  24. data/lib/command_mapper/gen/parsers/man.rb +80 -0
  25. data/lib/command_mapper/gen/parsers/options.rb +127 -0
  26. data/lib/command_mapper/gen/parsers/usage.rb +141 -0
  27. data/lib/command_mapper/gen/parsers.rb +2 -0
  28. data/lib/command_mapper/gen/task.rb +90 -0
  29. data/lib/command_mapper/gen/types/enum.rb +30 -0
  30. data/lib/command_mapper/gen/types/key_value.rb +34 -0
  31. data/lib/command_mapper/gen/types/list.rb +34 -0
  32. data/lib/command_mapper/gen/types/map.rb +36 -0
  33. data/lib/command_mapper/gen/types/num.rb +18 -0
  34. data/lib/command_mapper/gen/types/str.rb +48 -0
  35. data/lib/command_mapper/gen/types.rb +6 -0
  36. data/lib/command_mapper/gen/version.rb +6 -0
  37. data/lib/command_mapper/gen.rb +2 -0
  38. data/spec/argument_spec.rb +92 -0
  39. data/spec/cli_spec.rb +269 -0
  40. data/spec/command_spec.rb +316 -0
  41. data/spec/option_spec.rb +85 -0
  42. data/spec/option_value_spec.rb +20 -0
  43. data/spec/parsers/common_spec.rb +616 -0
  44. data/spec/parsers/help_spec.rb +612 -0
  45. data/spec/parsers/man_spec.rb +158 -0
  46. data/spec/parsers/options_spec.rb +802 -0
  47. data/spec/parsers/usage_spec.rb +1175 -0
  48. data/spec/spec_helper.rb +6 -0
  49. data/spec/task_spec.rb +69 -0
  50. data/spec/types/enum_spec.rb +45 -0
  51. data/spec/types/key_value_spec.rb +36 -0
  52. data/spec/types/list_spec.rb +36 -0
  53. data/spec/types/map_spec.rb +48 -0
  54. data/spec/types/str_spec.rb +70 -0
  55. metadata +133 -0
@@ -0,0 +1,616 @@
1
+ require 'spec_helper'
2
+ require 'command_mapper/gen/parsers/common'
3
+
4
+ describe CommandMapper::Gen::Parsers::Common do
5
+ describe "#space" do
6
+ subject { super().space }
7
+
8
+ context "when given a ' '" do
9
+ let(:string) { ' ' }
10
+
11
+ it "must parse it" do
12
+ expect(subject.parse(string)).to eq(string)
13
+ end
14
+ end
15
+
16
+ context "when given multiple spaces" do
17
+ let(:string) { ' ' }
18
+
19
+ it "must not parse it" do
20
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
21
+ end
22
+ end
23
+
24
+ context "when given a non-space character" do
25
+ let(:string) { 'A' }
26
+
27
+ it "must not parse it" do
28
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
29
+ end
30
+ end
31
+ end
32
+
33
+ describe "#spaces" do
34
+ subject { super().spaces }
35
+
36
+ context "when given an empty string" do
37
+ let(:string) { '' }
38
+
39
+ it "must not parse it" do
40
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
41
+ end
42
+ end
43
+
44
+ context "when given one space" do
45
+ let(:string) { ' ' }
46
+
47
+ it "must parse it" do
48
+ expect(subject.parse(string)).to eq(string)
49
+ end
50
+ end
51
+
52
+ context "when given multiple spaces" do
53
+ let(:string) { ' ' }
54
+
55
+ it "must parse it" do
56
+ expect(subject.parse(string)).to eq(string)
57
+ end
58
+ end
59
+ end
60
+
61
+ describe "#space?" do
62
+ subject { super().space? }
63
+
64
+ context "when given an empty string" do
65
+ let(:string) { '' }
66
+
67
+ it "must parse it" do
68
+ expect(subject.parse(string)).to eq(string)
69
+ end
70
+ end
71
+
72
+ context "when given one space" do
73
+ let(:string) { ' ' }
74
+
75
+ it "must parse it" do
76
+ expect(subject.parse(string)).to eq(string)
77
+ end
78
+ end
79
+
80
+ context "when given multiple spaces" do
81
+ let(:string) { ' ' }
82
+
83
+ it "must not parse it" do
84
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
85
+ end
86
+ end
87
+ end
88
+
89
+ describe "#ellipsis" do
90
+ subject { super().ellipsis }
91
+
92
+ context "when given '...'" do
93
+ let(:string) { '...' }
94
+
95
+ it "must parse it" do
96
+ expect(subject.parse(string)).to eq(string)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe "#ellipsis?" do
102
+ subject { super().ellipsis? }
103
+
104
+ context "when given an empty string" do
105
+ let(:string) { '' }
106
+
107
+ it "must parse it" do
108
+ expect(subject.parse(string)).to eq(string)
109
+ end
110
+ end
111
+
112
+ context "when given '...'" do
113
+ let(:string) { '...' }
114
+
115
+ it "must parse it" do
116
+ expect(subject.parse(string)).to eq({repeats: string})
117
+ end
118
+ end
119
+
120
+ context "when given ' ...'" do
121
+ let(:string) { ' ...' }
122
+
123
+ it "must parse the '...'" do
124
+ expect(subject.parse(string)).to eq({repeats: string.strip})
125
+ end
126
+ end
127
+ end
128
+
129
+ describe "#capitalized_name" do
130
+ subject { super().capitalized_name }
131
+
132
+ context "when given a single lowercase character" do
133
+ let(:string) { 'a' }
134
+
135
+ it "must not parse it" do
136
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
137
+ end
138
+ end
139
+
140
+ context "when given a '-' character" do
141
+ let(:string) { '-' }
142
+
143
+ it "must not parse it" do
144
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
145
+ end
146
+ end
147
+
148
+ context "when given a '_' character" do
149
+ let(:string) { '_' }
150
+
151
+ it "must not parse it" do
152
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
153
+ end
154
+ end
155
+
156
+ context "when given one uppercase character" do
157
+ let(:string) { 'A' }
158
+
159
+ it "must not parse it" do
160
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
161
+ end
162
+ end
163
+
164
+ context "when more than one uppercase character" do
165
+ let(:string) { 'AB' }
166
+
167
+ it "must not parse it" do
168
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
169
+ end
170
+ end
171
+
172
+ context "when given one uppercase character and a lowercase character" do
173
+ let(:string) { 'Ab' }
174
+
175
+ it "must parse it" do
176
+ expect(subject.parse(string)).to eq(string)
177
+ end
178
+ end
179
+
180
+ context "when given one uppercase character followed by multiple lowercase characters" do
181
+ let(:string) { 'Abbbb' }
182
+
183
+ it "must parse it" do
184
+ expect(subject.parse(string)).to eq(string)
185
+ end
186
+
187
+ context "and it contains a '_' character" do
188
+ let(:string) { 'Abb_bb' }
189
+
190
+ it "must parse it" do
191
+ expect(subject.parse(string)).to eq(string)
192
+ end
193
+ end
194
+
195
+ context "but it contains repeating '_' characters" do
196
+ let(:string) { 'Abb__bb' }
197
+
198
+ it "must not parse it" do
199
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
200
+ end
201
+ end
202
+
203
+ context "and it contains a '-' character" do
204
+ let(:string) { 'Abb-bb' }
205
+
206
+ it "must parse it" do
207
+ expect(subject.parse(string)).to eq(string)
208
+ end
209
+ end
210
+
211
+ context "but it contains repeating '-' characters" do
212
+ let(:string) { 'Abb--bb' }
213
+
214
+ it "must not parse it" do
215
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
216
+ end
217
+ end
218
+ end
219
+
220
+ context "when given two uppercase characters" do
221
+ let(:string) { 'AB' }
222
+
223
+ it "must not parse it" do
224
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
225
+ end
226
+ end
227
+ end
228
+
229
+ describe "#camelcase_name" do
230
+ subject { super().camelcase_name }
231
+
232
+ context "when given a single lowercase character" do
233
+ let(:string) { 'a' }
234
+
235
+ it "must not parse it" do
236
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
237
+ end
238
+ end
239
+
240
+ context "when given a '-' character" do
241
+ let(:string) { '-' }
242
+
243
+ it "must not parse it" do
244
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
245
+ end
246
+ end
247
+
248
+ context "when given a '_' character" do
249
+ let(:string) { '_' }
250
+
251
+ it "must not parse it" do
252
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
253
+ end
254
+ end
255
+
256
+ context "when given one uppercase character" do
257
+ let(:string) { 'A' }
258
+
259
+ it "must not parse it" do
260
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
261
+ end
262
+ end
263
+
264
+ context "when given one uppercase character and a lowercase character" do
265
+ let(:string) { 'Ab' }
266
+
267
+ it "must not parse it" do
268
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
269
+ end
270
+ end
271
+
272
+ context "when given one lowercase character" do
273
+ let(:string) { 'a' }
274
+
275
+ it "must not parse it" do
276
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
277
+ end
278
+ end
279
+
280
+ context "when given more than one lowercase characters" do
281
+ let(:string) { 'aaaaa' }
282
+
283
+ it "must not parse it" do
284
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
285
+ end
286
+ end
287
+
288
+ context "when given one or more lowercase characters then an uppercase character" do
289
+ let(:string) { 'aaaaaB' }
290
+
291
+ it "must not parse it" do
292
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
293
+ end
294
+ end
295
+
296
+ context "when given one or more lowercase characters, an uppercase character, then one or more lowercase characters" do
297
+ let(:string) { 'aaaaaBaaaa' }
298
+
299
+ it "must parse it" do
300
+ expect(subject.parse(string)).to eq(string)
301
+ end
302
+
303
+ context "and it contains a '_' character" do
304
+ let(:string) { 'aaa_Baa' }
305
+
306
+ it "must not parse it" do
307
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
308
+ end
309
+ end
310
+
311
+ context "but it contains repeating '_' characters" do
312
+ let(:string) { 'aaa__Baa' }
313
+
314
+ it "must not parse it" do
315
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
316
+ end
317
+ end
318
+
319
+ context "and it contains a '-' character" do
320
+ let(:string) { 'aaa-Baa' }
321
+
322
+ it "must not parse it" do
323
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
324
+ end
325
+ end
326
+
327
+ context "but it contains repeating '-' characters" do
328
+ let(:string) { 'aaa--Baa' }
329
+
330
+ it "must not parse it" do
331
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
332
+ end
333
+ end
334
+ end
335
+ end
336
+
337
+ describe "#lowercase_name" do
338
+ subject { super().lowercase_name }
339
+
340
+ context "when given a '_' character" do
341
+ let(:string) { '_' }
342
+
343
+ it "must not parse it" do
344
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
345
+ end
346
+ end
347
+
348
+ context "when given one lowercase character" do
349
+ let(:string) { 'a' }
350
+
351
+ it "must parse it" do
352
+ expect(subject.parse(string)).to eq(string)
353
+ end
354
+ end
355
+
356
+ context "when given multiple lowercase characters" do
357
+ let(:string) { 'ab' }
358
+
359
+ it "must parse it" do
360
+ expect(subject.parse(string)).to eq(string)
361
+ end
362
+
363
+ context "and it contains a '_' character" do
364
+ let(:string) { 'abb_bb' }
365
+
366
+ it "must parse it" do
367
+ expect(subject.parse(string)).to eq(string)
368
+ end
369
+ end
370
+
371
+ context "but it contains repeating '_' characters" do
372
+ let(:string) { 'abb__bb' }
373
+
374
+ it "must not parse it" do
375
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
376
+ end
377
+ end
378
+
379
+ context "and it contains a '-' character" do
380
+ let(:string) { 'abb-bb' }
381
+
382
+ it "must parse it" do
383
+ expect(subject.parse(string)).to eq(string)
384
+ end
385
+ end
386
+
387
+ context "but it contains repeating '-' characters" do
388
+ let(:string) { 'abb--bb' }
389
+
390
+ it "must not parse it" do
391
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
392
+ end
393
+ end
394
+ end
395
+
396
+ context "when given a single uppercase characters" do
397
+ let(:string) { 'A' }
398
+
399
+ it "must not parse it" do
400
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
401
+ end
402
+ end
403
+
404
+ context "when it contains a uppercase character" do
405
+ let(:string) { 'aaaaBaaaa' }
406
+
407
+ it "must not parse it" do
408
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
409
+ end
410
+ end
411
+ end
412
+
413
+ describe "#uppercase_name" do
414
+ subject { super().uppercase_name }
415
+
416
+ context "when given a '_' character" do
417
+ let(:string) { '_' }
418
+
419
+ it "must not parse it" do
420
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
421
+ end
422
+ end
423
+
424
+ context "when given one uppercase character" do
425
+ let(:string) { 'A' }
426
+
427
+ it "must parse it" do
428
+ expect(subject.parse(string)).to eq(string)
429
+ end
430
+ end
431
+
432
+ context "when given multiple uppercase characters" do
433
+ let(:string) { 'AB' }
434
+
435
+ it "must parse it" do
436
+ expect(subject.parse(string)).to eq(string)
437
+ end
438
+
439
+ context "and it contains a '_' character" do
440
+ let(:string) { 'ABB_BB' }
441
+
442
+ it "must parse it" do
443
+ expect(subject.parse(string)).to eq(string)
444
+ end
445
+ end
446
+
447
+ context "but it contains repeating '_' characters" do
448
+ let(:string) { 'ABB__BB' }
449
+
450
+ it "must not parse it" do
451
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
452
+ end
453
+ end
454
+
455
+ context "and it contains a '-' character" do
456
+ let(:string) { 'ABB-BB' }
457
+
458
+ it "must parse it" do
459
+ expect(subject.parse(string)).to eq(string)
460
+ end
461
+ end
462
+
463
+ context "but it contains repeating '-' characters" do
464
+ let(:string) { 'ABB--BB' }
465
+
466
+ it "must not parse it" do
467
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
468
+ end
469
+ end
470
+ end
471
+
472
+ context "when given a single lowercase characters" do
473
+ let(:string) { 'a' }
474
+
475
+ it "must not parse it" do
476
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
477
+ end
478
+ end
479
+
480
+ context "when it contains a uppercase character" do
481
+ let(:string) { 'AAAAbAAAA' }
482
+
483
+ it "must not parse it" do
484
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
485
+ end
486
+ end
487
+ end
488
+
489
+ describe "#short_flag" do
490
+ subject { super().short_flag }
491
+
492
+ context "when given a single '-'" do
493
+ let(:string) { '-' }
494
+
495
+ it "must not parse it" do
496
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
497
+ end
498
+ end
499
+
500
+ context "when given a '-' and a lowercase alphabetic character" do
501
+ let(:string) { '-a' }
502
+
503
+ it "must parse it" do
504
+ expect(subject.parse(string)).to eq(string)
505
+ end
506
+ end
507
+
508
+ context "when given a '-' and a uppercase alphabetic character" do
509
+ let(:string) { '-A' }
510
+
511
+ it "must parse it" do
512
+ expect(subject.parse(string)).to eq(string)
513
+ end
514
+ end
515
+
516
+ context "when given a '-' and a numeric character" do
517
+ let(:string) { '-0' }
518
+
519
+ it "must parse it" do
520
+ expect(subject.parse(string)).to eq(string)
521
+ end
522
+ end
523
+
524
+ context "when given a '-' and a '#' character" do
525
+ let(:string) { '-#' }
526
+
527
+ it "must parse it" do
528
+ expect(subject.parse(string)).to eq(string)
529
+ end
530
+ end
531
+
532
+ context "when given '--'" do
533
+ let(:string) { '--' }
534
+
535
+ it "must not parse it" do
536
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
537
+ end
538
+ end
539
+
540
+ context "when given '-_'" do
541
+ let(:string) { '-_' }
542
+
543
+ it "must not parse it" do
544
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
545
+ end
546
+ end
547
+ end
548
+
549
+ describe "#long_flag" do
550
+ subject { super().long_flag }
551
+
552
+ context "when given a '--'" do
553
+ let(:string) { '-' }
554
+
555
+ it "must not parse it" do
556
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
557
+ end
558
+ end
559
+
560
+ context "when given a '--' and a lowercase alphabetic character" do
561
+ let(:string) { '--a' }
562
+
563
+ it "must not parse it" do
564
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
565
+ end
566
+ end
567
+
568
+ context "when given a '--' and a uppercase alphabetic character" do
569
+ let(:string) { '--A' }
570
+
571
+ it "must not parse it" do
572
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
573
+ end
574
+ end
575
+
576
+ context "when given a '--' and a numeric character" do
577
+ let(:string) { '--0' }
578
+
579
+ it "must not parse it" do
580
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
581
+ end
582
+ end
583
+
584
+ context "when given a '---'" do
585
+ let(:string) { '---' }
586
+
587
+ it "must not parse it" do
588
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
589
+ end
590
+ end
591
+
592
+ context "when given a '--' and an underscore" do
593
+ let(:string) { '--_' }
594
+
595
+ it "must not parse it" do
596
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
597
+ end
598
+ end
599
+
600
+ context "when the string contains repeating '-' characters" do
601
+ let(:string) { '--foo--bar' }
602
+
603
+ it "must not parse it" do
604
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
605
+ end
606
+ end
607
+
608
+ context "when the string contains repeating '_' characters" do
609
+ let(:string) { '--foo__bar' }
610
+
611
+ it "must not parse it" do
612
+ expect { subject.parse(string) }.to raise_error(Parslet::ParseFailed)
613
+ end
614
+ end
615
+ end
616
+ end