cliutils 1.0.7 → 1.1.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/HISTORY.md +7 -0
- data/README.md +9 -1
- data/lib/cliutils/configurator.rb +2 -2
- data/lib/cliutils/prefs.rb +21 -6
- data/lib/cliutils/pretty-io.rb +1 -2
- data/lib/cliutils/version.rb +1 -1
- data/test/test_files/prefstest.yaml +5 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1bba7fa0a39d1e55ba1a84a6ffadb7ebd649d2a0
|
4
|
+
data.tar.gz: b4ba62f707e30bc694310c612b738458739cf139
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a64a0501b9af9eec35d8d80d6e2ff25926e653705e3ddfd446345cc1614f55eb3d6da5e8351182ea069eaa88f8099e50586682d5c3bd0a085b324e06125166ca
|
7
|
+
data.tar.gz: 1aa47c68d25a0981f8f08ec10d9a99ba5cce648f74d155a51181c33034eb683a289d7937d1e5106b3d594fcd6b9a3661a11d5f901749a479a7b55e53601d5347
|
data/Gemfile.lock
CHANGED
data/HISTORY.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
# 1.1.0 (2014-04-01)
|
2
|
+
|
3
|
+
* Added notice of valid options in Prefs
|
4
|
+
* Added ability for Prefs to use defaults from Configuration values
|
5
|
+
* Increased default wrapping to 80 characters
|
6
|
+
* Fixed a bug in which Prefs would not convert answer keys to symbols
|
7
|
+
|
1
8
|
# 1.0.7 (2014-03-30)
|
2
9
|
|
3
10
|
* Modified Messenging targets to be a Hash for easier lookup/deletion
|
data/README.md
CHANGED
@@ -178,7 +178,7 @@ For instance, let's say you wanted to log a few messages to both your user's STD
|
|
178
178
|
```Ruby
|
179
179
|
messenger.info('This should only appear in STDOUT.')
|
180
180
|
|
181
|
-
#messenger.attach takes a Hash of string/symbol keys
|
181
|
+
# messenger.attach takes a Hash of string/symbol keys
|
182
182
|
# and Logger values (so you can refer to them later on).
|
183
183
|
messenger.attach(MY\_FILE\_LOGGER: Logger.new('file.txt'))
|
184
184
|
|
@@ -328,6 +328,14 @@ configuration.ingest(prefs)
|
|
328
328
|
configuration.save
|
329
329
|
```
|
330
330
|
|
331
|
+
Note that you can also initialize a `Prefs` object with a Configurator:
|
332
|
+
|
333
|
+
```Ruby
|
334
|
+
prefs = CLIUtils::Prefs.new('path/to/yaml/file', my_configurator)
|
335
|
+
```
|
336
|
+
|
337
|
+
In this case, `Prefs` will look to see if any values already exist for a specific prompt; if so, that value will be used as the default, rather than the default specified in the YAML.
|
338
|
+
|
331
339
|
### Why a Prefs Class?
|
332
340
|
|
333
341
|
I've written apps that need to request user input at various times for multiple different things; as such, I thought it'd be easier to have those scenarios chunked up. You can always wrap `Prefs` into a module singleton if you wish.
|
@@ -57,8 +57,8 @@ module CLIUtils
|
|
57
57
|
def ingest_prefs(prefs)
|
58
58
|
fail 'Invaid Prefs class' if !prefs.kind_of?(Prefs) || prefs.answers.nil?
|
59
59
|
prefs.answers.each do |p|
|
60
|
-
add_section(p[:section]) unless @data.key?(p[:section])
|
61
|
-
@data[p[:section]].merge!(p[:key] => p[:answer])
|
60
|
+
add_section(p[:section].to_sym) unless @data.key?(p[:section].to_sym)
|
61
|
+
@data[p[:section].to_sym].merge!(p[:key].to_sym => p[:answer])
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
data/lib/cliutils/prefs.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'cliutils/pretty-io'
|
2
|
+
require 'cliutils/configuration'
|
2
3
|
|
3
4
|
module CLIUtils
|
4
5
|
# Engine to derive preferences from a YAML file, deliver
|
@@ -6,12 +7,16 @@ module CLIUtils
|
|
6
7
|
class Prefs
|
7
8
|
include PrettyIO
|
8
9
|
# Stores answers to prompt questions.
|
9
|
-
# @return [
|
10
|
+
# @return [Array]
|
10
11
|
attr_reader :answers
|
11
12
|
|
12
13
|
# Stores the filepath (if it exists) to the prefs file.
|
13
14
|
# @return [String]
|
14
15
|
attr_reader :config_path
|
16
|
+
|
17
|
+
# Stores a Configurator instance.
|
18
|
+
# @return [Configurator]
|
19
|
+
attr_reader :configurator
|
15
20
|
|
16
21
|
# Stores answers to prompt questions.
|
17
22
|
# @return [Hash]
|
@@ -19,9 +24,11 @@ module CLIUtils
|
|
19
24
|
|
20
25
|
# Reads prompt data from and stores it.
|
21
26
|
# @param [<String, Hash, Array>] data Filepath to YAML, Hash, or Array
|
27
|
+
# @param [Configurator] configurator The configurator to take default values from
|
22
28
|
# @return [void]
|
23
|
-
def initialize(data)
|
29
|
+
def initialize(data, configurator = nil)
|
24
30
|
@answers = []
|
31
|
+
@configurator = configurator
|
25
32
|
@prompts = {}
|
26
33
|
|
27
34
|
case data
|
@@ -71,20 +78,28 @@ module CLIUtils
|
|
71
78
|
# @param [Hash] p The prompt
|
72
79
|
# @return [void]
|
73
80
|
def _deliver_prompt(p)
|
81
|
+
default = p[:default]
|
82
|
+
|
83
|
+
unless @configurator.nil?
|
84
|
+
unless @configurator.data[p[:section].to_sym].nil?
|
85
|
+
config_val = @configurator.data[p[:section].to_sym][p[:key].to_sym]
|
86
|
+
default = config_val unless config_val.nil?
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
74
90
|
if p[:options].nil?
|
75
|
-
pref = prompt(p[:prompt],
|
91
|
+
pref = prompt(p[:prompt], default)
|
76
92
|
else
|
77
93
|
valid_option_chosen = false
|
78
94
|
until valid_option_chosen
|
79
|
-
pref = prompt(p[:prompt],
|
95
|
+
pref = prompt(p[:prompt], default)
|
80
96
|
if p[:options].include?(pref)
|
81
97
|
valid_option_chosen = true
|
82
98
|
else
|
83
|
-
error("Invalid option chosen
|
99
|
+
error("Invalid option chosen (\"#{ pref }\"); valid options are: #{ p[:options] }")
|
84
100
|
end
|
85
101
|
end
|
86
102
|
end
|
87
|
-
|
88
103
|
p[:answer] = pref
|
89
104
|
@answers << p
|
90
105
|
end
|
data/lib/cliutils/pretty-io.rb
CHANGED
@@ -10,7 +10,6 @@ module CLIUtils
|
|
10
10
|
# CLIMessenger Module
|
11
11
|
# Outputs color-coordinated messages to a CLI
|
12
12
|
module PrettyIO
|
13
|
-
|
14
13
|
class << self
|
15
14
|
# Determines whether wrapping should be enabled.
|
16
15
|
# @return [Boolean]
|
@@ -22,7 +21,7 @@ module CLIUtils
|
|
22
21
|
end
|
23
22
|
|
24
23
|
self.wrap = true
|
25
|
-
self.wrap_char_limit =
|
24
|
+
self.wrap_char_limit = 80
|
26
25
|
|
27
26
|
# Hook that triggers when this module is included.
|
28
27
|
# @param [Object] k The includer object
|
data/lib/cliutils/version.rb
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
prompts:
|
2
|
-
- prompt: What is the hostname of your DD-WRT router?
|
2
|
+
- prompt: What is the local hostname of your DD-WRT router?
|
3
3
|
default: 192.168.1.1
|
4
|
-
key:
|
4
|
+
key: local_hostname
|
5
|
+
section: ssh_info
|
6
|
+
- prompt: What is the remote hostname of your DD-WRT router?
|
7
|
+
key: remote_hostname
|
5
8
|
section: ssh_info
|
6
9
|
- prompt: What is the SSH username of your DD-WRT router?
|
7
10
|
default: root
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cliutils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Bach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|