rbcli 0.2.2 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -0
  3. data/Gemfile.lock +2 -2
  4. data/README.md +6 -1
  5. data/docs-src/docs/advanced/interactive_commands.md +37 -0
  6. data/docs-src/docs/imported/changelog.md +14 -0
  7. data/docs-src/docs/tutorial/40-options_parameters_and_arguments.md +25 -0
  8. data/docs-src/makesite.sh +1 -1
  9. data/docs-src/mkdocs.yml +3 -1
  10. data/docs/404.html +36 -12
  11. data/docs/advanced/automatic_updates/index.html +36 -12
  12. data/docs/advanced/command_types/index.html +34 -10
  13. data/docs/advanced/distributed_state_locking/index.html +34 -10
  14. data/docs/advanced/hooks/index.html +36 -12
  15. data/docs/advanced/interactive_commands/index.html +829 -0
  16. data/docs/advanced/logging/index.html +833 -0
  17. data/docs/advanced/remote_execution/index.html +36 -12
  18. data/docs/advanced/state_storage/index.html +34 -10
  19. data/docs/advanced/user_config_files/index.html +34 -10
  20. data/docs/assets/javascripts/application.583bbe55.js +1 -0
  21. data/docs/assets/stylesheets/application-palette.22915126.css +1176 -0
  22. data/docs/assets/stylesheets/application.451f80e5.css +2552 -0
  23. data/docs/development/code_of_conduct/index.html +34 -10
  24. data/docs/development/contributing/index.html +36 -12
  25. data/docs/development/license/index.html +34 -10
  26. data/docs/imported/changelog/index.html +132 -27
  27. data/docs/imported/quick_reference/index.html +34 -10
  28. data/docs/index.html +36 -12
  29. data/docs/search/search_index.json +1 -639
  30. data/docs/sitemap.xml +48 -38
  31. data/docs/sitemap.xml.gz +0 -0
  32. data/docs/tutorial/10-getting_started/index.html +34 -10
  33. data/docs/tutorial/20-project_layout/index.html +34 -10
  34. data/docs/tutorial/30-your_first_command/index.html +34 -10
  35. data/docs/tutorial/40-options_parameters_and_arguments/index.html +75 -10
  36. data/docs/tutorial/50-publishing/index.html +34 -10
  37. data/docs/whoami/index.html +36 -12
  38. data/exe/rbcli +1 -1
  39. data/lib/rbcli/engine/command.rb +28 -2
  40. data/lib/rbcli/version.rb +1 -1
  41. data/rbcli.gemspec +1 -1
  42. data/skeletons/project/application/commands/command.erb +1 -1
  43. metadata +10 -6
  44. data/docs/assets/javascripts/application.a59e2a89.js +0 -1
  45. data/docs/assets/stylesheets/application-palette.6079476c.css +0 -2
  46. data/docs/assets/stylesheets/application.ba0fd1a6.css +0 -2
@@ -36,7 +36,7 @@
36
36
  <meta name="lang:search.tokenizer" content="[\s\-]+">
37
37
 
38
38
  <link rel="shortcut icon" href="../../assets/images/favicon.png">
39
- <meta name="generator" content="mkdocs-0.17.5, mkdocs-material-2.9.2">
39
+ <meta name="generator" content="mkdocs-1.0.3, mkdocs-material-3.0.4">
40
40
 
41
41
 
42
42
 
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- <link rel="stylesheet" href="../../assets/stylesheets/application.ba0fd1a6.css">
47
+ <link rel="stylesheet" href="../../assets/stylesheets/application.451f80e5.css">
48
48
 
49
49
 
50
50
 
@@ -52,8 +52,8 @@
52
52
  <script src="../../assets/javascripts/modernizr.1aa3b519.js"></script>
53
53
 
54
54
 
55
- <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
56
55
 
56
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
57
57
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
58
58
  <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
59
59
 
@@ -94,7 +94,7 @@
94
94
  <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
95
95
  <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
96
96
 
97
- <a href="#options-paramters-and-arguments" tabindex="1" class="md-skip">
97
+ <a href="../../#options-paramters-and-arguments" tabindex="1" class="md-skip">
98
98
  Skip to content
