cliutils 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8d4b5956a8169f6d9921d0ed268188a65578fc9
4
- data.tar.gz: fc2066b9c99902a3db434abceb0811ce6285eae5
3
+ metadata.gz: cca92462495e55bd03893b1ce6a19c1830288b56
4
+ data.tar.gz: dd8f5e2ed4434f381f0bca8a66d34fcab3cf6834
5
5
  SHA512:
6
- metadata.gz: 746e189a28faa6d4cc66653bfab9bd4c804bac063516432c2ebfb214fa10ed178f371e44f86ba223ac4ce84d881d5fca43c2daa3a809a066381772e5930c3280
7
- data.tar.gz: 1cb57fd665d770383fca928c5aa7951e8a635e4f082d445649633e90873717b2ef0ae145459c093ae09bc1d838a4ece89daae44f3b19661c104f57e573f0c731
6
+ metadata.gz: 226d3b909c6a8f887818491f4611db68128e991c818c4aeb8268316f3f3d0415bf06a5a6967e961c6377f0cfbc3149b8dd94e3ad68dd1e4dcb18086cecdbc46a
7
+ data.tar.gz: 0404033a25e60197ec39c4e58cde3a72616d1a09c9d051a44d0c4e74a85e349d3c1b949c33516bc847f38ab77c959de3cf5a1c1109bdc5cbd43d8e9b57e33c82
data/HISTORY.md CHANGED
@@ -1,3 +1,7 @@
1
+ # 1.2.4 (2014-04-06)
2
+
3
+ * Cleanup and refactoring
4
+
1
5
  # 1.2.3 (2014-04-05)
2
6
 
3
7
  * Fixed a bug in ingest_prefs
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rake/clean'
2
2
  require 'rubygems'
3
3
 
4
4
  def version
5
- contents = File.read File.expand_path('../lib/cliutils/version.rb', __FILE__)
5
+ contents = File.read File.expand_path('../lib/cliutils/constants.rb', __FILE__)
6
6
  contents[/VERSION = '([^']+)'/, 1]
7
7
  end
8
8
 
data/cliutils.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'cliutils/version'
4
+ require 'cliutils/constants'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "cliutils"
@@ -12,7 +12,7 @@ module CLIUtils
12
12
  'INFO' => Logger::INFO,
13
13
  'WARN' => Logger::WARN,
14
14
  'ERROR' => Logger::ERROR,
15
- 'FATAL' => Logger::FATAL,
15
+ 'FATAL' => Logger::FATAL
16
16
  }
17
17
 
18
18
  # Hook that triggers when this module is included.
@@ -8,7 +8,7 @@ module CLIUtils
8
8
  # Stores the path to the configuration file.
9
9
  # @return [String]
10
10
  attr_reader :config_path
11
-
11
+
12
12
  # Stores the configuration data itself.
13
13
  # @return [Hash]
14
14
  attr_reader :data
@@ -21,8 +21,8 @@ module CLIUtils
21
21
  @config_path = _path
22
22
  @data = {}
23
23
 
24
- if File.exists?(_path)
25
- data = YAML::load_file(_path)
24
+ if File.exist?(_path)
25
+ data = YAML.load_file(_path)
26
26
  @data.deep_merge!(data).deep_symbolize_keys!
27
27
  end
28
28
  end
@@ -55,10 +55,11 @@ module CLIUtils
55
55
  # @param [Prefs] prefs The Prefs class to examine
56
56
  # @return [void]
57
57
  def ingest_prefs(prefs)
58
- fail 'Invaid Prefs class' if !prefs.kind_of?(Prefs)
58
+ fail 'Invaid Prefs class' unless prefs.kind_of?(Prefs)
59
59
  prefs.prompts.each do |p|
60
- add_section(p.config_section.to_sym) unless @data.key?(p.config_section.to_sym)
61
- @data[p.config_section.to_sym].merge!(p.config_key.to_sym => p.answer)
60
+ section_sym = p.config_section.to_sym
61
+ add_section(section_sym) unless @data.key?(section_sym)
62
+ @data[section_sym].merge!(p.config_key.to_sym => p.answer)
62
63
  end
63
64
  end
64
65
 
@@ -80,7 +81,9 @@ module CLIUtils
80
81
  # stored flat file.
81
82
  # @return [void]
82
83
  def save
83
- File.open(@config_path, 'w') { |f| f.write(@data.deep_stringify_keys.to_yaml) }
84
+ File.open(@config_path, 'w') do |f|
85
+ f.write(@data.deep_stringify_keys.to_yaml)
86
+ end
84
87
  end
85
88
  end
86
89
  end
@@ -1,4 +1,5 @@
1
+ # Stores constants to use.
1
2
  module CLIUtils
2
3
  # The current version of the gem
3
- VERSION = '1.2.3'
4
+ VERSION = '1.2.4'
4
5
  end
