cliutils 1.2.5 → 1.2.6

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00fd89b1aa359ab732d3a436b51aa26d515f0ef3
4
- data.tar.gz: 1aa1aa258ca1a09fe55e8fdf9c2d336e54b8ba9b
3
+ metadata.gz: 069c2e2c3141bb0295825c6a7ddcbaa9e5fce3b5
4
+ data.tar.gz: bd67db92f1833ecec791f0d58974687d2e5dae5a
5
5
  SHA512:
6
- metadata.gz: 607089b0e6bce175030d6304b411c4e58947c3573653b90f55247d54a6f6353c2896946fa99fe844cb8e87afd8aecc00e540c392d50b5a17df5c72a34ea10544
7
- data.tar.gz: e763d764171825dc2391413c7f7a822ccfbe8af1ef219401539aa6313bc70c3a321667640163386b281f6d3e04e829425ca227b73267fbb4511fabd2d053ceb7
6
+ metadata.gz: d2a266ed437b59e7a41733ac86659f75def0aebb7dda0566530d2f7debd22ba7573acb6c4376cc7447a8a98cba505d96af9c452bb6cc1da6ebed6cf2e63b9c70
7
+ data.tar.gz: d5860547ff62f94989e8de94fa9502295b1f4439db0b8e9eac2638fe7d8beb38d9c173eeea7697935c4898bf975c0d261651383d35eeee4384c2f76875472d96
data/HISTORY.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 1.2.6 (2014-04-08)
2
+
3
+ * More documentation
4
+ * Small refactorings
5
+
1
6
  # 1.2.5 (2014-04-07)
2
7
 
3
8
  * Added Configurator version checking
data/README.md CHANGED
@@ -54,7 +54,7 @@ Note that although this README.md is extensive, it may not cover all methods. Ch
54
54
  CLIUtils offers:
55
55
 