99
99
  </a>
100
100
 
@@ -264,11 +264,11 @@
264
264
  <div class="md-sidebar__inner">
265
265
  <nav class="md-nav md-nav--primary" data-md-level="0">
266
266
  <label class="md-nav__title md-nav__title--site" for="__drawer">
267
- <span class="md-nav__button md-logo">
267
+ <a href="../.." title="RBCli Documentation" class="md-nav__button md-logo">
268
268
 
269
269
  <i class="md-icon">devices</i>
270
270
 
271
- </span>
271
+ </a>
272
272
  RBCli Documentation
273
273
  </label>
274
274
 
@@ -428,6 +428,19 @@
428
428
  Parameters
429
429
  </a>
430
430
 
431
+ <nav class="md-nav">
432
+ <ul class="md-nav__list">
433
+
434
+ <li class="md-nav__item">
435
+ <a href="#user-prompting" title="User Prompting" class="md-nav__link">
436
+ User Prompting
437
+ </a>
438
+
439
+ </li>
440
+
441
+ </ul>
442
+ </nav>
443
+
431
444
  </li>
432
445
 
433
446
  <li class="md-nav__item">
@@ -539,6 +552,18 @@
539
552
 
540
553
 
541
554
 
555
+ <li class="md-nav__item">
556
+ <a href="../../advanced/logging/" title="Logging" class="md-nav__link">
557
+ Logging
558
+ </a>
559
+ </li>
560
+
561
+
562
+
563
+
564
+
565
+
566
+
542
567
  <li class="md-nav__item">
543
568
  <a href="../../advanced/automatic_updates/" title="Automatic Updates" class="md-nav__link">
544
569
  Automatic Updates
@@ -582,6 +607,18 @@
582
607
  </li>
583
608
 
584
609
 
610
+
611
+
612
+
613
+
614
+
615
+ <li class="md-nav__item">
616
+ <a href="../../advanced/interactive_commands/" title="Interactive Commands" class="md-nav__link">
617
+ Interactive Commands
618
+ </a>
619
+ </li>
620
+
621
+
585
622
  </ul>
586
623
  </nav>
587
624
  </li>
@@ -665,8 +702,8 @@
665
702
 
666
703
 
667
704
  <li class="md-nav__item">
668
- <a href="../../whoami/" title="$ whoami" class="md-nav__link">
669
- $ whoami
705
+ <a href="../../whoami/" title="whoami" class="md-nav__link">
706
+ whoami
670
707
  </a>
671
708
  </li>
672
709
 
@@ -710,6 +747,19 @@
710
747
  Parameters
711
748
  </a>
712
749
 
750
+ <nav class="md-nav">
751
+ <ul class="md-nav__list">
752
+
753
+ <li class="md-nav__item">
754
+ <a href="#user-prompting" title="User Prompting" class="md-nav__link">
755
+ User Prompting
756
+ </a>
757
+
758
+ </li>
759
+
760
+ </ul>
761
+ </nav>
762
+
713
763
  </li>
714
764
 
715
765
  <li class="md-nav__item">
@@ -867,6 +917,21 @@ parameter :directoriesfirst, 'Show directories on top', type: :boolean, default:
867
917
  </code></pre>
868
918
 
869
919
  <p>Note how the parameters come after the <code>list</code> command in the syntax above. As you create more commands, each will have its own unique set of parameters, while the options remain <em>before</em> the command and are available to all of them.</p>
920
+ <h3 id="user-prompting">User Prompting</h3>
921
+ <p>There is an additional option when declaring parameters to prompt the user for a value if not entered on the command line. This can be done with the <code>prompt:</code> keyword. Let's change one of our parameters to utilize it:</p>
922
+ <pre><code class="ruby">parameter :sort, 'Sort output alphabetically', type: :boolean, default: false, prompt: &quot;Sort output alphabetically?&quot;
923
+ </code></pre>
924
+
925
+ <p>Now, let's run the tool while omitting the <code>--sort</code> parameter, as such:</p>
926
+ <pre><code class="bash">mytool -c list -ad
927
+ </code></pre>
928
+
929
+ <p>This should give you the prompt:</p>
930
+ <pre><code>Sort output alphabetically? (y/N):
931
+ </code></pre>
932
+
933
+ <p>Because we set the parameter to default to <code>false</code> the default here is <code>N</code>, which is used if the user hits enter without entering a letter. If the default was set to <code>true</code>, then the <code>Y</code> would be capitalized and be the default.</p>
934
+ <p>For more information, see the documentation on <a href="../../advanced/interactive_commands/">Interactive Commands</a>.</p>
870
935
  <h2 id="arguments">Arguments</h2>
