cliutils 2.0.3 → 2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 468c8c7908c0a02ded8062f42e6eb6fc72bbc777
4
- data.tar.gz: 801140b94e5d9bba9c84b1879d7d6cbe5365302e
3
+ metadata.gz: 2853602f0ebaccd9bcfe4b6b1372d6fced7bf18b
4
+ data.tar.gz: 794dd1a40731aba8a6e7f1e3a41eb6aa43fc6818
5
5
  SHA512:
6
- metadata.gz: e51ac6b27096e299b6f77f9e7557e395a9f492d167584f13697d4c8218c12cb34535d746652abf087ffb588d581275801315edde489a88fd7319d449fa90ec48
7
- data.tar.gz: 1a008ce2af7b5900ff3420ff3c741f44eb57e65b2fffa3c2747f741f54ba102ee7e1b12c6c1fafdd507c792b9baed16d29625188431439b6ec6a28fb3d5677c1
6
+ metadata.gz: 156f2abebd0cf0f60b36d978604c08980ceba30f6f071ade567a82bc637d83a38627c9e37df30176d89d0f4f156caf1ea32b62f3b9e7fac17952d4083b59d84c
7
+ data.tar.gz: a434896e1b247f2c283b47aa05b0698fa2f1dd7dcceb0d7b423e2f4c9329b4c634398a7bd9d419622a44867f3feec934be3c9fa5edcbbdba3f3d8763e73e68f0
data/HISTORY.md CHANGED
@@ -1,6 +1,12 @@
1
- # 2.0.3 (2014-04-20)
1
+ # 2.1.0 (2014-04-20)
2
2
 
3
+ * Added ability to register/deregister Pref Actions
4
+ * Added ability to register/deregister Pref Behaviors
5
+ * Added ability to register/deregister Pref Validators
6
+ * Added same "Press enter to continue message" to both pre and post Pref behaviors
3
7
  * Removed section_block from Messaging (because it was totally not useful)
8
+ * Several bugfixes
9
+ * Added new Prefs and Pref unit tests
4
10
 
5
11
  # 2.0.2 (2014-04-16)
6
12
 
data/cliutils.gemspec CHANGED
@@ -8,11 +8,11 @@ Gem::Specification.new do |spec|
8
8
  spec.version = CLIUtils::VERSION
9
9
  spec.authors = ["Aaron Bach"]
10
10
  spec.email = ["bachya1208@googlemail.com"]
11
- spec.summary = 'Sugary goodness for Ruby CLI apps.'
12
- spec.description = 'A library of functionality designed to alleviate common tasks and headaches when developing command-line (CLI) apps in Ruby.'
13
- spec.homepage = "http://www.bachyaproductions.com/cliutils-ruby-library-cli-apps/"
11
+ spec.summary = CLIUtils::SUMMARY
12
+ spec.description = CLIUtils::DESCRIPTION
13
+ spec.homepage = "https://github.com/bachya/cliutils"
14
14
  spec.license = "MIT"
15
-
15
+
16
16
  spec.files = `git ls-files -z`.split("\x0")
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
@@ -38,7 +38,7 @@ module CLIUtils
38
38
  @config_path = _path
39
39
  @data = {}
40
40
 
41
- if File.exist?(_path)
41
+ if File.file?(_path)
42
42
  data = YAML.load_file(_path)
43
43
  @data.deep_merge!(data).deep_symbolize_keys!
44
44
  end
@@ -1,5 +1,12 @@
1
1
  # Stores constants to use.
2
2
  module CLIUtils
3
+ # The description of the gem
4
+ DESCRIPTION = 'A library of functionality designed to alleviate common ' \
5
+ 'tasks and headaches when developing command-line (CLI) apps in Ruby.'
6
+
7
+ # The summary of the gem
8
+ SUMMARY = 'Sugary goodness for Ruby CLI apps.'
9
+
3
10
  # The current version of the gem
4
- VERSION = '2.0.3'
11
+ VERSION = '2.1.0'
5
12
  end
@@ -195,7 +195,7 @@ module CLIUtils
195
195
 
196
196
  if (@pre[:action])
197
197
  action_obj = _init_action(@pre[:action][:name])
