gli 2.19.2 → 2.20.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +28 -0
  3. data/.gitignore +1 -3
  4. data/Gemfile +0 -6
  5. data/README.rdoc +2 -12
  6. data/Rakefile +15 -37
  7. data/bin/ci +29 -0
  8. data/bin/gli +25 -64
  9. data/bin/rake +29 -0
  10. data/bin/setup +5 -0
  11. data/exe/gli +68 -0
  12. data/gli.gemspec +19 -21
  13. data/gli.rdoc +2 -2
  14. data/lib/gli/commands/help_modules/command_help_format.rb +1 -1
  15. data/lib/gli/commands/help_modules/global_help_format.rb +1 -1
  16. data/lib/gli/commands/scaffold.rb +9 -93
  17. data/lib/gli/options.rb +2 -2
  18. data/lib/gli/version.rb +1 -1
  19. data/object-model.dot +29 -0
  20. data/object-model.png +0 -0
  21. data/test/apps/todo/Gemfile +1 -1
  22. data/test/apps/todo/bin/todo +1 -1
  23. data/test/integration/gli_cli_test.rb +69 -0
  24. data/test/integration/gli_powered_app_test.rb +52 -0
  25. data/test/integration/scaffold_test.rb +30 -0
  26. data/test/integration/test_helper.rb +52 -0
  27. data/test/{tc_command_finder.rb → unit/command_finder_test.rb} +6 -6
  28. data/test/{tc_command.rb → unit/command_test.rb} +4 -4
  29. data/test/unit/compound_command_test.rb +17 -0
  30. data/test/{tc_doc.rb → unit/doc_test.rb} +38 -51
  31. data/test/{tc_flag.rb → unit/flag_test.rb} +19 -25
  32. data/test/{tc_gli.rb → unit/gli_test.rb} +28 -47
  33. data/test/{tc_help.rb → unit/help_test.rb} +48 -107
  34. data/test/{init_simplecov.rb → unit/init_simplecov.rb} +0 -0
  35. data/test/{tc_options.rb → unit/options_test.rb} +4 -4
  36. data/test/unit/subcommand_parsing_test.rb +263 -0
  37. data/test/unit/subcommands_test.rb +245 -0
  38. data/test/{fake_std_out.rb → unit/support/fake_std_out.rb} +0 -0
  39. data/test/{config.yaml → unit/support/gli_test_config.yml} +0 -0
  40. data/test/unit/switch_test.rb +49 -0
  41. data/test/{tc_terminal.rb → unit/terminal_test.rb} +4 -3
  42. data/test/unit/test_helper.rb +13 -0
  43. data/test/unit/verbatim_wrapper_test.rb +24 -0
  44. metadata +57 -124
  45. data/.ruby-gemset +0 -1
  46. data/.ruby-version +0 -1
  47. data/.travis.yml +0 -11
  48. data/ObjectModel.graffle +0 -1191
  49. data/bin/report_on_rake_results +0 -10
  50. data/bin/test_all_rubies.sh +0 -6
  51. data/features/gli_executable.feature +0 -90
  52. data/features/gli_init.feature +0 -236
  53. data/features/step_definitions/gli_executable_steps.rb +0 -18
  54. data/features/step_definitions/gli_init_steps.rb +0 -11
  55. data/features/step_definitions/todo_steps.rb +0 -100
  56. data/features/support/env.rb +0 -54
  57. data/features/support/hooks.rb +0 -5
  58. data/features/todo.feature +0 -579
  59. data/features/todo_legacy.feature +0 -130
  60. data/test/option_test_helper.rb +0 -13
  61. data/test/tc_compound_command.rb +0 -22
  62. data/test/tc_subcommand_parsing.rb +0 -280
  63. data/test/tc_subcommands.rb +0 -259
  64. data/test/tc_switch.rb +0 -55
  65. data/test/tc_verbatim_wrapper.rb +0 -36
  66. data/test/test_helper.rb +0 -21