871
936
  <p>Lastly on the command line, there are arguments. Arguments are simply strings without the <code>-</code> character in front, and automatically get passed into an array in your applicaiton. Let's take a look at how we can use them.</p>
872
937
  <p>Unlike options and parameters, arguments require no setup. So let's assume that we want any arguments passed to the <code>list</code> command to be filenames that you want to display, and that you can pass multiple ones. Since arguments aren't listed automatically by the help function, this is a good example of what to put in your usage text. Let's take a look at what our class looks like now:</p>
@@ -1049,9 +1114,9 @@ parameter :&lt;name&gt;, &quot;&lt;description_string&gt;&quot;, short: '&lt;cha
1049
1114
 
1050
1115
  </div>
1051
1116
 
1052
- <script src="../../assets/javascripts/application.a59e2a89.js"></script>
1117
+ <script src="../../assets/javascripts/application.583bbe55.js"></script>
1053
1118
 
1054
- <script>app.initialize({version:"0.17.5",url:{base:"../.."}})</script>
1119
+ <script>app.initialize({version:"1.0.3",url:{base:"../.."}})</script>
1055
1120
 
1056
1121
 
1057
1122
 
@@ -36,7 +36,7 @@
36
36
  <meta name="lang:search.tokenizer" content="[\s\-]+">
37
37
 
38
38
  <link rel="shortcut icon" href="../../assets/images/favicon.png">
39
- <meta name="generator" content="mkdocs-0.17.5, mkdocs-material-2.9.2">
39
+ <meta name="generator" content="mkdocs-1.0.3, mkdocs-material-3.0.4">
40
40
 
41
41
 
42
42
 
@@ -44,7 +44,7 @@
44
44
 
45
45
 
46
46
 
47
- <link rel="stylesheet" href="../../assets/stylesheets/application.ba0fd1a6.css">
47
+ <link rel="stylesheet" href="../../assets/stylesheets/application.451f80e5.css">
48
48
 
49
49
 
50
50
 
@@ -52,8 +52,8 @@
52
52
  <script src="../../assets/javascripts/modernizr.1aa3b519.js"></script>
53
53
 
54
54
 
55
- <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
56
55
 
56
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
57
57
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
58
58
  <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
59
59
 
@@ -94,7 +94,7 @@
94
94
  <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
95
95
  <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
96
96
 
97
- <a href="#publishing-your-application" tabindex="1" class="md-skip">
97
+ <a href="../../#publishing-your-application" tabindex="1" class="md-skip">
98
98
  Skip to content
99
99
  </a>
100
100
 
@@ -264,11 +264,11 @@
264
264
  <div class="md-sidebar__inner">
265
265
  <nav class="md-nav md-nav--primary" data-md-level="0">
266
266
  <label class="md-nav__title md-nav__title--site" for="__drawer">
267
- <span class="md-nav__button md-logo">
267
+ <a href="../.." title="RBCli Documentation" class="md-nav__button md-logo">
268
268
 
269
269
  <i class="md-icon">devices</i>
270
270
 
271
- </span>
271
+ </a>
272
272
  RBCli Documentation
273
273
  </label>
274
274
 
@@ -532,6 +532,18 @@
532
532
 
533
533
 
534
534
 
535
+ <li class="md-nav__item">
536
+ <a href="../../advanced/logging/" title="Logging" class="md-nav__link">
537
+ Logging
538
+ </a>
539
+ </li>
540
+
541
+
542
+
543
+
544
+
545
+
546
+
535
547
  <li class="md-nav__item">
536
548
  <a href="../../advanced/automatic_updates/" title="Automatic Updates" class="md-nav__link">
537
549
  Automatic Updates