198
- action_obj.run
198
+ action_obj.run if action_obj
199
199
  end
200
200
  end
201
201
 
@@ -203,10 +203,11 @@ module CLIUtils
203
203
  # @return [void]
204
204
  def _eval_post
205
205
  info(@post[:message])
206
+ prompt('Press enter to continue')
206
207
 
207
208
  if (@post[:action])
208
209
  action_obj = _init_action(@post[:action][:name])
209
- action_obj.run
210
+ action_obj.run if action_obj
210
211
  end
211
212
  end
212
213
 
@@ -217,7 +218,6 @@ module CLIUtils
217
218
  def _init_action(path_or_name)
218
219
  obj = _load_asset(ASSET_TYPE_ACTION, path_or_name)
219
220
  unless obj.nil?
220
- obj.pref = self
221
221
  obj.parameters = @pre[:action][:parameters]
222
222
  end
223
223
  obj
@@ -230,7 +230,6 @@ module CLIUtils
230
230
  def _init_and_add_behavior(behavior_hash)
231
231
  obj = _load_asset(ASSET_TYPE_BEHAVIOR, behavior_hash[:name])
232
232
  unless obj.nil?
233
- obj.pref = self
234
233
  obj.parameters = behavior_hash[:parameters]
235
234
  @behavior_objects << obj
236
235
  end
@@ -243,7 +242,6 @@ module CLIUtils
243
242
  def _init_and_add_validator(path_or_name)
244
243
  obj = _load_asset(ASSET_TYPE_VALIDATOR, path_or_name)
245
244
  unless obj.nil?
246
- obj.pref = self
247
245
  @validator_objects << obj
248
246
  end
249
247
  end
@@ -253,28 +251,57 @@ module CLIUtils
253
251
  # execution continues.
254
252
  # @param [Integer] type ASSET_TYPE_BEHAVIOR or ASSET_TYPE_VALIDATOR
255
253
  # @param [String] path_or_name The path to or name of the asset
256
- # @return [Object]
254
+ # @return [Object]
257
255
  def _load_asset(type, path_or_name)
258
- if File.exist?(path_or_name)
256
+ asset_found = false
257
+ if File.file?(File.expand_path(path_or_name))
259
258
  # If the file exists, we're assuming that the user
260
259
  # passed a filepath.
261
- asset_path = File.expand_path(path_or_name) if path_or_name.start_with?('~')
262
- asset_path = "#{ path_or_name }_#{ @@asset_labels[type][:file_suffix] }"
260
+ asset_found = true
261
+ asset_path = File.expand_path(path_or_name) if path_or_name.start_with?('~')
263
262
  asset_name = File.basename(path_or_name, '.*').camelize
264
- else
265
- # If it doesn't, we're assuming that the user
266
- # passed a class name.
263
+ end
264
+
265
+ unless asset_found
266
+ # If the file doesn't exist, look to see if it's been
267
+ # pre-registered.
268
+ symbol = File.basename(path_or_name, '.*').camelize.to_sym
269
+ case type
270
+ when Pref::ASSET_TYPE_ACTION
271
+ if CLIUtils::Prefs.registered_actions.key?(symbol)
272
+ asset_found = true
273
+ asset_path = CLIUtils::Prefs.registered_actions[symbol][:path]
274
+ asset_name = CLIUtils::Prefs.registered_actions[symbol][:class]
275
+ end
276
+ when Pref::ASSET_TYPE_BEHAVIOR
277
+ if CLIUtils::Prefs.registered_behaviors.key?(symbol)
278
+ asset_found = true
279
+ asset_path = CLIUtils::Prefs.registered_behaviors[symbol][:path] rescue ''
280
+ asset_name = CLIUtils::Prefs.registered_behaviors[symbol][:class] rescue ''
281
+ end
282
+ when Pref::ASSET_TYPE_VALIDATOR
283
+ if CLIUtils::Prefs.registered_validators.key?(symbol)
284
+ asset_found = true
285
+ asset_path = CLIUtils::Prefs.registered_validators[symbol][:path] rescue ''
286
+ asset_name = CLIUtils::Prefs.registered_validators[symbol][:class] rescue ''
287
+ end
288
+ end
289
+ end
290
+
291
+ unless asset_found
292
+ # If the file doesn't exist and there's no pre-registered
293
+ # asset, as a last check, look for it as a built-in asset.
267
294
  _default = File.join(File.dirname(__FILE__), "pref_#{ @@asset_labels[type][:file_suffix] }s")