@@ -2,13 +2,12 @@
2
2
  # Contains many convenient methods borrowed from Rails
3
3
  # http://api.rubyonrails.org/classes/Hash.html
4
4
  class Hash
5
-
6
5
  # Deep merges a hash into the current one.
7
6
  # @param [Hash] other_hash The hash to merge in
8
7
  # @yield &block
9
8
  # @return [Hash]
10
9
  def deep_merge!(other_hash, &block)
11
- other_hash.each_pair do |k,v|
10
+ other_hash.each_pair do |k, v|
12
11
  tv = self[k]
13
12
  if tv.is_a?(Hash) && v.is_a?(Hash)
14
13
  self[k] = tv.deep_merge(v, &block)
@@ -23,28 +22,28 @@ class Hash
23
22
  # returns the new Hash.
24
23
  # @return [Hash]
25
24
  def deep_stringify_keys
26
- deep_transform_keys{ |key| key.to_s }
25
+ deep_transform_keys { |key| key.to_s }
27
26
  end
28
27
 
29
28
  # Same as deep_stringify_keys, but destructively
30
29
  # alters the original Hash.
31
30
  # @return [Hash]
32
31
  def deep_stringify_keys!
33
- deep_transform_keys!{ |key| key.to_s }
32
+ deep_transform_keys! { |key| key.to_s }
34
33
  end
35
34
 
36
35
  # Recursively turns all Hash keys into symbols and
37
36
  # returns the new Hash.
38
37
  # @return [Hash]
39
38
  def deep_symbolize_keys
40
- deep_transform_keys{ |key| key.to_sym rescue key }
39
+ deep_transform_keys { |key| key.to_sym rescue key }
41
40
  end
42
41
 
43
42
  # Same as deep_symbolize_keys, but destructively
44
43
  # alters the original Hash.
45
44
  # @return [Hash]
46
45
  def deep_symbolize_keys!
47
- deep_transform_keys!{ |key| key.to_sym rescue key }
46
+ deep_transform_keys! { |key| key.to_sym rescue key }
48
47
  end
49
48
 
50
49
  # Generic method to perform recursive operations on a
@@ -78,7 +77,7 @@ class Hash
78
77
  result[yield(key)] = _deep_transform_keys_in_object(value, &block)
79
78
  end
80
79
  when Array
81
- object.map {|e| _deep_transform_keys_in_object(e, &block) }
80
+ object.map { |e| _deep_transform_keys_in_object(e, &block) }
82
81
  else
83
82
  object
84
83
  end
@@ -98,9 +97,9 @@ class Hash
98
97
  end
99
98
  object
100
99
  when Array
101
- object.map! {|e| _deep_transform_keys_in_object!(e, &block)}
100
+ object.map! { |e| _deep_transform_keys_in_object!(e, &block) }
102
101
  else
103
102
  object
104
103
  end
105
104
  end
106
- end
105
+ end
@@ -2,21 +2,20 @@ require 'logger'
2
2
 
3
3
  # Logger Class extensions
4
4
  class Logger
5
-
6
5
  # Creates a custom Logger level based on the passed
7
6
  # tag.
8
7
  # @param [String] tag The Logger level to create
9
8
  # @return [void]
10
9
  def self.custom_level(tag)
11
- SEV_LABEL << tag
12
- idx = SEV_LABEL.size - 1
10
+ SEV_LABEL << tag
11
+ idx = SEV_LABEL.size - 1
13
12
 
14
13
  define_method(tag.downcase.gsub(/\W+/, '_').to_sym) do |progname, &block|
15
14
  add(idx, nil, progname, &block)
16
- end
17
- end
18
-
15
+ end
16
+ end
17
+
19
18
  custom_level('PROMPT')
20
19
  custom_level('SECTION')
21
20
  custom_level('SUCCESS')
22
- end
21
+ end
@@ -1,38 +1,51 @@
1
1
  # String Class extensions
2
2
  class String
3
-
4
3
  # Outputs a string in a formatted color.
5
4
  # @param [<Integer, String>] color_code The code to use
6
5
  # @return [void]
7
6
  def colorize(color_code)
8
7
  "\033[#{ color_code }m#{ self }\033[0m"
9
8
  end
10
-
9
+
11
10
  # Makes the associated string blue.
12
11
  # @return [void]
13
- def blue; colorize(34) end
12
+ def blue
13
+ colorize(34)
14
+ end
14
15
 
15
16
  # Makes the associated string cyan.
16
17
  # @return [void]
17
- def cyan; colorize(36) end
18
+ def cyan
19
+ colorize(36)
20
+ end
18
21
 
19
22
  # Makes the associated string green.
20
23
  # @return [void]
21
- def green; colorize(32) end
24
+ def green
25
+ colorize(32)
26
+ end
22
27
 
23
28
  # Makes the associated string purple.
24
29
  # @return [void]