@@ -575,6 +587,18 @@
575
587
  </li>
576
588
 
577
589
 
590
+
591
+
592
+
593
+
594
+
595
+ <li class="md-nav__item">
596
+ <a href="../../advanced/interactive_commands/" title="Interactive Commands" class="md-nav__link">
597
+ Interactive Commands
598
+ </a>
599
+ </li>
600
+
601
+
578
602
  </ul>
579
603
  </nav>
580
604
  </li>
@@ -658,8 +682,8 @@
658
682
 
659
683
 
660
684
  <li class="md-nav__item">
661
- <a href="../../whoami/" title="$ whoami" class="md-nav__link">
662
- $ whoami
685
+ <a href="../../whoami/" title="whoami" class="md-nav__link">
686
+ whoami
663
687
  </a>
664
688
  </li>
665
689
 
@@ -838,9 +862,9 @@ gem install mytool-*.gem
838
862
 
839
863
  </div>
840
864
 
841
- <script src="../../assets/javascripts/application.a59e2a89.js"></script>
865
+ <script src="../../assets/javascripts/application.583bbe55.js"></script>
842
866
 
843
- <script>app.initialize({version:"0.17.5",url:{base:"../.."}})</script>
867
+ <script>app.initialize({version:"1.0.3",url:{base:"../.."}})</script>
844
868
 
845
869
 
846
870
 
@@ -36,15 +36,15 @@
36
36
  <meta name="lang:search.tokenizer" content="[\s\-]+">
37
37
 
38
38
  <link rel="shortcut icon" href="../assets/images/favicon.png">
39
- <meta name="generator" content="mkdocs-0.17.5, mkdocs-material-2.9.2">
39
+ <meta name="generator" content="mkdocs-1.0.3, mkdocs-material-3.0.4">
40
40
 
41
41
 
42
42
 
43
- <title>$ whoami - RBCli Documentation</title>
43
+ <title>whoami - RBCli Documentation</title>
44
44
 
45
45
 
46
46
 
47
- <link rel="stylesheet" href="../assets/stylesheets/application.ba0fd1a6.css">
47
+ <link rel="stylesheet" href="../assets/stylesheets/application.451f80e5.css">
48
48
 
49
49
 
50
50
 
@@ -52,8 +52,8 @@
52
52
  <script src="../assets/javascripts/modernizr.1aa3b519.js"></script>
53
53
 
54
54
 
55
- <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
56
55
 
56
+ <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
57
57
  <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
58
58
  <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
59
59
 
@@ -94,7 +94,7 @@
94
94
  <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
95
95
  <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
96
96
 
97
- <a href="#my-letter-to-you" tabindex="1" class="md-skip">
97
+ <a href="../#my-letter-to-you" tabindex="1" class="md-skip">
98
98
  Skip to content
99
99
  </a>
100
100
 
@@ -120,7 +120,7 @@
120
120
  RBCli Documentation
121
121
  </span>
122
122
  <span class="md-header-nav__topic">
123
- $ whoami
123
+ whoami
124
124
  </span>
125
125
 
126
126
 
@@ -262,11 +262,11 @@
262
262
  <div class="md-sidebar__inner">
263
263
  <nav class="md-nav md-nav--primary" data-md-level="0">
264
264
  <label class="md-nav__title md-nav__title--site" for="__drawer">
265
- <span class="md-nav__button md-logo">
265
+ <a href=".." title="RBCli Documentation" class="md-nav__button md-logo">
266
266
 
267
267
  <i class="md-icon">devices</i>
268
268
 
269
- </span>
269
+ </a>
270
270
  RBCli Documentation
271
271
  </label>
272
272
 
@@ -462,6 +462,18 @@
462
462
 
463
463
 
464
464
 
465
+ <li class="md-nav__item">
466
+ <a href="../advanced/logging/" title="Logging" class="md-nav__link">
467
+ Logging
468
+ </a>
469
+ </li>
470
+
471
+
472
+
473
+
474
+
475
+
476
+
465
477
  <li class="md-nav__item">
466
478
  <a href="../advanced/automatic_updates/" title="Automatic Updates" class="md-nav__link">
467
479
  Automatic Updates