268
295
  asset_path = File.join(_default, "#{ path_or_name }_#{ @@asset_labels[type][:file_suffix] }")
269
- asset_name = path_or_name.camelize
296
+ asset_name = "#{ path_or_name.camelize }#{ @@asset_labels[type][:class_suffix] }"
270
297
  end
271
298
 
272
- # Try to load and instantiate the Action. If that fails, warn
299
+ # Try to load and instantiate the asset. If that fails, warn
273
300
  # the user with a message and skip over it.
274
301
  begin
275
- require asset_path
276
- Object.const_get("CLIUtils::#{ asset_name }#{ @@asset_labels[type][:class_suffix] }").new
277
- rescue LoadError
302
+ require File.expand_path(asset_path)
303
+ Object.const_get("CLIUtils::#{ asset_name }").new
304
+ rescue LoadError => e
278
305
  messenger.warn("Skipping undefined Pref #{ @@asset_labels[type][:class_suffix] }: #{ path_or_name }")
279
306
  nil
280
307
  end
@@ -6,22 +6,15 @@ module CLIUtils
6
6
 
7
7
  # Holds the parameters that apply to
8
8
  # this Action.
9
- # @!attribute parameters
10
9
  # @return [Hash]
11
10
  attr_accessor :parameters
12
11
 
13
- # Holds a reference to the pref that
14
- # is implementing this Action.
15
- # @!attribute pref
16
- # @return [Pref]
17
- attr_accessor :pref
18
-
19
12
  # Runs the Action. Note that the
20
13
  # method implemented here will throw
21
14
  # an exception by default, meaning that
22
15
  # the user's subclass *needs* to
23
16
  # implement it.
24
- # @parameter [Hash] parameters
17
+ # @param [Hash] parameters
25
18
  # @raise [StandardError] if the subclass
26
19
  # doesn't implement this method.
27
20
  # @return [void]
@@ -29,4 +22,4 @@ module CLIUtils
29
22
  fail "`run` method not implemented on caller: #{ self.class }"
30
23
  end
31
24
  end
32
- end
25
+ end
@@ -9,13 +9,8 @@ module CLIUtils
9
9
  # @return [Hash]
10
10
  attr_accessor :parameters
11
11
 
12
- # Holds a reference to the Pref that
13
- # is applying this Behavior.
14
- # @return [Pref]
15
- attr_accessor :pref
16
-
17
12
  # Evaluate the Behavior!
18
- # @parameter [Hash] parameters
13
+ # @param [String] text
19
14
  # @raise [StandardError] if the subclass
20
15
  # doesn't implement this method.
21
16
  # @return [void]
@@ -23,4 +18,4 @@ module CLIUtils
23
18
  fail "`evaluate` method not implemented on caller: #{ self.class }"
24
19
  end
25
20
  end
26
- end
21
+ end
@@ -14,13 +14,8 @@ module CLIUtils
14
14
  # @return [String]
15
15
  attr_accessor :message
16
16
 
17
- # Holds a reference to the Pref that is
18
- # applying this Validator.
19
- # @return [Pref]
20
- attr_accessor :pref
21
-
22
17
  # Validate the Validator!
23
- # @parameter [String] text
18
+ # @param [String] text
24
19
  # @raise [StandardError] if the subclass
25
20
  # doesn't implement this method.
26
21
  # @return [void]
@@ -28,4 +23,4 @@ module CLIUtils
28
23
  fail "`validate` method not implemented on caller: #{ self.class }"
29
24
  end
30
25
  end
31
- end
26
+ end
@@ -6,6 +6,7 @@ module CLIUtils
6
6
  # those to a user via a prompt, and collect the results.
7
7
  class Prefs
8
8
  include Messaging
9
+
9
10
  # Stores the filepath (if it exists) to the prefs file.
10
11
  # @return [String]
11
12
  attr_reader :config_path
@@ -18,18 +19,37 @@ module CLIUtils
18
19
  # @return [Array]