25
- def purple; colorize(35) end
30
+ def purple
31
+ colorize(35)
32
+ end
26
33
 
27
34
  # Makes the associated string red.
28
35
  # @return [void]
29
- def red; colorize(31) end
36
+ def red
37
+ colorize(31)
38
+ end
30
39
 
31
40
  # Makes the associated string white.
32
41
  # @return [void]
33
- def white; colorize(37) end
42
+ def white
43
+ colorize(37)
44
+ end
34
45
 
35
46
  # Makes the associated string yellow.
36
47
  # @return [void]
37
- def yellow; colorize(33) end
48
+ def yellow
49
+ colorize(33)
50
+ end
38
51
  end
@@ -39,7 +39,9 @@ module CLIUtils
39
39
  # @param [<String, Symbol>] target_name The target to remove
40
40
  # @return [void]
41
41
  def detach(target_name)
42
- fail "Cannot delete invalid target: #{ target_name }" unless @targets.key?(target_name)
42
+ unless @targets.key?(target_name)
43
+ fail "Cannot delete invalid target: #{ target_name }"
44
+ end
43
45
  @targets.delete(target_name)
44
46
  LoggerDelegator.delegate
45
47
  end
@@ -1,4 +1,4 @@
1
- require 'cliutils/pretty-io'
1
+ require 'cliutils/pretty_io'
2
2
 
3
3
  module CLIUtils
4
4
  # CLIMessenger Module
@@ -21,7 +21,7 @@ module CLIUtils
21
21
  stdout_logger.formatter = proc do |severity, datetime, progname, msg|
22
22
  send(severity.downcase, msg)
23
23
  end
24
-
24
+
25
25
  LoggerDelegator.new(STDOUT: stdout_logger)
26
26
  end
27
27
 
@@ -32,4 +32,4 @@ module CLIUtils
32
32
  @@messenger ||= default_instance
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -1,6 +1,6 @@
1
1
  require 'cliutils/messenging'
2
- require 'cliutils/prefs/pref-behavior'
3
- require 'cliutils/prefs/pref-validation'
2
+ require 'cliutils/prefs/pref_behavior'
3
+ require 'cliutils/prefs/pref_validation'
4
4
 
5
5
  module CLIUtils
6
6
  # Pref Class
@@ -43,7 +43,7 @@ module CLIUtils
43
43
  # Stores the prompt text.
44
44
  # @return [String]
45
45
  attr_accessor :prompt
46
-
46
+
47
47
  # Stores key/value combinations required to show this Pref.
48
48
  # @return [Hash]
49
49
  attr_accessor :validators
@@ -59,16 +59,9 @@ module CLIUtils
59
59
  # @param [Pref] other
60
60
  # @return [Boolean]
61
61
  def ==(other)
62
- return self.answer == other.answer &&
63
- self.behaviors == other.behaviors &&
64
- self.config_key == other.config_key &&
65
- self.config_section == other.config_section &&
66
- self.default == other.default &&
67
- self.last_error_message == other.last_error_message &&
68
- self.options == other.options &&
69
- self.prereqs == other.prereqs &&
70
- self.prompt == other.prompt &&
71
- self.validators == other.validators
62
+ @config_key == other.config_key &&
63
+ @config_section == other.config_section &&
64
+ @prompt == other.prompt
72
65
  end
73
66
 
74
67
  # Runs the passed text through this Pref's behaviors.
@@ -84,7 +77,6 @@ module CLIUtils
84
77
  messenger.warn("Skipping undefined Pref behavior: #{ b }")
85
78
  end
86
79
  end
87
-
88
80
  modified_text
89
81
  else
90
82
  text
@@ -99,7 +91,7 @@ module CLIUtils
99
91
  _confirm_options(text) &&
100
92
  _confirm_validators(text)
101
93
  end
102
-
94
+
103
95
  private
104
96
 
105
97
  # Validates a text against the options for this Pref
@@ -109,11 +101,11 @@ module CLIUtils
109
101
  ret = true
110
102
  if @options
111
103
  unless @options.include?(text)
112
- @last_error_message = "Invalid option chosen (\"#{ text }\"); valid options are: #{ options }"
104
+ @last_error_message = "Invalid option chosen (\"#{ text }\");"\
105
+ "valid options are: #{ options }"
113
106
  ret = false
114
107
  end
115
108
  end
116
-
117
109
  ret
118
110
  end
119
111
 
@@ -135,8 +127,7 @@ module CLIUtils
135
127
  end
136
128
  end
137
129
  end
138
-
139
130
  ret
140
131
  end
141
132
  end
142
- end
133
+ end
@@ -11,4 +11,4 @@ module CLIUtils
11
11
  File.expand_path(text)
12
12
  end
13
13
  end
14
- end
14
+ end
@@ -23,7 +23,7 @@ module CLIUtils
23
23
  c = text.to_s =~ /\A[A-Za-z0-9\s]+\z/
