cliutils 2.2.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -3
  3. data/HISTORY.md +5 -0
  4. data/README.md +35 -16
  5. data/Rakefile +1 -8
  6. data/lib/cliutils/configuration.rb +3 -7
  7. data/lib/cliutils/constants.rb +1 -1
  8. data/lib/cliutils/messaging.rb +7 -5
  9. data/lib/cliutils/messenger.rb +11 -2
  10. data/lib/cliutils/prefs.rb +6 -6
  11. data/spec/configuration_spec.rb +18 -11
  12. data/spec/messaging_spec.rb +6 -0
  13. data/{res → support}/readme-images/actions-1.png +0 -0
  14. data/{res → support}/readme-images/actions-2.png +0 -0
  15. data/{res → support}/readme-images/actions-3.png +0 -0
  16. data/{res → support}/readme-images/messenger-types-1.png +0 -0
  17. data/{res → support}/readme-images/messenger-warn.png +0 -0
  18. data/{res → support}/readme-images/multi-logger.png +0 -0
  19. data/{res → support}/readme-images/prefs-ask-behaviors.png +0 -0
  20. data/{res → support}/readme-images/prefs-ask-options.png +0 -0
  21. data/{res → support}/readme-images/prefs-ask-prereqs.png +0 -0
  22. data/{res → support}/readme-images/prefs-ask-validators.png +0 -0
  23. data/{res → support}/readme-images/prefs-ask.png +0 -0
  24. data/{res → support}/readme-images/prettyio-color-chart.png +0 -0
  25. data/{res → support}/readme-images/prettyio-gnarly-text.png +0 -0
  26. data/{res → support}/readme-images/prettyio-red-text.png +0 -0
  27. data/{res → support}/readme-images/prompting.png +0 -0
  28. data/{res → support}/readme-images/wrapping.png +0 -0
  29. metadata +17 -23
  30. data/test/pref_test.rb +0 -81
  31. data/test/prefs_test.rb +0 -164
  32. data/test/test_helper.rb +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 31b393aa656e5f0af3f63b272675069a58441286
4
- data.tar.gz: fd649fe5090c1112c810e1b12b09d0120b43ac71
3
+ metadata.gz: b754284592bdb559d6b8ed5715d7d23844e77198
4
+ data.tar.gz: 71596185e2543a8c8896926d05f444fe041c5510
5
5
  SHA512:
6
- metadata.gz: 0f042f15114fb441f842918907ce8be6ff18a26e51b921e77fe749b59818411d66bcbd94c6194b4aca23a27b5474970ff35ee32e203ccb0ed6b55831f9266383
7
- data.tar.gz: a79310fbc362ba89a2b538c60c523314dbc17b22463f630763f28057e0e05e34632536eecc514a98403a22ea5c4dd1bd6a7a58640284f765a7106f491482245a
6
+ metadata.gz: d9171c3888852dec708db91025b5be0804328945a624964540985f6234f197e73ed1bec1df929e28dcb0c68ed1deab6fd7bd9f11a14fd0bba10cfb2694de73c7
7
+ data.tar.gz: bdbc9330596c23680f26081b9329f86df278bbdbedf206805a46d298b40497e9ed1d531b940b04c05e4464339689fea9a359b08160cecf97e644dc701c0b2d72
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.1.1
4
- - 2.1.0
5
- - 2.0
3
+ - 2.1
4
+ - 2.0.0
6
5
  - 1.9.3
7
6
  - rbx
data/HISTORY.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 2.2.1 (2014-05-04)
2
+
3
+ * Easier Configuration path setting
4
+ * Spec to test Configuration and Messaging consistency
5
+
1
6
  # 2.2.0 (2014-04-26)
2
7
 
3
8
  * More robust `Messaging` that allows for logging of prompts