19
20
  attr_reader :prompts
20
21
 
22
+ class << self
23
+ # Stores any actions registered for all
24
+ # instances of Prefs.
25
+ # @return [Hash]
26
+ attr_accessor :registered_actions
27
+
28
+ # Stores any behaviors registered for all
29
+ # instances of Prefs.
30
+ # @return [Hash]
31
+ attr_accessor :registered_behaviors
32
+
33
+ # Stores any validators registered for all
34
+ # instances of Prefs.
35
+ # @return [Hash]
36
+ attr_accessor :registered_validators
37
+ end
38
+
39
+ self.registered_actions = {}
40
+ self.registered_behaviors = {}
41
+ self.registered_validators = {}
42
+
21
43
  # Reads prompt data from and stores it.
22
44
  # @param [<String, Hash, Array>] data Filepath to YAML, Hash, or Array
23
45
  # @param [Configurator] configurator Source of defailt values
24
46
  # @return [void]
25
47
  def initialize(data, configurator = nil)
26
- @answers = []
27
- @configurator = configurator
28
48
  @prompts = []
29
-
49
+ @configurator = configurator
30
50
  case data
31
51
  when String
32
- if File.exist?(data)
52
+ if File.file?(data)
33
53
  @config_path = data
34
54
  data = YAML.load_file(data).deep_symbolize_keys
35
55
  @prompts = _generate_prefs(data)
@@ -56,15 +76,64 @@ module CLIUtils
56
76
  # complete, questions w/ prerequisites are examined.
57
77
  # @return [void]
58
78
  def ask
79
+ # First, deliver all the prompts that don't have
80
+ # any prerequisites.
59
81
  @prompts.reject { |p| p.prereqs }.each do |p|
60
82
  _deliver_prompt(p)
61
83
  end
62
84
 
85
+ # After the "non-prerequisite" prompts are delivered,
86
+ # deliver any that require prerequisites.
63
87
  @prompts.select { |p| p.prereqs }.each do |p|
64
88
  _deliver_prompt(p) if _prereqs_fulfilled?(p)
65
89
  end
66
90
  end
67
91
 
92
+ # Deregister an action based on the symbol it was
93
+ # stored under.
94
+ # @param [Symbol] symbol The symbol to remove
95
+ # @remove [void]
96
+ def self.deregister_action(symbol)
97
+ _deregister_asset(symbol, Pref::ASSET_TYPE_ACTION)
98
+ end
99
+
100
+ # Deregister a behavior based on the symbol it was
101
+ # stored under.
102
+ # @param [Symbol] symbol The symbol to remove
103
+ # @remove [void]
104
+ def self.deregister_behavior(symbol)
105
+ _deregister_asset(symbol, Pref::ASSET_TYPE_BEHAVIOR)
106
+ end
107
+
108
+ # Deregister a validator based on the symbol it was
109
+ # stored under.
110
+ # @param [Symbol] symbol The symbol to remove
111
+ # @remove [void]
112
+ def self.deregister_validator(symbol)
113
+ _deregister_asset(symbol, Pref::ASSET_TYPE_VALIDATOR)
114
+ end
115
+
116
+ # Register an action.
117
+ # @param [String] path The filepath of the action
118
+ # @remove [void]
119
+ def self.register_action(path)
120
+ self._register_asset(path, Pref::ASSET_TYPE_ACTION)
121
+ end
122
+
123
+ # Register a behavior.
124
+ # @param [String] path The filepath of the behavior
125
+ # @remove [void]
126
+ def self.register_behavior(path)
127
+ _register_asset(path, Pref::ASSET_TYPE_BEHAVIOR)
128
+ end
129
+
130
+ # Register a validator.
131
+ # @param [String] path The filepath of the validator
132
+ # @remove [void]
133
+ def self.register_validator(path)
134
+ _register_asset(path, Pref::ASSET_TYPE_VALIDATOR)
135
+ end
136
+
68
137
  private
69
138
 
70
139
  # Utility method for prompting the user to answer the
@@ -75,6 +144,9 @@ module CLIUtils
75
144
  default = p.default
76
145
  unless @configurator.nil?
77
146
  section_sym = p.config_section.to_sym