@@ -1,54 +0,0 @@
1
- begin
2
- require 'simplecov'
3
- SimpleCov.start
4
- rescue LoadError
5
- # Don't care
6
- end
7
- require 'aruba/cucumber'
8
- require 'fileutils'
9
-
10
- # Adds GLI's bin dir to our path
11
- ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
12
- GLI_LIB_PATH = File.expand_path(File.join(File.dirname(__FILE__),'..','..','lib'))
13
-
14
- GLI_GEMSET = 'gli-testing'
15
- TMP_PATH = 'tmp/aruba'
16
-
17
- Before do
18
- # Not sure how else to get this dynamically
19
- @dirs = [TMP_PATH]
20
- @aruba_timeout_seconds = 5
21
- @original_path = ENV['PATH'].split(File::PATH_SEPARATOR)
22
- @original_home = ENV['HOME']
23
- new_home = "/tmp/fakehome"
24
- FileUtils.rm_rf new_home
25
- FileUtils.mkdir new_home
26
- ENV['HOME'] = new_home
27
- FileUtils.cp 'gli.rdoc','gli.rdoc.orig'
28
- end
29
-
30
- After do |scenario|
31
- ENV['RUBYLIB'] = ''
32
- todo_app_dir = File.join(TMP_PATH,'todo')
33
- if File.exist? todo_app_dir
34
- FileUtils.rm_rf(todo_app_dir)
35
- end
36
- ENV['PATH'] = @original_path.join(File::PATH_SEPARATOR)
37
- ENV['HOME'] = @original_home
38
- ENV['TODO_SORT_HELP'] = nil
39
- ENV['TODO_WRAP_HELP_TEXT'] = nil
40
- ENV['HIDE_COMMANDS_WITHOUT_DESC'] = nil
41
- FileUtils.mv 'gli.rdoc.orig','gli.rdoc'
42
- end
43
-
44
- def add_to_path(dir)
45
- ENV['PATH'] = "#{dir}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
46
- end
47
-
48
- def add_to_lib_path(path)
49
- ENV["RUBYLIB"] = (String(ENV["RUBYLIB"]).split(File::PATH_SEPARATOR) + [path]).join(File::PATH_SEPARATOR)
50
- end
51
-
52
- def remove_from_lib_path(path)
53
- ENV["RUBYLIB"] = (String(ENV["RUBYLIB"]).split(File::PATH_SEPARATOR) - [path]).join(File::PATH_SEPARATOR)
54
- end
@@ -1,5 +0,0 @@
1
- require 'aruba/cucumber'
2
-
3
- Before '@slow-command' do
4
- @aruba_timeout_seconds = 10
5
- end
@@ -1,579 +0,0 @@
1
- Feature: The todo app has a nice user interface
2
- As a user of the todo application
3
- It should have a nice UI, since it's GLI-powered
4
-
5
- Background:
6
- Given I have GLI installed
7
- And GLI's libs are in my path
8
- And my terminal size is "80x24"
9
- And todo's bin directory is in my path
10
-
11
- Scenario: Error message for unknown command
12
- When I run `todo help unknown`
13
- Then the output should contain:
14
- """
15
- error: Unknown command 'unknown'. Use 'todo help' for a list of commands.
16
- """
17
-
18
- Scenario: Getting Help for todo in general
19
- When I successfully run `todo help`
20
- Then the exit status should be 0
21
- Then the output should contain:
22
- """
23
- NAME
24
- todo - Manages tasks
25
-
26
- A test program that has a sophisticated UI that can be used to exercise a
27
- lot of GLI's power
28
-
29
- SYNOPSIS
30
- todo [global options] command [command options] [arguments...]
31
-
32
- VERSION
33
- 0.0.1
34
-
35
- GLOBAL OPTIONS
36
- --flag=arg - (default: none)
37
- --help - Show this message
38
- --[no-]otherswitch -
39
- --[no-]switch -
40
- --version - Display the program version
41
-
42
- COMMANDS
43
- chained -
44
- chained2, ch2 -
45
- create, new - Create a new task or context
46
- first -
47
- help - Shows a list of commands or help for one command
48
- initconfig - Initialize the config file using current global options
49
- list - List things, such as tasks or contexts
50
- ls - LS things, such as tasks or contexts
51
- make -
52
- second -
53
- third -
54
- """
55
-
56
- Scenario: Version display
57
- When I successfully run `todo --version`
58
- Then the output should contain:
59
- """
60
- todo version 0.0.1
61
- """
62
-
63
- Scenario: --version flag displays version instead of executing command
64
- When I successfully run `todo --version ls`
65
- Then the output should contain:
66
- """
67
- todo version 0.0.1
68
- """
69
-
70
- Scenario: Help completion mode
71
- When I successfully run `todo help -c`
72
- Then the output should contain:
73
- """
74
- _doc
75
- ch2
76
- chained
77
- chained2
78
- create
79
- first
80
- help
81
- initconfig
82
- list
83
- ls
84
- make
85
- new
86
- second
87
- third
88
- """
89
-
90
- Scenario: Help completion mode for partial match
91
- When I successfully run `todo help -c ch`
92
- Then the output should contain:
93
- """
94
- ch2
95
- chained
96
- chained2
97
- """
98
-
99
- Scenario: Help completion mode for subcommands
100
- When I successfully run `todo help -c list`
101
- Then the output should contain:
102
- """
103
- contexts
104
- tasks
105
- """
106
-
107
- Scenario: Help completion mode partial match for subcommands
108
- When I successfully run `todo help -c list con`
109
- Then the output should contain:
110
- """
111
- contexts
112
- """
113
-
114
- Scenario: Getting Help with self-ordered commands
115
- Given the todo app is coded to avoid sorted help commands
116
- When I successfully run `todo help`
117
- Then the output should contain:
118
- """
119
- NAME
120
- todo - Manages tasks
121
-
122
- A test program that has a sophisticated UI that can be used to exercise a
123
- lot of GLI's power
124
-
125
- SYNOPSIS
126
- todo [global options] command [command options] [arguments...]
127
-
128
- VERSION
129
- 0.0.1
130
-
131
- GLOBAL OPTIONS
132
- --flag=arg - (default: none)
133
- --[no-]switch -
134
- --[no-]otherswitch -
135
- --version - Display the program version
136
- --help - Show this message
137
-
138
- COMMANDS
139
- help - Shows a list of commands or help for one command
140
- initconfig - Initialize the config file using current global options
141
- create, new - Create a new task or context
142
- list - List things, such as tasks or contexts
143
- ls - LS things, such as tasks or contexts
144
- make -
145
- third -
146
- first -
147
- second -
148
- chained -
149
- chained2, ch2 -
150
- """
151
-
152
- Scenario: Getting Help with commands without description hidden
153
- Given the todo app is coded to hide commands without description
154
- When I successfully run `todo help`
155
- Then the output should contain:
156
- """
157
- NAME
158
- todo - Manages tasks
159
-
160
- A test program that has a sophisticated UI that can be used to exercise a
161
- lot of GLI's power
162
-
163
- SYNOPSIS
164
- todo [global options] command [command options] [arguments...]
165
-
166
- VERSION
167
- 0.0.1
168
-
169
- GLOBAL OPTIONS
170
- --flag=arg - (default: none)
171
- --help - Show this message
172
- --[no-]otherswitch -
173
- --[no-]switch -
174
- --version - Display the program version
175
-
176
- COMMANDS
177
- create, new - Create a new task or context
178
- help - Shows a list of commands or help for one command
179
- initconfig - Initialize the config file using current global options
180
- list - List things, such as tasks or contexts
181
- ls - LS things, such as tasks or contexts
182
- """
183
-
184
- Scenario Outline: Getting Help for a top level command of todo
185
- # No idea why I have to do this again.
186
- Given todo's bin directory is in my path
187
- When I successfully run `todo <help_invocation>`
188
- Then the output should contain:
189
- """
190
- NAME
191
- list - List things, such as tasks or contexts
192
-
193
- SYNOPSIS
194
- todo [global options] list [command options] [tasks] [--flag arg] [-x arg] [task]...
195
- todo [global options] list [command options] contexts [--otherflag arg] [-b] [-f|--foobar]
196
-
197
- DESCRIPTION
198
- List a whole lot of things that you might be keeping track of in your
199
- overall todo list.
200
-
201
- This is your go-to place or finding all of the things that you might have
202
- stored in your todo databases.
203
-
204
- COMMAND OPTIONS
205
- -l, --[no-]long - Show long form
206
- --required_flag=arg - (required, default: none)
207
- --required_flag2=arg - (required, default: none)
208
-
209
- COMMANDS
210
- contexts - List contexts
211
- tasks - List tasks (default)
212
- """
213
-
214
- Examples:
215
- | help_invocation |
216
- | help list |
217
- | list -h |
218
- | list --help |
219
- | --help list |
220
-
221
- Scenario: Getting Help for a leaf command of todo
222
- Given todo's bin directory is in my path
223
- When I successfully run `todo help list tasks open`
224
- Then the output should contain:
225
- """
226
- NAME
227
- open - list open tasks
228
-
229
- SYNOPSIS
230
- todo [global options] list tasks open [command options]
231
-
232
- COMMAND OPTIONS
233
- --flag=arg - (default: none)
234
- -x arg - blah blah crud x whatever (default: none)
235
-
236
- EXAMPLES
237
-
238
- # example number 1
239
- todo list tasks open --flag=blah
240
-
241
- todo list tasks open -x foo
242
- """
243
-
244
- Scenario: Getting Help for a top level command of todo with no command options
245
- When I successfully run `todo help chained`
246
- Then the output should contain:
247
- """
248
- NAME
249
- chained -
250
-
251
- SYNOPSIS
252
- todo [global options] chained
253
- """
254
-
255
- Scenario: Getting Help with no wrapping
256
- Given the todo app is coded to avoid wrapping text
257
- When I successfully run `todo help list`
258
- Then the output should contain:
259
- """
260
- NAME
261
- list - List things, such as tasks or contexts
262
-
263
- SYNOPSIS
264
- todo [global options] list [command options] [tasks] [--flag arg] [-x arg] [task]...
265
- todo [global options] list [command options] contexts [--otherflag arg] [-b] [-f|--foobar]
266
-
267
- DESCRIPTION
268
- List a whole lot of things that you might be keeping track of in your overall todo list. This is your go-to place or finding all of the things that you might have stored in your todo databases.
269
-
270
- COMMAND OPTIONS
271
- -l, --[no-]long - Show long form
272
- --required_flag=arg - (required, default: none)
273
- --required_flag2=arg - (required, default: none)
274
-
275
- COMMANDS
276
- contexts - List contexts
277
- tasks - List tasks (default)
278
- """
279
-
280
- Scenario: Getting Help with verbatim formatting
281
- Given the todo app is coded to use verbatim formatting
282
- When I successfully run `todo help list`
283
- Then the output should contain:
284
- """
285
- NAME
286
- list - List things, such as tasks or contexts
287
-
288
- SYNOPSIS
289
- todo [global options] list [command options] [tasks] [--flag arg] [-x arg] [task]...
290
- todo [global options] list [command options] contexts [--otherflag arg] [-b] [-f|--foobar]
291
-
292
- DESCRIPTION
293
-
294
- List a whole lot of things that you might be keeping track of
295
- in your overall todo list.
296
-
297
- This is your go-to place or finding all of the things that you
298
- might have
299
- stored in
300
- your todo databases.
301
-
302
-
303
- COMMAND OPTIONS
304
- -l, --[no-]long - Show long form
305
- --required_flag=arg - (required, default: none)
306
- --required_flag2=arg - (required, default: none)
307
-
308
- COMMANDS
309
- contexts - List contexts
310
- tasks - List tasks (default)
311
- """
312
-
313
- Scenario: Getting Help without wrapping
314
- Given the todo app is coded to wrap text only for tty
315
- When I successfully run `todo help list`
316
- Then the output should contain:
317
- """
318
- NAME
319
- list - List things, such as tasks or contexts
320
-
321
- SYNOPSIS
322
- todo [global options] list [command options] [tasks] [--flag arg] [-x arg] [task]...
323
- todo [global options] list [command options] contexts [--otherflag arg] [-b] [-f|--foobar]
324
-
325
- DESCRIPTION
326
- List a whole lot of things that you might be keeping track of in your overall todo list. This is your go-to place or finding all of the things that you might have stored in your todo databases.
327
-
328
- COMMAND OPTIONS
329
- -l, --[no-]long - Show long form
330
- --required_flag=arg - (required, default: none)
331
- --required_flag2=arg - (required, default: none)
332
-
333
- COMMANDS
334
- contexts - List contexts
335
- tasks - List tasks (default)
336
- """
337
-
338
- Scenario: Getting Help for a sub command of todo list
339
- When I successfully run `todo help list tasks`
340
- Then the output should contain:
341
- """
342
- NAME
343
- tasks - List tasks
344
-
345
- SYNOPSIS
346
- todo [global options] list tasks [command options] [task]...
347
- todo [global options] list tasks [command options] open [--flag arg] [-x arg]
348
-
349
- DESCRIPTION
350
- Lists all of your tasks that you have, in varying orders, and all that
351
- stuff. Yes, this is long, but I need a long description.
352
-
353
- COMMAND OPTIONS
354
- --flag=arg - (default: none)
355
- -x arg - blah blah crud x whatever (default: none)
356
-
357
- COMMANDS
358
- <default> - list all tasks
359
- open - list open tasks
360
- """
361
-
362
- Scenario: Getting Help for a sub command with no command options
363
- When I successfully run `todo help new`
364
- Then the output should contain:
365
- """
366
- NAME
367
- create - Create a new task or context
368
-
369
- SYNOPSIS
370
- todo [global options] create
371
- todo [global options] create contexts [context_name]
372
- todo [global options] create relation_1-1 first second [name]
373
- todo [global options] create relation_1-n first second... [name]
374
- todo [global options] create relation_n-1 first... second [name]
375
- todo [global options] create tasks task_name...
376
-
377
- COMMANDS
378
- <default> - Makes a new task
379
- contexts - Make a new context
380
- relation_1-1 -
381
- relation_1-n -
382
- relation_n-1 -
383
- tasks - Make a new task
384
- """
385
- And the output should not contain "COMMAND OPTIONS"
386
-
387
- Scenario: Running list w/out subcommand performs list tasks by default
388
- When I successfully run `todo list --required_flag=blah --required_flag2=bleh boo yay`
389
- Then the output should contain "list tasks: boo,yay"
390
-
391
- Scenario: Running list w/out subcommand or any arguments performs list tasks by default
392
- When I successfully run `todo list --required_flag=blah --required_flag2=bleh`
393
- Then the output should contain "list tasks:"
394
-
395
- Scenario: Running chained commands works
396
- When I successfully run `todo chained foo bar`
397
- Then the output should contain:
398
- """
399
- first: foo,bar
400
- second: foo,bar
401
- """
402
-
403
- Scenario: Running chained commands works and is ordered
404
- When I successfully run `todo chained2 foo bar`
405
- Then the output should contain:
406
- """
407
- second: foo,bar
408
- first: foo,bar
409
- """
410
-
411
- Scenario: Running chained commands works and is ordered
412
- When I successfully run `todo ch2 foo bar`
413
- Then the output should contain:
414
- """
415
- second: foo,bar
416
- first: foo,bar
417
- """
418
-
419
- Scenario: Running ls w/out subcommand shows help and an error
420
- When I run `todo ls`
421
- Then the exit status should not be 0
422
- And the stderr should contain "error: Command 'ls' requires a subcommand"
423
- And the stdout should contain:
424
- """
425
- NAME
426
- ls - LS things, such as tasks or contexts
427
-
428
- SYNOPSIS
429
- todo [global options] ls [command options] contexts [-b] [-f|--foobar]
430
- todo [global options] ls [command options] tasks [-x arg]
431
-
432
- DESCRIPTION
433
- List a whole lot of things that you might be keeping track of in your
434
- overall todo list.
435
-
436
- This is your go-to place or finding all of the things that you might have
437
- stored in your todo databases.
438
-
439
- COMMAND OPTIONS
440
- -l, --[no-]long - Show long form
441
-
442
- COMMANDS
443
- contexts - List contexts
444
- tasks - List tasks
445
- """
446
-
447
- Scenario: Access to the complex command-line options for nested subcommands
448
- Given I run `todo make -l MAKE task -l TASK bug -l BUG other args`
449
- Then the exit status should be 0
450
- And the stdout should contain:
451
- """
452
- new task bug
453
- other,args
454
- BUG
455
-
456
- BUG
457
- TASK
458
- TASK
459
-
460
- MAKE
461
- MAKE
462
-
463
- """
464
-
465
- Scenario: Init Config makes a reasonable config file
466
- Given a clean home directory
467
- When I successfully run `todo --flag foo --switch --no-otherswitch initconfig`
468
- Then the config file should contain a section for each command and subcommand
469
-
470
- Scenario: Init Config makes a reasonable config file if one is there and we force it
471
- Given a clean home directory
472
- And I successfully run `todo --flag foo --switch --no-otherswitch initconfig`
473
- When I run `todo --flag foo --switch --no-otherswitch initconfig`
474
- Then the exit status should not be 0
475
- When I run `todo --flag foo --switch --no-otherswitch initconfig --force`
476
- Then the exit status should be 0
477
-
478
- Scenario: Configuration percolates to the app
479
- Given a clean home directory
480
- And a config file that specifies defaults for some commands with subcommands
481
- When I successfully run `todo help list tasks`
482
- Then I should see the defaults for 'list tasks' from the config file in the help
483
-
484
- Scenario: Do it again because aruba buffers all output
485
- Given a clean home directory
486
- And a config file that specifies defaults for some commands with subcommands
487
- When I successfully run `todo help list contexts`
488
- Then I should see the defaults for 'list contexts' from the config file in the help
489
-
490
- Scenario: A complex SYNOPSIS section gets summarized in terminal mode
491
- Given my terminal is 50 characters wide
492
- And my app is configured for "terminal" synopses
493
- When I run `todo ls`
494
- Then the exit status should not be 0
495
- And the stderr should contain "error: Command 'ls' requires a subcommand"
496
- And the stdout should contain:
497
- """
498
- NAME
499
- ls - LS things, such as tasks or contexts
500
-
501
- SYNOPSIS
502
- todo [global options] ls [command options] contexts [subcommand options]
503
- todo [global options] ls [command options] tasks [subcommand options]
504
- """
505
-
506
- Scenario: We can always use a compact SYNOPSIS
507
- Given my terminal is 500 characters wide
508
- And my app is configured for "compact" synopses
509
- When I run `todo ls`
510
- Then the exit status should not be 0
511
- And the stderr should contain "error: Command 'ls' requires a subcommand"
512
- And the stdout should contain:
513
- """
514
- NAME
515
- ls - LS things, such as tasks or contexts
516
-
517
- SYNOPSIS
518
- todo [global options] ls [command options] contexts [subcommand options]
519
- todo [global options] ls [command options] tasks [subcommand options]
520
- """
521
-
522
- Scenario: We get a clear error message when a required argument is missing
523
- Given a clean home directory
524
- When I run `todo list`
525
- Then the exit status should not be 0
526
- And the stderr should contain "error: required_flag is required, required_flag2 is required"
527
- And the output should contain:
528
- """
529
- NAME
530
- list - List things, such as tasks or contexts
531
-
532
- SYNOPSIS
533
- todo [global options] list [command options] [tasks] [subcommand options] [task]...
534
- todo [global options] list [command options] contexts [subcommand options]
535
-
536
- DESCRIPTION
537
- List a whole lot of things that you might be keeping track of in your
538
- overall todo list.
539
-
540
- This is your go-to place or finding all of the things that you might have
541
- stored in your todo databases.
542
-
543
- COMMAND OPTIONS
544
- -l, --[no-]long - Show long form
545
- --required_flag=arg - (required, default: none)
546
- --required_flag2=arg - (required, default: none)
547
-
548
- COMMANDS
549
- contexts - List contexts
550
- tasks - List tasks (default)
551
- """
552
-
553
- Scenario: Getting help on a root command with an arg_name outputs the argument description
554
- When I run `todo help first`
555
- And the stdout should contain:
556
- """
557
- NAME
558
- first -
559
-
560
- SYNOPSIS
561
- todo [global options] first [argument]
562
- """
563
-
564
- Scenario: Getting help on a root command with an arg outputs the argument description
565
- When I run `todo help second`
566
- And the stdout should contain:
567
- """
568
- NAME
569
- second -
570
-
571
- SYNOPSIS
572
- todo [global options] second [argument]
573
- """
574
-
575
- Scenario: Generate app documentation
576
- When I run `todo _doc`
577
- Then the exit status should be 0
578
- And a file named "todo.rdoc" should exist
579
- And the file "todo.rdoc" should contain "Lists all of your contexts, which are places you might be"