data/README.md CHANGED
@@ -4,11 +4,13 @@ CLIUtils
4
4
  [![Gem Version](https://badge.fury.io/rb/cliutils.svg)](http://badge.fury.io/rb/cliutils)
5
5
  [![Coverage Status](http://img.shields.io/coveralls/bachya/cliutils/master.svg)](https://coveralls.io/r/bachya/cliutils?branch=master)
6
6
 
7
- CLIUtils is a library of functionality designed to alleviate common tasks and headaches when developing command-line (CLI) apps in Ruby.
7
+ CLIUtils is a library of functionality designed to alleviate common tasks and
8
+ headaches when developing command-line (CLI) apps in Ruby.
8
9
 
9
10
  # *Updating from 1.x.x to 2.0.0?*
10
11
 
11
- The big difference is schema changes for Validators, Behaviors, and Pre-Post Actions. Make sure you read the [wiki](https://github.com/bachya/cliutils/wiki "CLIUtils Wiki").
12
+ The big difference is schema changes for Validators, Behaviors, and Pre-Post
13
+ Actions. Make sure you read the [wiki](https://github.com/bachya/cliutils/wiki "CLIUtils Wiki").
12
14
 
13
15
  # Why?
14
16
 
@@ -22,7 +24,7 @@ It's fairly simple:
22
24
 
23
25
  CLIUtils offers:
24
26
 
25
- * **PrettyIO:** nicer-looking CLI messages
27
+ * **PrettyIO:** some basic CLI sugar
26
28
  * **Messaging:** a system to display nicely-formatted messages to one or more tagets
27
29
  * **Configuration:** a app configuration manager
28
30
  * **Prefs:** a preferences prompter and manager
@@ -40,7 +42,7 @@ CLIUtils is certified against the following:
40
42
  * Ruby 2.1.0
41
43
  * Ruby 2.0.0
42
44
  * Ruby 1.9.3
43
- * Latest RBX
45
+ * rbx
44
46
 
45
47
  # Installation
46
48
 
@@ -76,17 +78,23 @@ include CLIUtils
76
78
 
77
79
  # Can I use it with...?
78
80
 
79
- I often get asked how nicely CLIUtils plays with other Ruby-based CLI libraries (like Dave Copeland's excellent [Methadone](https://github.com/davetron5000/methadone "Methadone") and [GLI](https://github.com/davetron5000/gli "GLI")). Answer: they play very nicely. I use CLIUtils in [Sifttter Redux](https://github.com/bachya/Sifttter-Redux "Sifttter Redux") (which is built on GLI) and [ExpandSync](https://github.com/bachya/ExpandSync "ExpandSync") (which is built on Methadone).
80
-
81
- # Known Issues
82
-
83
- * LoggerDelegator doesn't currently know what to do with `messenger.prompt`, so you'll have to manually log a `debug` message if you want that information logged.
81
+ I often get asked how nicely CLIUtils plays with other Ruby-based CLI
82
+ libraries (like Dave Copeland's excellent
83
+ [Methadone](https://github.com/davetron5000/methadone "Methadone") and
84
+ [GLI](https://github.com/davetron5000/gli "GLI")). Answer: they play very
85
+ nicely. I use CLIUtils in
86
+ [Sifttter Redux](https://github.com/bachya/Sifttter-Redux "Sifttter Redux")
87
+ (which is built on GLI) and
88
+ [ExpandSync](https://github.com/bachya/ExpandSync "ExpandSync") (which is built
89
+ on Methadone).
84
90
 
85
91
  # Bugs and Feature Requests
86
92
 
87
- To view my current roadmap and objectives, check out the [Trello board](https://trello.com/b/qXs7Yeir/cliutils "CLIUtils on Trello").
93
+ To view my current roadmap and objectives, check out the
94
+ [Trello board](https://trello.com/b/qXs7Yeir/cliutils "CLIUtils on Trello").
88
95
 
89
- To report bugs with or suggest features/changes for CLIUtils, please use the [Issues Page](http://github.com/bachya/cliutils/issues).
96
+ To report bugs with or suggest features/changes for CLIUtils, please use
97
+ the [Issues Page](http://github.com/bachya/cliutils/issues).
90
98
 
91
99
  # Contributing
92
100
 
@@ -105,8 +113,19 @@ Contributions are welcome and encouraged. To contribute:
105
113
 
106
114
  Copyright © 2014 Aaron Bach <bachya1208@gmail.com>
107
115
 
108
- Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
109
-
110
- The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
111
-
112
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
116
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
117
+ this software and associated documentation files (the 'Software'), to deal in
118
+ the Software without restriction, including without limitation the rights to
119
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
120
+ the Software, and to permit persons to whom the Software is furnished to do so,
121
+ subject to the following conditions:
122
+
123
+ The above copyright notice and this permission notice shall be included in all
124
+ copies or substantial portions of the Software.
125
+
126
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
127
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
128
+ FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
129
+ COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
130
+ IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
131
+ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile CHANGED
@@ -13,13 +13,6 @@ desc 'Create YARD documentation'
13
13
  YARD::Rake::YardocTask.new do |t|
14
14
  end
15
15
 
16
- require 'rake/testtask'
17
- desc 'Run unit tests'
18
- Rake::TestTask.new do |t|
19
- t.libs << "test"
20
- t.test_files = FileList['test/*_test.rb', 'test/**/*_test.rb']
21
- end
22
-
23
16
  require 'rspec/core/rake_task'
24
17
  desc "Run the specs."
25
18
  RSpec::Core::RakeTask.new do |t|
@@ -48,4 +41,4 @@ task :build do
48
41
  FileUtils.mv("./cliutils-#{version}.gem", "pkg")
49
42
  end
50
43
 
51
- task :default => [:spec] #:yard
44
+ task :default => [:spec, :yard]
@@ -5,6 +5,8 @@ module CLIUtils
5
5
  # Manages any configuration values and the flat YAML file
6
6
  # into which they get stored.
7
7
  module Configuration
8
+ extend self
9
+
8
10
  # Allows easy access to Logger levels.
9
11
  LOG_LEVELS = {
10
12
  'DEBUG' => Logger::DEBUG,
@@ -16,13 +18,6 @@ module CLIUtils
16
18
 
17
19
  @@configuration = nil
18
20
 
19
- # Hook that triggers when this module is included.
20
- # @param [Object] k The includer object
21
- # @return [void]
22
- def self.included(k)
23
- k.extend(self)
24
- end
25
-
26
21
  # Singleton method to return (or initialize, if needed)
27
22
  # a Configurator.
28
23
  # @return [Configurator]
@@ -42,5 +37,6 @@ module CLIUtils
42
37
  def load_configuration(path)
43
38
  @@configuration = Configurator.new(path)
44
39
  end
40
+ alias_method :filepath=, :load_configuration
45
41
  end
46
42
  end
@@ -8,5 +8,5 @@ module CLIUtils
8
8
  SUMMARY = 'Sugary goodness for Ruby CLI apps.'
9
9
 
10
10
  # The current version of the gem
11
- VERSION = '2.2.0'
11
+ VERSION = '2.2.1'
12
12
  end
@@ -1,14 +1,16 @@
1
1
  require 'cliutils/messenger'
2
2
 
3
3
  module CLIUtils
4
- # CLIMessenger Module
5
- # Outputs coordinated messages to a variety of targets.
4
+ # Allows access to a single, unified instances of
5
+ # CLUtils::Messenger.
6
6
  module Messaging
7
+ extend self
8
+
7
9
  # Singleton method to return (or initialize, if needed)
8
- # a LoggerDelegator.
9
- # @return [LoggerDelegator]
10
+ # a CLIUtils::Messenger.
11
+ # @return [Messenger]
10
12
  def messenger
11
- @@messenger ||= CLIUtils::Messenger.new
13
+ @messenger ||= CLIUtils::Messenger.new
12
14
  end
13
15
  end
14
16
  end
@@ -2,6 +2,8 @@ require 'cliutils/pretty_io'
2
2
  require 'readline'
3
3
 
4
4
  module CLIUtils
5
+ # Allows for messages to be sent to STDOUT, as well
6
+ # as any number of Logger instances.
5
7
  class Messenger
6
8
  include PrettyIO
7
9
 
@@ -17,8 +19,8 @@ module CLIUtils
17
19
  @targets.merge!(target)
18
20
  end
19
21
 
20
- # Empty method so that Messaging doesn't freak out when passed a debug
21
- # message.
22
+ # Outputs a debug message; since this shouldn't appear in STDOUT,
23
+ # only send it to the Logger targets.
22
24
  # @return [void]
23
25
  def debug(m)
24
26
  @targets.each { |_, t| t.debug(m) }
@@ -50,10 +52,17 @@ module CLIUtils
50
52
  @targets.each { |_, t| t.info(m) }
51
53
  end
52
54
 
55
+ # Deprecated method to show info messages around
56
+ # a block of actions
57
+ # @param [Array] params
58
+ # @return [void]
53
59
  def info_block(*params)
54
60
  warn('As of 2.2.0, `info_block` is deprecated and nonfunctioning.')
55
61
  end
56
62
 
63
+ # Initializes a new Messenger with an optional
64
+ # Hash of targets.
65
+ # @param [Hash] targets Logger targets
57
66
  def initialize(targets = {})
58
67
  @targets = targets
59
68
  end
@@ -92,7 +92,7 @@ module CLIUtils
92
92
  # Deregister an action based on the symbol it was
93
93
  # stored under.
94
94
  # @param [Symbol] symbol The symbol to remove
95
- # @remove [void]
95
+ # @return [void]
96
96
  def self.deregister_action(symbol)
97
97
  _deregister_asset(symbol, Pref::ASSET_TYPE_ACTION)
98
98
  end
@@ -100,7 +100,7 @@ module CLIUtils
100
100
  # Deregister a behavior based on the symbol it was
101
101
  # stored under.
102
102
  # @param [Symbol] symbol The symbol to remove
103
- # @remove [void]
103
+ # @return [void]
104
104
  def self.deregister_behavior(symbol)
105
105
  _deregister_asset(symbol, Pref::ASSET_TYPE_BEHAVIOR)
106
106
  end
@@ -108,28 +108,28 @@ module CLIUtils
108
108
  # Deregister a validator based on the symbol it was
109
109
  # stored under.
110
110
  # @param [Symbol] symbol The symbol to remove
111
- # @remove [void]
111
+ # @return [void]
112
112
  def self.deregister_validator(symbol)
113
113
  _deregister_asset(symbol, Pref::ASSET_TYPE_VALIDATOR)
114
114
  end
115
115
 
116
116
  # Register an action.
117
117
  # @param [String] path The filepath of the action
118
- # @remove [void]
118
+ # @return [void]
119
119
  def self.register_action(path)
120
120
  self._register_asset(path, Pref::ASSET_TYPE_ACTION)
121
121
  end
122
122
 
123
123
  # Register a behavior.
124
124
  # @param [String] path The filepath of the behavior
125
- # @remove [void]
125
+ # @return [void]
126
126
  def self.register_behavior(path)
127
127
  _register_asset(path, Pref::ASSET_TYPE_BEHAVIOR)
128
128
  end
129
129
 
130
130
  # Register a validator.
131
131
  # @param [String] path The filepath of the validator
132
- # @remove [void]
132
+ # @return [void]
133
133
  def self.register_validator(path)
134
134
  _register_asset(path, Pref::ASSET_TYPE_VALIDATOR)
135
135
  end
@@ -6,12 +6,28 @@ require 'cliutils/configurator'
6
6
  describe CLIUtils::Configuration do
7
7
  include CLIUtils::Configuration
8
8
 
9
+ let(:config_path_new) { File.expand_path('support/configuration2.yaml') }
10
+ let(:config_path_existing) { File.expand_path('support/configuration.yaml') }
11
+ let(:existing_data) { { my_app: {
12
+ config_location: '/Users/bob/.my-app-config',
13
+ log_level: 'WARN',
14
+ version: '1.0.0' },
15
+ user_data: {
16
+ username: 'bob',
17
+ age: 45 } } }
18
+
9
19
  it 'raises an exception if not loaded properly' do
10
20
  m = 'Attempted to access `configuration` before executing `load_configuration`'
11
21
  expect { configuration }.to raise_error(RuntimeError, m)
12
22
  end
13
23
 
14
- let(:config_path_new) { File.expand_path('support/configuration2.yaml') }
24
+ it 'returns the same Configurator each time' do
25
+ load_configuration(config_path_new)
26
+ c1 = configuration
27
+ c2 = configuration
28
+ expect(c1).to eq(c2)
29
+ end
30
+
15
31
  it 'initializies configuration from scratch' do
16
32
  load_configuration(config_path_new)
17
33
  expect(configuration.class).to eq(CLIUtils::Configurator)
@@ -19,19 +35,10 @@ describe CLIUtils::Configuration do
19
35
  expect(configuration.data).to eq({})
20
36
  end
21
37
 
22
- let(:config_path_existing) { File.expand_path('support/configuration.yaml') }
23
- let(:existing_data) { { my_app: {
24
- config_location: '/Users/bob/.my-app-config',
25
- log_level: 'WARN',
26
- version: '1.0.0' },
27
- user_data: {
28
- username: 'bob',
29
- age: 45 } } }
30
-
31
38
  it 'works with existing configuration data' do
32
39
  load_configuration(config_path_existing)
33
40
  expect(configuration.class).to eq(CLIUtils::Configurator)
34
41
  expect(configuration.config_path).to eq(config_path_existing)
35
42
  expect(configuration.data).to eq(existing_data)
36
43
  end
37
- end
44
+ end
@@ -7,6 +7,12 @@ require 'cliutils/pretty_io'
7
7
  describe CLIUtils::Messaging do
8
8
  include CLIUtils::Messaging
9
9
 
10
+ it 'returns the same messenger each time' do
11
+ m1 = messenger
12
+ m2 = messenger
13
+ expect(m1).to eq(m2)
14
+ end
15
+
10
16
  it 'gives a set of standard message formats' do
11
17
  out = capture_stdout { messenger.error('error') }
12
18
  expect(out).to eq('# error'.red + "\n")
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
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: 2.2.0
4
+ version: 2.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Bach
@@ -128,22 +128,6 @@ files:
128
128
  - lib/cliutils/prefs/pref_validators/time_validator.rb
129
129
  - lib/cliutils/prefs/pref_validators/url_validator.rb
130
130
  - lib/cliutils/pretty_io.rb
131
- - res/readme-images/actions-1.png
132
- - res/readme-images/actions-2.png
133
- - res/readme-images/actions-3.png
134
- - res/readme-images/messenger-types-1.png
135
- - res/readme-images/messenger-warn.png
136
- - res/readme-images/multi-logger.png
137
- - res/readme-images/prefs-ask-behaviors.png
138
- - res/readme-images/prefs-ask-options.png
139
- - res/readme-images/prefs-ask-prereqs.png
140
- - res/readme-images/prefs-ask-validators.png
141
- - res/readme-images/prefs-ask.png
142
- - res/readme-images/prettyio-color-chart.png
143
- - res/readme-images/prettyio-gnarly-text.png
144
- - res/readme-images/prettyio-red-text.png
145
- - res/readme-images/prompting.png
146
- - res/readme-images/wrapping.png
147
131
  - spec/action/open_url_action_spec.rb
148
132
  - spec/action/pref_action_spec.rb
149
133
  - spec/behavior/capitalize_behavior_spec.rb
@@ -175,15 +159,28 @@ files:
175
159
  - spec/validator/url_validator_spec.rb
176
160
  - support/configuration.yaml
177
161
  - support/prefstest.yaml
162
+ - support/readme-images/actions-1.png
163
+ - support/readme-images/actions-2.png
164
+ - support/readme-images/actions-3.png
165
+ - support/readme-images/messenger-types-1.png
166
+ - support/readme-images/messenger-warn.png
167
+ - support/readme-images/multi-logger.png
168
+ - support/readme-images/prefs-ask-behaviors.png
169
+ - support/readme-images/prefs-ask-options.png
170
+ - support/readme-images/prefs-ask-prereqs.png
171
+ - support/readme-images/prefs-ask-validators.png
172
+ - support/readme-images/prefs-ask.png
173
+ - support/readme-images/prettyio-color-chart.png
174
+ - support/readme-images/prettyio-gnarly-text.png
175
+ - support/readme-images/prettyio-red-text.png
176
+ - support/readme-images/prompting.png
177
+ - support/readme-images/wrapping.png
178
178
  - support/test_action.rb
179
179
  - support/test_action_empty.rb
180
180
  - support/test_behavior.rb
181
181
  - support/test_behavior_empty.rb
182
182
  - support/test_validator.rb
183
183
  - support/test_validator_empty.rb
184
- - test/pref_test.rb
185
- - test/prefs_test.rb
186
- - test/test_helper.rb
187
184
  homepage: https://github.com/bachya/cliutils
188
185
  licenses:
189
186
  - MIT
@@ -238,7 +235,4 @@ test_files:
238
235
  - spec/validator/pref_validator_spec.rb
239
236
  - spec/validator/time_validator_spec.rb
240
237
  - spec/validator/url_validator_spec.rb
241
- - test/pref_test.rb
242
- - test/prefs_test.rb
243
- - test/test_helper.rb
244
238
  has_rdoc:
data/test/pref_test.rb DELETED
@@ -1,81 +0,0 @@
1
- require 'test_helper'
2
- require 'yaml'
3
-
4
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/hash_extensions')
5
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref')
6
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref_actions/pref_action')
7
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref_behaviors/pref_behavior')
8
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref_validators/pref_validator')
9
-
10
- class TestPref < Test::Unit::TestCase
11
- def setup
12
- @prefs_hash = {
13
- behaviors: [{ name: 'test' }],
14
- config_key: 'test_prompt',
15
- config_section: 'app_data',
16
- default: 'bachya',
17
- options: ['a', 'b'],
18
- pre: {
19
- message: 'Test pre message',
20
- action: 'test'
21
- },
22
- post: {
23
- message: 'Test post message',
24
- action: 'test'
25
- },
26
- prereqs: [
27
- { config_section: 'section' },
28
- { config_value: 'value' }
29
- ],
30
- prompt_text: 'Test',
31
- validators: ['test'],
32
- }
33
-
34
- CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
35
- CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
36
- CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
37
- end
38
-
39
- def teardown
40
-
41
- end
42
-
43
- def test_initialization
44
- pref = CLIUtils::Pref.new(@prefs_hash)
45
-
46
- assert_equal(pref.answer, nil)
47
- assert_equal(pref.behavior_objects[0].class, CLIUtils::TestBehavior.new.class)
48
- assert_equal(pref.behaviors, [{ name: 'test' }])
49
- assert_equal(pref.config_key, @prefs_hash[:config_key])
50
- assert_equal(pref.config_section, @prefs_hash[:config_section])
51
- assert_equal(pref.default, @prefs_hash[:default])
52
- assert_equal(pref.last_error_message, nil)
53
- assert_equal(pref.options, ['a', 'b'])
54
- assert_equal(pref.post, { message: 'Test post message', action: 'test' })
55
- assert_equal(pref.pre, { message: 'Test pre message', action: 'test' })
56
- assert_equal(pref.prereqs, [{ config_section: 'section' }, { config_value: 'value' }])
57
- assert_equal(pref.validator_objects[0].class, CLIUtils::TestValidator.new.class)
58
- assert_equal(pref.validators, ['test'])
59
- end
60
-
61
- def test_action
62
- require File.join(File.dirname(__FILE__), 'test_files/test_action.rb')
63
- a = CLIUtils::TestAction.new
64
- assert_output("here\n") { a.run }
65
- end
66
-
67
- def test_behavior
68
- require File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb')
69
- b = CLIUtils::TestBehavior.new
70
- assert_equal(b.evaluate('test'), 'test_behavior: test')
71
- end
72
-
73
- def test_validator
74
- require File.join(File.dirname(__FILE__), 'test_files/test_validator.rb')
75
- v = CLIUtils::TestValidator.new
76
- v.validate('bachya')
77
-
78
- assert_equal(v.is_valid, true)
79
- assert_equal(v.message, "String did not equal 'bachya': bachya")
80
- end
81
- end
data/test/prefs_test.rb DELETED
@@ -1,164 +0,0 @@
1
- require 'test_helper'
2
- require 'tempfile'
3
- require 'yaml'
4
-
5
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/hash_extensions')
6
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs')
7
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref')
8
-
9
- class TestPrefs < Test::Unit::TestCase
10
- def setup
11
- @prefs_arr = [
12
- {
13
- 'prompt_text' => 'Batman or Superman?',
14
- 'default' => 'Batman',
15
- 'config_key' => 'superhero',
16
- 'config_section' => 'personal_info'
17
- },
18
- {
19
- 'prompt_text' => 'Do you feel smart for preferring Batman?',
20
- 'default' => 'Y',
21
- 'config_key' => 'batman_answer',
22
- 'config_section' => 'personal_info',
23
- 'prereqs' => [
24
- {
25
- 'config_key' => 'superhero',
26
- 'config_value' => 'Batman'
27
- }
28
- ]
29
- },
30
- {
31
- 'prompt_text' => 'Why do you prefer Superman?!',
32
- 'default' => 'No clue',
33
- 'config_key' => 'superman_answer',
34
- 'config_section' => 'personal_info',
35
- 'prereqs' => [
36
- {
37
- 'config_key' => 'superhero',
38
- 'config_value' => 'Superman'
39
- }
40
- ]
41
- }
42
- ]
43
-
44
- @prefs_hash = {:prompts=>@prefs_arr}
45
- @prefs_filepath = '/tmp/prefstest.yaml'
46
- FileUtils.cp(File.join(File.dirname(__FILE__), '..', 'test/test_files/prefstest.yaml'), @prefs_filepath)
47
- end
48
-
49
- def teardown
50
- FileUtils.rm(@prefs_filepath) if File.file?(@prefs_filepath)
51
- end
52
-
53
- def test_file_creation
54
- p = CLIUtils::Prefs.new(@prefs_filepath)
55
- prefs = YAML::load_file(@prefs_filepath).deep_symbolize_keys
56
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
57
- end
58
-
59
- def test_bad_file_creation
60
- exception = assert_raise(RuntimeError) { p = CLIUtils::Prefs.new('asd') }
61
- assert_equal('Invalid configuration file: asd', exception.message)
62
- end
63
-
64
- def test_array_creation
65
- p = CLIUtils::Prefs.new(@prefs_arr)
66
- prefs = @prefs_hash.deep_symbolize_keys
67
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
68
- end
69
-
70
- def test_hash_creation
71
- p = CLIUtils::Prefs.new(@prefs_hash)
72
- prefs = @prefs_hash.deep_symbolize_keys
73
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
74
- end
75
-
76
- def test_invalid_type_creation
77
- exception = assert_raise(RuntimeError) { p = CLIUtils::Prefs.new(123) }
78
- assert_equal('Invalid configuration data', exception.message)
79
- end
80
-
81
- def test_register
82
- CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
83
- assert_equal(CLIUtils::Prefs.registered_actions.key?(:Test), true)
84
- assert_equal(CLIUtils::Prefs.registered_actions[:Test][:class], 'TestAction')
85
- assert_equal(CLIUtils::Prefs.registered_actions[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
86
-
87
- CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
88
- assert_equal(CLIUtils::Prefs.registered_behaviors.key?(:Test), true)
89
- assert_equal(CLIUtils::Prefs.registered_behaviors[:Test][:class], 'TestBehavior')
90
- assert_equal(CLIUtils::Prefs.registered_behaviors[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
91
-
92
- CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
93
- assert_equal(CLIUtils::Prefs.registered_validators.key?(:Test), true)
94
- assert_equal(CLIUtils::Prefs.registered_validators[:Test][:class], 'TestValidator')
95
- assert_equal(CLIUtils::Prefs.registered_validators[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
96
- end
97
-
98
- def test_bad_registration
99
- m = 'Registration failed because of unknown filepath: bachya.rb'
100
-
101
- exception = assert_raise(RuntimeError) { CLIUtils::Prefs.register_action('bachya.rb') }
102
- assert_equal(m, exception.message)
103
-
104
- exception = assert_raise(RuntimeError) { CLIUtils::Prefs.register_behavior('bachya.rb') }
105
- assert_equal(m, exception.message)
106
-
107
- exception = assert_raise(RuntimeError) { CLIUtils::Prefs.register_validator('bachya.rb') }
108
- assert_equal(m, exception.message)
109
- end
110
-
111
- def test_deregister
112
- CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
113
- CLIUtils::Prefs.deregister_action(:Test)
114
- assert_equal(CLIUtils::Prefs.registered_actions.key?(:Test), false)
115
-
116
- CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
117
- CLIUtils::Prefs.deregister_behavior(:Test)
118
- assert_equal(CLIUtils::Prefs.registered_behaviors.key?(:Test), false)
119
-
120
- CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
121
- CLIUtils::Prefs.deregister_validator(:Test)
122
- assert_equal(CLIUtils::Prefs.registered_validators.key?(:Test), false)
123
- end
124
-
125
- def test_ask
126
- p = CLIUtils::Prefs.new(@prefs_filepath)
127
- stdin = Tempfile.new("test_readline_stdin")
128
- stdout = Tempfile.new("test_readline_stdout")
129
- begin
130
- stdin.write("\n")
131
- stdin.close
132
- stdout.close
133
- line = replace_stdio(stdin.path, stdout.path) {
134
- p.ask
135
- }
136
- ensure
137
- stdin.close(true)
138
- stdout.close(true)
139
- end
140
- end
141
-
142
- private
143
-
144
- def replace_stdio(stdin_path, stdout_path)
145
- open(stdin_path, "r"){|stdin|
146
- open(stdout_path, "w"){|stdout|
147
- orig_stdin = STDIN.dup
148
- orig_stdout = STDOUT.dup
149
- STDIN.reopen(stdin)
150
- STDOUT.reopen(stdout)
151
- begin
152
- Readline.input = STDIN
153
- Readline.output = STDOUT
154
- yield
155
- ensure
156
- STDIN.reopen(orig_stdin)
157
- STDOUT.reopen(orig_stdout)
158
- orig_stdin.close
159
- orig_stdout.close
160
- end
161
- }
162
- }
163
- end
164
- end
data/test/test_helper.rb DELETED
@@ -1,6 +0,0 @@
1
- require 'simplecov'
2
- require 'test/unit'
3
-
4
- class Test::Unit::TestCase
5
-
6
- end