147
+
148
+ # If a Configurator has been included, replace relevant
149
+ # prompt defaults with those values from the Configurator.
78
150
  unless @configurator.data[section_sym].nil?
79
151
  config_val = @configurator.data[section_sym][p.config_key.to_sym]
80
152
  default = config_val unless config_val.nil?
@@ -107,5 +179,54 @@ module CLIUtils
107
179
  end
108
180
  ret
109
181
  end
182
+
183
+ # Utility function to deregister an asset.
184
+ # @param [Symbol] symbol The asset to remove
185
+ # @param [Fixnum] type A Pref asset type
186
+ # @return [void]
187
+ def self._deregister_asset(symbol, type)
188
+ case type
189
+ when Pref::ASSET_TYPE_ACTION
190
+ CLIUtils::Prefs.registered_actions.delete(symbol)
191
+ when Pref::ASSET_TYPE_BEHAVIOR
192
+ CLIUtils::Prefs.registered_behaviors.delete(symbol)
193
+ when Pref::ASSET_TYPE_VALIDATOR
194
+ CLIUtils::Prefs.registered_validators.delete(symbol)
195
+ end
196
+ end
197
+
198
+ # Utility function to register an asset and associate
199
+ # it with the Prefs eigenclass.
200
+ # @param [String] path The filepath to the asset
201
+ # @param [Fixnum] type A Pref asset type
202
+ # @raise [StandardError] if the asset is unknown
203
+ # @return [void]
204
+ def self._register_asset(path, type)
205
+ if File.file?(path)
206
+ class_name = File.basename(path, '.*').camelize
207
+ case type
208
+ when Pref::ASSET_TYPE_ACTION
209
+ k = class_name.sub('Action', '').to_sym
210
+ unless CLIUtils::Prefs.registered_actions.key?(k)
211
+ h = { k => { class: class_name, path: path } }
212
+ CLIUtils::Prefs.registered_actions.merge!(h)
213
+ end
214
+ when Pref::ASSET_TYPE_BEHAVIOR
215
+ k = class_name.sub('Behavior', '').to_sym
216
+ unless CLIUtils::Prefs.registered_behaviors.key?(k)
217
+ h = { k => { class: class_name, path: path } }
218
+ CLIUtils::Prefs.registered_behaviors.merge!(h)
219
+ end
220
+ when Pref::ASSET_TYPE_VALIDATOR
221
+ k = class_name.sub('Validator', '').to_sym
222
+ unless CLIUtils::Prefs.registered_validators.key?(k)
223
+ h = { k => { class: class_name, path: path } }
224
+ CLIUtils::Prefs.registered_validators.merge!(h)
225
+ end
226
+ end
227
+ else
228
+ fail "Registration failed because of unknown filepath: #{ path }"
229
+ end
230
+ end
110
231
  end
111
232
  end
@@ -57,14 +57,13 @@ module CLIUtils
57
57
  # @return [String]
58
58
  def _word_wrap(text, prefix_str)
59
59
  if PrettyIO.wrap
60
- return text if PrettyIO.wrap_char_limit <= 0
61
-
60
+ return prefix_str + text if PrettyIO.wrap_char_limit <= 0
62
61
  limit = PrettyIO.wrap_char_limit - prefix_str.length