24
24
  Validator.new(c, m)
25
25
  end
26
-
26
+
27
27
  # Validates that a value is a date.
28
28
  # @param [String] text The text to inspect
29
29
  # @return [Boolean]
@@ -38,7 +38,7 @@ module CLIUtils
38
38
  # @param [String] text The text to inspect
39
39
  # @return [Boolean]
40
40
  def self.non_nil(text)
41
- m = "Nil text not allowed"
41
+ m = 'Nil text not allowed'
42
42
  c = !text.nil? && !text.empty?
43
43
  Validator.new(c, m)
44
44
  end
@@ -61,4 +61,4 @@ module CLIUtils
61
61
  Validator.new(c, m)
62
62
  end
63
63
  end
64
- end
64
+ end
@@ -1,5 +1,5 @@
1
1
  require 'cliutils/prefs/pref'
2
- require 'cliutils/pretty-io'
2
+ require 'cliutils/pretty_io'
3
3
 
4
4
  module CLIUtils
5
5
  # Engine to derive preferences from a YAML file, deliver
@@ -13,14 +13,14 @@ module CLIUtils
13
13
  # Stores a Configurator instance.
14
14
  # @return [Configurator]
15
15
  attr_reader :configurator
16
-
16
+
17
17
  # Stores answers to prompt questions.
18
18
  # @return [Array]
19
19
  attr_reader :prompts
20
20
 
21
21
  # Reads prompt data from and stores it.
22
22
  # @param [<String, Hash, Array>] data Filepath to YAML, Hash, or Array
23
- # @param [Configurator] configurator The configurator to take default values from
23
+ # @param [Configurator] configurator Source of defailt values
24
24
  # @return [void]
25
25
  def initialize(data, configurator = nil)
26
26
  @answers = []
@@ -29,21 +29,21 @@ module CLIUtils
29
29
 
30
30
  case data
31
31
  when String
32
- if File.exists?(data)
32
+ if File.exist?(data)
33
33
  @config_path = data
34
- data = YAML::load_file(data).deep_symbolize_keys
34
+ data = YAML.load_file(data).deep_symbolize_keys
35
35
  @prompts = _generate_prefs(data)
36
36
  else
37
- fail "Invalid configuration file: #{ data }"
37
+ fail "Invalid configuration file: #{ data }"
38
38
  end
39
39
  when Hash
40
40
  @config_path = nil
41
- data = {:prompts => data} unless data.keys[0] == :prompts
41
+ data = { prompts: data } unless data.keys[0] == :prompts
42
42
  data.deep_symbolize_keys!
43
43
  @prompts = _generate_prefs(data)
44
44
  when Array
45
45
  @config_path = nil
46
- data = {:prompts => data}.deep_symbolize_keys
46
+ data = { prompts: data }.deep_symbolize_keys
47
47
  @prompts = _generate_prefs(data)
48
48
  else
49
49
  fail 'Invalid configuration data'
@@ -59,8 +59,8 @@ module CLIUtils
59
59
  @prompts.reject { |p| p.prereqs }.each do |p|
60
60
  _deliver_prompt(p)
61
61
  end
62
-
63
- @prompts.find_all { |p| p.prereqs }.each do |p|
62
+
63
+ @prompts.select { |p| p.prereqs }.each do |p|
64
64
  _deliver_prompt(p) if _prereqs_fulfilled?(p)
65
65
  end
66
66
  end
@@ -75,8 +75,9 @@ module CLIUtils
75
75
  default = p.default
76
76
 
77
77
  unless @configurator.nil?
78
- unless @configurator.data[p.config_section.to_sym].nil?
79
- config_val = @configurator.data[p.config_section.to_sym][p.config_key.to_sym]
78
+ section_sym = p.config_section.to_sym
79
+ unless @configurator.data[section_sym].nil?
80
+ config_val = @configurator.data[section_sym][p.config_key.to_sym]
80
81
  default = config_val unless config_val.nil?
81
82
  end
82
83
  end
@@ -84,7 +85,6 @@ module CLIUtils
84
85
  valid_option_chosen = false
85
86
  until valid_option_chosen
86
87
  response = prompt(p.prompt, default)
87
-
88
88
  if p.validate(response)
89
89
  valid_option_chosen = true
90
90
  p.answer = p.evaluate_behaviors(response)
@@ -109,7 +109,7 @@ module CLIUtils
109
109
  def _prereqs_fulfilled?(p)
110
110
  ret = true
111
111
  p.prereqs.each do |req|
112
- a = @prompts.detect do |answer|
112
+ a = @prompts.find do |answer|
113
113
  answer.config_key == req[:config_key] &&
114
114
  answer.answer == req[:config_value]
115
115
  end
@@ -1,7 +1,9 @@
1
1
  begin