@@ -505,6 +517,18 @@
505
517
  </li>
506
518
 
507
519
 
520
+
521
+
522
+
523
+
524
+
525
+ <li class="md-nav__item">
526
+ <a href="../advanced/interactive_commands/" title="Interactive Commands" class="md-nav__link">
527
+ Interactive Commands
528
+ </a>
529
+ </li>
530
+
531
+
508
532
  </ul>
509
533
  </nav>
510
534
  </li>
@@ -596,8 +620,8 @@
596
620
 
597
621
 
598
622
 
599
- <a href="./" title="$ whoami" class="md-nav__link md-nav__link--active">
600
- $ whoami
623
+ <a href="./" title="whoami" class="md-nav__link md-nav__link--active">
624
+ whoami
601
625
  </a>
602
626
 
603
627
  </li>
@@ -709,9 +733,9 @@
709
733
 
710
734
  </div>
711
735
 
712
- <script src="../assets/javascripts/application.a59e2a89.js"></script>
736
+ <script src="../assets/javascripts/application.583bbe55.js"></script>
713
737
 
714
- <script>app.initialize({version:"0.17.5",url:{base:".."}})</script>
738
+ <script>app.initialize({version:"1.0.3",url:{base:".."}})</script>
715
739
 
716
740
 
717
741
 
data/exe/rbcli CHANGED
@@ -58,8 +58,8 @@ This is free software, and you are welcome to redistribute it
58
58
  under certain conditions.
59
59
  If you wish to release this library as part of commercial software,
60
60
  please contact andrew@blacknex.us.
61
- Type `rbcli license --full' to show the license text.
62
61
  EOF
62
+ puts "Type `rbcli license --full' to show the license text." unless params[:full]
63
63
  end
64
64
  end
65
65
 
@@ -62,7 +62,7 @@ class Rbcli::Command
62
62
  def self.remote_permitted?; @data[:remote_permitted]; end
63
63
  def self.config_defaults filename; Rbcli::Config::add_defaults(filename); end
64
64
  def self.config_default *params; Rbcli::Config::add_default *params; end
65
- def self.parameter name, description, short: nil, type: :boolean, default: nil, required: false, permitted: nil
65
+ def self.parameter name, description, short: nil, type: :boolean, default: nil, required: false, permitted: nil, prompt: nil
66
66
  default ||= false if (type == :boolean || type == :bool || type == :flag)
67
67
  @data[:paramlist][name.to_sym] = {
68
68
  description: description,
@@ -70,7 +70,8 @@ class Rbcli::Command
70
70
  default: default,
71
71
  required: required,
72
72
  permitted: permitted,
73
- short: short
73
+ short: short,
74
+ prompt: prompt
74
75
  }
75
76
  end
76
77
 
@@ -162,6 +163,31 @@ Command-specific Parameters:
162
163
  end if params.is_a? Hash
163
164
  end
164
165
  optx[:args] = ARGV
166
+ params.each do |name, data|
167
+ given_symbol = (name.to_s + '_given').to_sym
168
+ if data[:prompt] and not (optx.key?(given_symbol) and optx[given_symbol])
169
+ if data[:type] == :bool or data[:type] == :boolean or data[:type] == :flag
170
+ answer = 'INVALID_STRING'
171
+ while answer.downcase != 'y' and answer.downcase != 'n' and answer.downcase != ''
172
+ print 'Invalid entry. '.red unless answer == 'INVALID_STRING'
173
+ print data[:prompt] + " (#{(data[:default]) ? 'Y/n' : 'y/N'}): "
174
+ answer = gets.chomp
175
+ if answer.downcase == 'y'
176
+ optx[name] = true
177
+ elsif answer.downcase == 'n'
178
+ optx[name] = false
179
+ elsif answer.downcase == ''
180
+ optx[name] = data[:default]
181
+ end
182
+ end
183
+ elsif data[:type] == :string
184
+ print data[:prompt] + " (default: \"#{data[:default]}\"): "
185
+ answer = gets.chomp
186
+ answer = data[:default] if answer.empty?
187
+ optx[name] = answer
188
+ end
189
+ end
190
+ end
165
191
  optx
166
192
  end
167
193