63
- text.to_s.gsub(/\n/, ' ')
64
- .gsub(/(.{1,#{ limit }})(\s+|$)/, "#{ prefix_str }\\1\n")
65
- .strip
62
+ text.split("\n").collect! do |line|
63
+ line.length > limit ? text.gsub(/(.{1,#{ limit }})(\s+|$)/, "#{ prefix_str }\\1\n").strip : prefix_str + line
64
+ end * "\n"
66
65
  else
67
- text
66
+ prefix_str + text
68
67
  end
69
68
  end
70
69
  end
@@ -11,7 +11,7 @@ class TestConfigurator < Test::Unit::TestCase
11
11
  end
12
12
 
13
13
  def teardown
14
- FileUtils.rm(@config_path) if File.exist?(@config_path)
14
+ FileUtils.rm(@config_path) if File.file?(@config_path)
15
15
  end
16
16
 
17
17
  def test_add_section
@@ -15,7 +15,7 @@ class TestMessaging < Test::Unit::TestCase
15
15
  end
16
16
 
17
17
  def teardown
18
- FileUtils.rm(@file1path) if File.exist?(@file1path)
18
+ FileUtils.rm(@file1path) if File.file?(@file1path)
19
19
  end
20
20
 
21
21
  def test_stdout_output
data/test/pref_test.rb CHANGED
@@ -3,8 +3,80 @@ require 'yaml'
3
3
 
4
4
  require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/hash_extensions')
5
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')
6
9
 
7
10
  # Tests for the Prefs class
8
11
  class TestPref < Test::Unit::TestCase
9
-
12
+ def setup
13
+ @prefs_hash = {
14
+ behaviors: [{ name: 'test' }],
15
+ config_key: 'test_prompt',
16
+ config_section: 'app_data',
17
+ default: 'bachya',
18
+ options: ['a', 'b'],
19
+ pre: {
20
+ message: 'Test pre message',
21
+ action: 'test'
22
+ },
23
+ post: {
24
+ message: 'Test post message',
25
+ action: 'test'
26
+ },
27
+ prereqs: [
28
+ { config_section: 'section' },
29
+ { config_value: 'value' }
30
+ ],
31
+ prompt_text: 'Test',
32
+ validators: ['test'],
33
+ }
34
+
35
+ CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
36
+ CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
37
+ CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
38
+ end
39
+
40
+ def teardown
41
+
42
+ end
43
+
44
+ def test_initialization
45
+ pref = CLIUtils::Pref.new(@prefs_hash)
46
+
47
+ assert_equal(pref.answer, nil)
48
+ assert_equal(pref.behavior_objects[0].class, CLIUtils::TestBehavior.new.class)
49
+ assert_equal(pref.behaviors, [{ name: 'test' }])
50
+ assert_equal(pref.config_key, @prefs_hash[:config_key])
51
+ assert_equal(pref.config_section, @prefs_hash[:config_section])
52
+ assert_equal(pref.default, @prefs_hash[:default])
53
+ assert_equal(pref.last_error_message, nil)
54
+ assert_equal(pref.options, ['a', 'b'])
55
+ assert_equal(pref.post, { message: 'Test post message', action: 'test' })
56
+ assert_equal(pref.pre, { message: 'Test pre message', action: 'test' })
57
+ assert_equal(pref.prereqs, [{ config_section: 'section' }, { config_value: 'value' }])
58
+ assert_equal(pref.validator_objects[0].class, CLIUtils::TestValidator.new.class)
59
+ assert_equal(pref.validators, ['test'])
60
+ end
61
+
62
+ def test_action
63
+ require File.join(File.dirname(__FILE__), 'test_files/test_action.rb')
64
+ a = CLIUtils::TestAction.new
65
+ assert_output("here\n") { a.run }
66
+ end
67
+
68
+ def test_behavior
69
+ require File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb')
70
+ b = CLIUtils::TestBehavior.new
71
+ assert_equal(b.evaluate('test'), 'test_behavior: test')
72
+ end
73
+
74
+ def test_validator
75
+ require File.join(File.dirname(__FILE__), 'test_files/test_validator.rb')
76
+ v = CLIUtils::TestValidator.new
77
+ v.validate('bachya')
78
+
79
+ assert_equal(v.is_valid, true)
80
+ assert_equal(v.message, "String did not equal 'bachya': bachya")
81
+ end
10
82
  end
data/test/prefs_test.rb CHANGED
@@ -47,27 +47,55 @@ class TestPrefs < Test::Unit::TestCase
47
47
  end
48
48
 
49
49
  def teardown
50
- FileUtils.rm(@prefs_filepath) if File.exist?(@prefs_filepath)
50
+ FileUtils.rm(@prefs_filepath) if File.file?(@prefs_filepath)
51
51
  end
52
52
 
53
53
  def test_file_creation
54
54
  p = CLIUtils::Prefs.new(@prefs_filepath)
55
55
  prefs = YAML::load_file(@prefs_filepath).deep_symbolize_keys
56
-
57
56
  assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
58
57
  end
59
58
 
60
59
  def test_array_creation
61
60
  p = CLIUtils::Prefs.new(@prefs_arr)
62
61
  prefs = @prefs_hash.deep_symbolize_keys
63
-
64
62
  assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
65
63
  end
66
64
 
67
65
  def test_hash_creation
68
66
  p = CLIUtils::Prefs.new(@prefs_hash)
69
67
  prefs = @prefs_hash.deep_symbolize_keys
70
-
71
68
  assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
72
69
  end
70
+
71
+ def test_register
72
+ CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
73
+ assert_equal(CLIUtils::Prefs.registered_actions.key?(:Test), true)
74
+ assert_equal(CLIUtils::Prefs.registered_actions[:Test][:class], 'TestAction')
75
+ assert_equal(CLIUtils::Prefs.registered_actions[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
76
+
77
+ CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
78
+ assert_equal(CLIUtils::Prefs.registered_behaviors.key?(:Test), true)
79
+ assert_equal(CLIUtils::Prefs.registered_behaviors[:Test][:class], 'TestBehavior')
80
+ assert_equal(CLIUtils::Prefs.registered_behaviors[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
81
+
82
+ CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
83
+ assert_equal(CLIUtils::Prefs.registered_validators.key?(:Test), true)
84
+ assert_equal(CLIUtils::Prefs.registered_validators[:Test][:class], 'TestValidator')
85
+ assert_equal(CLIUtils::Prefs.registered_validators[:Test][:path], File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
86
+ end
87
+
88
+ def test_deregister
89
+ CLIUtils::Prefs.register_action(File.join(File.dirname(__FILE__), 'test_files/test_action.rb'))
90
+ CLIUtils::Prefs.deregister_action(:Test)
91
+ assert_equal(CLIUtils::Prefs.registered_actions.key?(:Test), false)
92
+
93
+ CLIUtils::Prefs.register_behavior(File.join(File.dirname(__FILE__), 'test_files/test_behavior.rb'))
94
+ CLIUtils::Prefs.deregister_behavior(:Test)
95
+ assert_equal(CLIUtils::Prefs.registered_behaviors.key?(:Test), false)
96
+
97
+ CLIUtils::Prefs.register_validator(File.join(File.dirname(__FILE__), 'test_files/test_validator.rb'))
98
+ CLIUtils::Prefs.deregister_validator(:Test)
99
+ assert_equal(CLIUtils::Prefs.registered_validators.key?(:Test), false)
100
+ end
73
101
  end
@@ -1,17 +1,21 @@
1
1
  prompts:
2
- - prompt_text: What is the top story on espn.com?
3
- config_key: top_story
2
+ - prompt_text: This is a test prompt
3
+ config_key: test_prompt
4
4
  config_section: app_data
5
- pre:
6
- message: 'I will now open espn.com in your default browser.'
7
- action:
8
- name: open_url
9
- parameters:
10
- url: http://www.espn.com
11
- post:
12
- message: 'Thanks for inputting!'
5
+ # pre:
6
+ # message: I will now test a custom action via filepath
7
+ # action:
8
+ # name: test
9
+ # pre:
10
+ # message: 'I will now open espn.com in your default browser.'
11
+ # action:
12
+ # name: test
13
+ # parameters:
14
+ # url: http://www.espn.com
15
+ # post:
16
+ # message: 'Thanks for inputting!'
13
17
  validators:
14
- # - alphabetic
18
+ - alphabetic
15
19
  # - alphanumeric
16
20
  # - date
17
21
  # - datetime
@@ -21,7 +25,7 @@ prompts:
21
25
  # - time
22
26
  # - url
23
27
  behaviors:
24
- # - name: capitalize
28
+ - name: capitalize
25
29
  # - name: expand_filepath
26
30
  # - name: lowercase
27
31
  # - name: prefix
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: 2.0.3
4
+ version: 2.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-04-21 00:00:00.000000000 Z
11
+ date: 2014-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -139,7 +139,7 @@ files:
139
139
  - test/string_extesions_test.rb
140
140
  - test/test_files/prefstest.yaml
141
141
  - test/test_helper.rb
142
- homepage: http://www.bachyaproductions.com/cliutils-ruby-library-cli-apps/
142
+ homepage: https://github.com/bachya/cliutils
143
143
  licenses:
144
144
  - MIT
145
145
  metadata: {}