56
56
  * [PrettyIO](#prettyio): nicer-looking CLI messages
57
- * [Messenging](#messenging): a full-featured Logger
57
+ * [Messenging](#messenging): a system to display nicely-formatted messages to one or more tagets
58
58
  * [Configuration](#configuration): a app configuration manager
59
59
  * [Prefs](#prefs): a preferences prompter and manager
60
60
 
@@ -73,7 +73,7 @@ puts 'A sample string'.red
73
73
  ```
74
74
  ![alt text](https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prettyio-red-text.png "Colored Text via PrettyIO")
75
75
 
76
- PrettyIO gives you utility methods for the common ANSI color codes:
76
+ You get a stable of utility methods for the common ANSI color codes:
77
77
 
78
78
  ```ruby
79
79
  String.blue
@@ -95,7 +95,7 @@ puts 'A sample string'.colorize('35;42')
95
95
  Naturally, memorizing the ANSI color scheme is a pain, so PrettyIO gives you a convenient method to look up these color combinations:
96
96
 
97
97
  ```ruby
98
- CLIUtils::PrettyIO.color_chart
98
+ color_chart
99
99
  ```
100
100
  ![alt text](https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prettyio-color-chart.png "PrettyIO Color Chart")
101
101
 
@@ -178,6 +178,7 @@ Often, it's desirable to log messages as they appear to your user. `messenging`
178
178
  For instance, let's say you wanted to log a few messages to both your user's STDOUT and to `file.txt`:
179
179
 
180
180
  ```Ruby
181
+ # By default, messenger only outputs to STDOUT.
181
182
  messenger.info('This should only appear in STDOUT.')
182
183
 
183
184
  # messenger.attach takes a Hash of string/symbol keys
@@ -230,6 +231,7 @@ If there's data in there, it will be consumed into the `configurator`'s `data` p
230
231
  Sections are top levels of the configuration file and are managed via the `configurator` object:
231
232
 
232
233
  ```Ruby
234
+ configuration.add_section(:app_data)
233
235
  configuration.add_section(:user_data)
234
236
  configuration.add_section(:program_data)
235
237
  configuration.delete_section(:program_data)
@@ -257,22 +259,42 @@ Note that all your keys are converted to strings before saving (and, likewise, a
257
259
 
258
260
  ```YAML
259
261
  ---
262
+ app_data:
260
263
  user_data:
261
264
  username: bob
262
265
  ```
263
266
 
264
267
  ### Checking Configuration Versions
265
268
 
266
- Often, you'll want to check the user's current version of your app against the last version that required some sort of configuration change. `configurator` allows for this via its `compare_version` method:
269
+ Often, you'll want to check the user's current version of your app against the last version that required some sort of configuration change. `configurator` allows for this via its `compare_version` method.
270
+
271
+ Assume you have a config file that looks like this:
272
+
273
+ ```YAML
274
+ ---
275
+ app_data:
276
+ # The current version of the app
277
+ APP_VERSION: 1.0.0
278
+
279
+ # The last version that required
280
+ # a configuration change
281
+ NEWEST_CONFIG_VERSION: 1.8.0
282
+
283
+ # ...other keys...
284
+ ```
285
+
286
+ ...this will initiate a version check (and give you the option to do something with that information):
267
287
 
268
288
  ```Ruby
269
289
  # Tell your configurator the name of the key that
270
290
  # stores the app's version in its configuration file.
291
+ # NOTE that you don't have to specify the section.
271
292
  configuration.cur_version_key = :APP_VERSION
272
293
 
273
294
  # Tell your configurator the name of the key that
274
295
  # stores the last version that needed a configuration
275
296
  # change.
297
+ # NOTE that you don't have to specify the section.
276
298
  configuration.last_version_key = :NEWEST_CONFIG_VERSION
277
299
 
278
300
  # Run the check and use a block to get
@@ -325,6 +347,63 @@ Assuming the above, `Prefs` is instantiated like so:
325
347
  prefs = CLIUtils::Prefs.new('path/to/yaml/file')
326
348
  ```
327
349
 
350
+ `Prefs` can also be instantiated via a Hash or an array of prompts; the overall schema remains the same:
351
+
352
+ ```Ruby
353
+ # Instantiation through a Hash
354
+ h = {
355
+ prompts: [
356
+ {
357
+ prompt: 'What is your name?',
358
+ default: 'Bob Cobb',
359
+ config_key: :name,
360
+ config_section: :personal_info
361
+ },
362
+ {
363
+ prompt: 'What is your age?',
364
+ default: '45',
365
+ config_key: :age,
366
+ config_section: :personal_info
367
+ },
368
+ {
369
+ prompt: 'Batman or Superman?',
370
+ default: 'Batman',
371
+ config_key: :superhero,
372
+ config_section: :personal_info
373
+ }
374
+ ]
375
+ }
376
+
377
+ prefs = CLIUtils::Prefs.new(h)
378
+
379
+ # Instantiation through an Array
380
+
381
+ a = [
382
+ {
383
+ prompt: 'What is your name?',
384
+ default: 'Bob Cobb',
385
+ config_key: :name,
386
+ config_section: :personal_info
387
+ },
388
+ {
389
+ prompt: 'What is your age?',
390
+ default: '45',
391
+ config_key: :age,
392
+ config_section: :personal_info
393
+ },
394
+ {
395
+ prompt: 'Batman or Superman?',
396
+ default: 'Batman',
397
+ config_key: :superhero,
398
+ config_section: :personal_info
399
+ }
400
+ ]
401
+
402
+ prefs = CLIUtils::Prefs.new(a)
403
+ ```
404
+
405
+ ### Prompting the User
406
+
328
407
  With valid preferences loaded, simply use `ask` to begin prompting your user:
329
408
 
330
409
  ```Ruby
@@ -334,7 +413,7 @@ prefs.ask
334
413
 
335
414
  ### Prerequisites
336
415
 
337
- Sometimes, you need to answer certain prompts before others become relevant. `Prefs` allows this via a `prereqs` key, which can contain multiple already-answered key/value pairs to check for. For instance, imagine we want to drill into a user's superhero preference a bit further:
416
+ Sometimes, you need to answer certain prompts before others become relevant. `Prefs` allows this via a `prereqs` key, which can contain multiple already-answered key/value pairs to check for. For instance, imagine we want to drill into a user's superhero preference a bit further; using our previously-used YAML prefs file:
338
417
 
339
418
  ```YAML
340
419
  prompts:
@@ -356,6 +435,14 @@ prompts:
356
435
  prereqs:
357
436
  - config_key: superhero
358
437
  config_value: Superman
438
+ - prompt: Why don't you have a clue?
439
+ config_key: no_clue
440
+ config_section: personal_info
441
+ prereqs:
442
+ - config_key: superhero
443
+ config_value: Superman
444
+ - config_key: superman_answer
445
+ config_value: No clue
359
446
  ```
360
447
 
361
448
  `prereqs` checks for already-answered preferences (based on a Configurator key and value); assuming everything checks out, the subsequent preferences are collected:
@@ -365,7 +452,7 @@ prefs.ask
365
452
  ```
366
453
  ![alt text](https://raw.githubusercontent.com/bachya/cli-utils/master/res/readme-images/prefs-ask-prereqs.png "Prerequisities")
367
454
 
368
- Be careful tht you don't define any circular prerequisities (e.g., A requires B and B requires A). In that case, neither preference will be collected.
455
+ Be careful that you don't define any circular prerequisities (e.g., A requires B and B requires A). In that case, both preferences will be ignored by `Prefs.ask`.
369
456
 
370
457
  ### Options
371
458
 
@@ -392,6 +479,14 @@ prompts:
392
479
  prereqs:
393
480
  - config_key: superhero
394
481
  config_value: Superman
482
+ - prompt: Why don't you have a clue?
483
+ config_key: no_clue
484
+ config_section: personal_info
485
+ prereqs:
486
+ - config_key: superhero
487
+ config_value: Superman
488
+ - config_key: superman_answer
489
+ config_value: No clue
395
490
  ```
396
491
 
397
492
  Once in place:
@@ -446,7 +541,7 @@ prompts:
446
541
  - local_filepath
447
542
  ```
448
543
 
449
- The `local_filepath` behavior will expand the user's answer as a filepath (e.g., `~/.ssh` will get saved as `/Users/bachya/.ssh/`).
544
+ The `local_filepath` behavior will expand the user's answer as a filepath (e.g., `~/.ssh` will get saved as `/Users/bob/.ssh/`).
450
545
 
451
546
  `Prefs` currently supports these behaviors:
452
547
 
@@ -492,7 +587,7 @@ To report bugs with or suggest features/changes for CLIUtils, please use the [Is
492
587
 
493
588
  Contributions are welcome and encouraged. To contribute:
494
589
 
495
- 1. Fork it ( http://github.com/bachya/cliutils/fork )
590
+ 1. Fork it (http://github.com/bachya/cliutils/fork)
496
591
  2. Create your feature branch (`git checkout -b my-new-feature`)
497
592
  3. Commit your changes (`git commit -am 'Add some feature'`)
498
593
  4. Push to the branch (`git push origin my-new-feature`)
@@ -1,5 +1,5 @@
1
1
  # Stores constants to use.
2
2
  module CLIUtils
3
3
  # The current version of the gem
4
- VERSION = '1.2.5'
4
+ VERSION = '1.2.6'
5
5
  end
@@ -101,7 +101,7 @@ module CLIUtils
101
101
  ret = true
102
102
  if @options
103
103
  unless @options.include?(text)
104
- @last_error_message = "Invalid option chosen (\"#{ text }\");"\
104
+ @last_error_message = "Invalid option chosen (\"#{ text }\"); " \
105
105
  "valid options are: #{ options }"
106
106
  ret = false
107
107
  end
@@ -35,7 +35,7 @@ module CLIUtils
35
35
  # Displays a chart of all the possible ANSI foreground
36
36
  # and background color combinations.
37
37
  # @return [void]
38
- def self.color_chart
38
+ def color_chart
39
39
  [0, 1, 4, 5, 7].each do |attr|
40
40
  puts '----------------------------------------------------------------'
41
41
  puts "ESC[#{attr};Foreground;Background"
@@ -3,6 +3,7 @@ prompts:
3
3
  default: Batman
4
4
  config_key: superhero
5
5
  config_section: personal_info
6
+ options: ['Batman', 'Superman']
6
7
  - prompt: Do you feel smart for preferring Batman?
7
8
  default: Y
8
9
  config_key: batman_answer
@@ -16,4 +17,12 @@ prompts:
16
17
  config_section: personal_info
17
18
  prereqs:
18
19
  - config_key: superhero
19
- config_value: Superman
20
+ config_value: Superman
21
+ - prompt: Why don't you have a clue?
22
+ config_key: no_clue
23
+ config_section: personal_info
24
+ prereqs:
25
+ - config_key: superhero
26
+ config_value: Superman
27
+ - config_key: superman_answer
28
+ config_value: No clue
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cliutils
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Bach