2
- require 'Win32/Console/ANSI' if (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
2
+ unless (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM).nil?
3
+ require 'Win32/Console/ANSI'
4
+ end
3
5
  rescue LoadError
4
- raise 'You must run `gem install win32console` to use CLIMessage on Windows'
6
+ raise 'You must run `gem install win32console` to use CLIMessage on Windows'
5
7
  end
6
8
 
7
9
  require 'readline'
@@ -19,7 +21,7 @@ module CLIUtils
19
21
  # @return [Integer]
20
22
  attr_accessor :wrap_char_limit
21
23
  end
22
-
24
+
23
25
  self.wrap = true
24
26
  self.wrap_char_limit = 80
25
27
 
@@ -41,7 +43,7 @@ module CLIUtils
41
43
  40.upto(47) do |bg|
42
44
  print "\033[#{attr};#{fg};#{bg}m #{fg};#{bg} "
43
45
  end
44
- puts "\033[0m"
46
+ puts "\033[0m"
45
47
  end
46
48
  end
47
49
  end
@@ -106,11 +108,11 @@ module CLIUtils
106
108
  Readline.completion_append_character = nil
107
109
  Readline.completion_proc = lambda do |prefix|
108
110
  files = Dir["#{start_dir}#{prefix}*"]
109
- files.
110
- map { |f| File.expand_path(f) }.
111
- map { |f| File.directory?(f) ? f + "/" : f }
111
+ files.map { |f| File.expand_path(f) }
112
+ .map { |f| File.directory?(f) ? "#{ f }/" : f }
112
113
  end
113
- choice = Readline.readline("# #{ prompt }#{ default.nil? ? ':' : " [default: #{ default }]:" } ".cyan)
114
+ p = "# #{ prompt }#{ default.nil? ? ':' : " [default: #{ default }]:" } "
115
+ choice = Readline.readline(p.cyan)
114
116
  if choice.empty?
115
117
  default
116
118
  else
@@ -165,13 +167,17 @@ module CLIUtils
165
167
  # @param [String] text The text to wrap
166
168
  # @param [String] prefix_str The prefix for each line
167
169
  # @return [String]
168
- def _word_wrap(text, prefix_str)
170
+ def _word_wrap(text, prefix_str)
169
171
  if PrettyIO.wrap
170
172
  return text if PrettyIO.wrap_char_limit <= 0
171
- text.gsub(/\n/, ' ').gsub(/(.{1,#{PrettyIO.wrap_char_limit - prefix_str.length}})(\s+|$)/, "#{ prefix_str }\\1\n").strip
173
+
174
+ limit = PrettyIO.wrap_char_limit - prefix_str.length
175
+ text.gsub(/\n/, ' ')
176
+ .gsub(/(.{1,#{ limit }})(\s+|$)/, "#{ prefix_str }\\1\n")
177
+ .strip
172
178
  else
173
179
  text
174
180
  end
175
181
  end
176
182
  end
177
- end
183
+ end
data/lib/cliutils.rb CHANGED
@@ -1,18 +1,17 @@
1
- require 'cliutils/ext/Hash+Extensions'
2
- require 'cliutils/ext/Logger+Extensions'
3
- require 'cliutils/ext/String+Extensions'
1
+ require 'cliutils/ext/hash_extensions'
2
+ require 'cliutils/ext/logger_extensions'
3
+ require 'cliutils/ext/string_extensions'
4
4
 
5
- require 'cliutils/pretty-io'
5
+ require 'cliutils/constants'
6
+ require 'cliutils/pretty_io'
6
7
  require 'cliutils/configurator'
7
8
  require 'cliutils/configuration'
8
- require 'cliutils/logger-delegator'
9
+ require 'cliutils/logger_delegator'
9
10
  require 'cliutils/messenging'
10
11
  require 'cliutils/prefs'
11
12
  require 'cliutils/prefs/pref'
12
- require 'cliutils/version'
13
13
 
14
14
  # The CLIUtils module, which wraps everything
15
15
  # in this gem.
16
16
  module CLIUtils
17
-
18
- end
17
+ end
@@ -3,6 +3,7 @@ require 'test/unit'
3
3
 
4
4
  require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/configurator')
5
5
 
6
+ # Tests for the Configurator class
6
7
  class TestConfigurator < Test::Unit::TestCase
7
8
  def setup
8
9
  @config_path = '/tmp/test.config'
@@ -10,25 +11,25 @@ class TestConfigurator < Test::Unit::TestCase
10
11
  end
11
12
 
12
13
  def teardown
13
- FileUtils.rm(@config_path) if File.exists?(@config_path)
14
+ FileUtils.rm(@config_path) if File.exist?(@config_path)
14
15
  end
15
16
 
16
17
  def test_add_section
17
18
  @config.add_section(:test)
18
- assert_equal(@config.data, {test: {}})
19
+ assert_equal(@config.data, test: {})
19
20
  end
20
21
 
21
22
  def test_delete_section
22
23
  @config.add_section(:test)
23
24
  @config.add_section(:test2)
24
25
  @config.delete_section(:test)
25
- assert_equal(@config.data, {test2: {}})
26
+ assert_equal(@config.data, test2: {})
26
27
  end
27
28
 
28
29
  def test_accessing
29
30
  @config.add_section(:test)
30
31
  @config.data[:test].merge!(name: 'Bob')
31
- assert_equal(@config.test, {name: 'Bob'})
32
+ assert_equal(@config.test, name: 'Bob')
32
33
  end
33
34
 
34
35
  def test_reset
@@ -40,9 +41,9 @@ class TestConfigurator < Test::Unit::TestCase
40
41
 
41
42
  def test_save
42
43
  @config.add_section(:section1)
43
- @config.section1.merge!({ a: 'test', b: 'test' })
44
+ @config.section1.merge!(a: 'test', b: 'test')
44
45
  @config.save
45
-
46
+
46
47
  File.open(@config_path, 'r') do |f|
47
48
  assert_output("---\nsection1:\n a: test\n b: test\n") { puts f.read }
48
49
  end
@@ -1,20 +1,21 @@
1
1
  require 'test/unit'
2
2
 
3
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/Hash+Extensions')
3
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/hash_extensions')
4
4
 
5
+ # Tests for the Hash extension methods
5
6
  class TestHashExtensions < Test::Unit::TestCase
6
7
  def test_deep_merge!
7
- h1 = {key: 'value', key2: ['value1', 'value2']}
8
- h2 = {key3: {subkey1: 'value1'}, key: 'another_value'}
9
- exp_result = {:key=>"another_value", :key2=>["value1", "value2"], :key3=>{:subkey1=>"value1"}}
8
+ h1 = { key: 'value', key2: %w(value1, value2) }
9
+ h2 = { key: 'another_value' }
10
+ exp_result = { key: 'another_value', key2: %w(value1, value2) }
10
11
  actual_result = h1.deep_merge!(h2)
11
12
 
12
13
  assert_equal(exp_result, actual_result)
13
14
  end
14
15
 
15
16
  def test_deep_stringify_keys
16
- h = {key: {subkey1: 'value1', subkey2: {subsubkey1: 'value'}}}
17
- exp_result = {'key' => {'subkey1' => 'value1', 'subkey2' => {'subsubkey1' => 'value'}}}
17
+ h = { key: { subkey1: 'value1', subkey2: { subsubkey1: 'value' } } }
18
+ exp_result = { 'key' => { 'subkey1' => 'value1', 'subkey2' => { 'subsubkey1' => 'value' } } }
18
19
  actual_result = h.deep_stringify_keys
19
20
 
20
21
  assert_not_equal(h, actual_result)
@@ -23,7 +24,7 @@ class TestHashExtensions < Test::Unit::TestCase
23
24
 
24
25
  def test_deep_stringify_keys!
25
26
  h = {key: {subkey1: 'value1', subkey2: {subsubkey1: 'value'}}}
26
- exp_result = {'key' => {'subkey1' => 'value1', 'subkey2' => {'subsubkey1' => 'value'}}}
27
+ exp_result = { 'key' => { 'subkey1' => 'value1', 'subkey2' => { 'subsubkey1' => 'value' } } }
27
28
  actual_result = h.deep_stringify_keys!
28
29
 
29
30
  assert_equal(h, actual_result)
@@ -31,8 +32,8 @@ class TestHashExtensions < Test::Unit::TestCase
31
32
  end
32
33
 
33
34
  def test_deep_symbolize_keys
34
- h = {'key' => {'subkey1' => 'value1', 'subkey2' => {'subsubkey1' => 'value'}}}
35
- exp_result = {key: {subkey1: 'value1', subkey2: {subsubkey1: 'value'}}}
35
+ h = { 'key' => { 'subkey1' => 'value1', 'subkey2' => { 'subsubkey1' => 'value'} } }
36
+ exp_result = { key: { subkey1: 'value1', subkey2: { subsubkey1: 'value'} } }
36
37
  actual_result = h.deep_symbolize_keys
37
38
 
38
39
  assert_not_equal(h, actual_result)
@@ -40,8 +41,8 @@ class TestHashExtensions < Test::Unit::TestCase
40
41
  end
41
42
 
42
43
  def test_deep_symbolize_keys!
43
- h = {'key' => {'subkey1' => 'value1', 'subkey2' => {'subsubkey1' => 'value'}}}
44
- exp_result = {key: {subkey1: 'value1', subkey2: {subsubkey1: 'value'}}}
44
+ h = { 'key' => { 'subkey1' => 'value1', 'subkey2' => { 'subsubkey1' => 'value'} } }
45
+ exp_result = { key: { subkey1: 'value1', subkey2: { subsubkey1: 'value'} } }
45
46
  actual_result = h.deep_symbolize_keys!
46
47
 
47
48
  assert_equal(h, actual_result)
@@ -1,16 +1,17 @@
1
1
  require 'test/unit'
2
2
 
3
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/Logger+Extensions')
3
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/logger_extensions')
4
4
 
5
+ # Tests for the Logger extension methods
5
6
  class TestLoggerExtensions < Test::Unit::TestCase
6
7
  def test_custom_level
7
8
  l = Logger.new(STDOUT)
8
9
  l.formatter = proc do |severity, datetime, progname, msg|
9
10
  puts "#{ severity }: #{ msg }"
10
11
  end
11
-
12
+
12
13
  assert_output("PROMPT: test\n") { l.prompt('test') }
13
14
  assert_output("SECTION: test\n") { l.section('test') }
14
15
  assert_output("SUCCESS: test\n") { l.success('test') }
15
16
  end
16
- end
17
+ end
@@ -1,22 +1,23 @@
1
1
  require 'logger'
2
2
  require 'test/unit'
3
3
 
4
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/String+Extensions')
5
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/pretty-io')
6
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/logger-delegator')
4
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/string_extensions')
5
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/pretty_io')
6
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/logger_delegator')
7
7
  require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/messenging')
8
8
 
9
+ # Tests for the Hash extension methods
9
10
  class TestMessenging < Test::Unit::TestCase
10
11
  include CLIUtils::Messenging
11
-
12
+
12
13
  def setup
13
14
  @file1path = '/tmp/file1.txt'
14
15
  end
15
16
 
16
17
  def teardown
17
- FileUtils.rm(@file1path) if File.exists?(@file1path)
18
+ FileUtils.rm(@file1path) if File.exist?(@file1path)
18
19
  end
19
-
20
+
20
21
  def test_stdout_output
21
22
  assert_output('# This is error'.red + "\n") { messenger.send(:error, 'This is error') }
22
23
  assert_output('# This is info'.blue + "\n") { messenger.send(:info, 'This is info') }
@@ -24,10 +25,10 @@ class TestMessenging < Test::Unit::TestCase
24
25
  assert_output('# This is success'.green + "\n") { messenger.send(:success, 'This is success') }
25
26
  assert_output('# This is warn'.yellow + "\n") { messenger.send(:warn, 'This is warn') }
26
27
  end
27
-
28
+
28
29
  def test_wrapping
29
30
  CLIUtils::PrettyIO.wrap_char_limit = 35
30
-
31
+
31
32
  long_str = 'This is a really long string that should wrap itself at some point, okay?'
32
33
  expected_str = long_str.gsub(/\n/, ' ').gsub(/(.{1,#{CLIUtils::PrettyIO.wrap_char_limit - 2}})(\s+|$)/, "# \\1\n").strip
33
34
  assert_output(expected_str.blue + "\n") { messenger.send(:info, long_str) }
@@ -38,13 +39,13 @@ class TestMessenging < Test::Unit::TestCase
38
39
  file_logger.formatter = proc do |severity, datetime, progname, msg|
39
40
  "#{ severity }: #{ msg }\n"
40
41
  end
41
-
42
+
42
43
  messenger.attach(FILE: file_logger)
43
44
  messenger.send(:info, 'Info test')
44
45
  messenger.send(:error, 'Error test')
45
46
  messenger.detach(:FILE)
46
47
  messenger.send(:warn, 'Warn test')
47
-
48
+
48
49
  File.open(@file1path, 'r') do |f|
49
50
  assert_output("INFO: Info test\nERROR: Error test\n") { puts f.read.lines.to_a[1..-1].join }
50
51
  end
data/test/prefs_test.rb CHANGED
@@ -1,72 +1,73 @@
1
1
  require 'test/unit'
2
2
  require 'yaml'
3
3
 
4
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/Hash+Extensions')
4
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/hash_extensions')
5
5
  require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs')
6
6
  require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/prefs/pref')
7
7
 
8
+ # Tests for the Prefs class
8
9
  class TestPrefs < Test::Unit::TestCase
9
10
  def setup
10
11
  @prefs_arr = [
11
12
  {
12
- "prompt" => "Batman or Superman?",
13
- "default" => "Batman",
14
- "config_key" => "superhero",
15
- "config_section" => "personal_info"
13
+ 'prompt' => 'Batman or Superman?',
14
+ 'default' => 'Batman',
15
+ 'config_key' => 'superhero',
16
+ 'config_section' => 'personal_info'
16
17
  },
17
18
  {
18
- "prompt" => "Do you feel smart for preferring Batman?",
19
- "default" => "Y",
20
- "config_key" => "batman_answer",
21
- "config_section" => "personal_info",
22
- "prereqs" => [
19
+ 'prompt' => 'Do you feel smart for preferring Batman?',
20
+ 'default' => 'Y',
21
+ 'config_key' => 'batman_answer',
22
+ 'config_section' => 'personal_info',
23
+ 'prereqs' => [
23
24
  {
24
- "config_key" => "superhero",
25
- "config_value" => "Batman"
25
+ 'config_key' => 'superhero',
26
+ 'config_value' => 'Batman'
26
27
  }
27
28
  ]
28
29
  },
29
30
  {
30
- "prompt" => "Why do you prefer Superman?!",
31
- "default" => "No clue",
32
- "config_key" => "superman_answer",
33
- "config_section" => "personal_info",
34
- "prereqs" => [
31
+ 'prompt' => 'Why do you prefer Superman?!',
32
+ 'default' => 'No clue',
33
+ 'config_key' => 'superman_answer',
34
+ 'config_section' => 'personal_info',
35
+ 'prereqs' => [
35
36
  {
36
- "config_key" => "superhero",
37
- "config_value" => "Superman"
37
+ 'config_key' => 'superhero',
38
+ 'config_value' => 'Superman'
38
39
  }
39
40
  ]
40
41
  }
41
42
  ]
42
-
43
+
43
44
  @prefs_hash = {:prompts=>@prefs_arr}
44
45
  @prefs_filepath = '/tmp/prefstest.yaml'
45
46
  FileUtils.cp(File.join(File.dirname(__FILE__), '..', 'test/test_files/prefstest.yaml'), @prefs_filepath)
46
47
  end
47
48
 
48
49
  def teardown
49
- FileUtils.rm(@prefs_filepath) if File.exists?(@prefs_filepath)
50
+ FileUtils.rm(@prefs_filepath) if File.exist?(@prefs_filepath)
50
51
  end
51
52
 
52
53
  def test_file_creation
53
54
  p = CLIUtils::Prefs.new(@prefs_filepath)
54
55
  prefs = YAML::load_file(@prefs_filepath).deep_symbolize_keys
55
56
 
56
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prefs)
57
+ assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
57
58
  end
58
59
 
59
60
  def test_array_creation
60
61
  p = CLIUtils::Prefs.new(@prefs_arr)
61
62
  prefs = @prefs_hash.deep_symbolize_keys
62
-
63
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prefs)
63
+
64
+ assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
64
65
  end
65
66
 
66
67
  def test_hash_creation
67
68
  p = CLIUtils::Prefs.new(@prefs_hash)
68
69
  prefs = @prefs_hash.deep_symbolize_keys
69
-
70
- assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prefs)
70
+
71
+ assert_equal(prefs[:prompts].map { |p| CLIUtils::Pref.new(p) }, p.prompts)
71
72
  end
72
73
  end
@@ -1,7 +1,8 @@
1
1
  require 'test/unit'
2
2
 
3
- require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/String+Extensions')
3
+ require File.join(File.dirname(__FILE__), '..', 'lib/cliutils/ext/string_extensions')
4
4
 
5
+ # Tests for the String extension methods
5
6
  class TestStringExtensions < Test::Unit::TestCase
6
7
  def test_custom_colors
7
8
  assert_output("\e[34mtest\e[0m\n") { puts 'test'.blue }
@@ -11,4 +12,4 @@ class TestStringExtensions < Test::Unit::TestCase
11
12
  assert_output("\e[31mtest\e[0m\n") { puts 'test'.red }
12
13
  assert_output("\e[33mtest\e[0m\n") { puts 'test'.yellow }
13
14
  end
14
- end
15
+ end
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.3
4
+ version: 1.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Bach
@@ -86,17 +86,17 @@ files:
86
86
  - lib/cliutils.rb
87
87
  - lib/cliutils/configuration.rb
88
88
  - lib/cliutils/configurator.rb
89
- - lib/cliutils/ext/Hash+Extensions.rb
90
- - lib/cliutils/ext/Logger+Extensions.rb
91
- - lib/cliutils/ext/String+Extensions.rb
92
- - lib/cliutils/logger-delegator.rb
89
+ - lib/cliutils/constants.rb
90
+ - lib/cliutils/ext/hash_extensions.rb
91
+ - lib/cliutils/ext/logger_extensions.rb
92
+ - lib/cliutils/ext/string_extensions.rb
93
+ - lib/cliutils/logger_delegator.rb
93
94
  - lib/cliutils/messenging.rb
94
95
  - lib/cliutils/prefs.rb
95
- - lib/cliutils/prefs/pref-behavior.rb
96
- - lib/cliutils/prefs/pref-validation.rb
97
96
  - lib/cliutils/prefs/pref.rb
98
- - lib/cliutils/pretty-io.rb
99
- - lib/cliutils/version.rb
97
+ - lib/cliutils/prefs/pref_behavior.rb
98
+ - lib/cliutils/prefs/pref_validation.rb
99
+ - lib/cliutils/pretty_io.rb
100
100
  - res/readme-images/messenger-types-1.png
101
101
  - res/readme-images/messenger-warn.png
102
102
  - res/readme-images/multi-logger.png