lib/pwm.rb in pwm-1.2.1 vs lib/pwm.rb in pwm-1.2.2
- old
+ new
@@ -1,20 +1,18 @@
-require "pwm/version"
+require 'pwm/version'
module Pwm
-
# Internal: The exception raised when a requested password length is
# too short.
class TooShortException < Exception; end
# Internal: The set of characters from which passwords will be assembled.
# This could be overridden if you don't like the default.
#
# Returns the set of characters as an Array.
def self.characters
- (('A'..'Z').to_a + ('a'..'z').to_a +
- ('2'..'9').to_a) - ['I', 'O', 'l']
+ (('A'..'Z').to_a + ('a'..'z').to_a + ('2'..'9').to_a) - %w(I O l)
end
# Public: Generate a password.
#
# length - The length of the password. Minimum is 8. Default is 16.
@@ -28,21 +26,37 @@
# # => 'oUX4fmqr'
#
# Returns the generated password as a String if length >= 8,
# or raises exception if length < 8.
def self.password(length = 16)
- if length < 8
- raise Pwm::TooShortException,
- "Requested length #{length} is too short."
- else
- password = ''
- until (password.match(/[A-Z]/) &&
- password.match(/[a-z]/) &&
- password.match(/[0-9]/))
- password = (0..length - 1).inject('') do |pw, n|
- pw + characters[rand(characters.length)]
- end
+ fail Pwm::TooShortException, "#{length} is too short." if length < 8
+ password = ''
+ until acceptable?(password)
+ password = (0..length - 1).reduce('') do |pw, n|
+ pw + characters[rand(characters.length)]
end
- password
end
+ password
+ end
+
+ private
+
+ # Private: Checks if a password is acceptable.
+ #
+ # password - the password to check
+ #
+ # Examples
+ #
+ # Pwm.acceptable?('AaBbCc1234')
+ # # => true
+ #
+ # Pwm.acceptable?('ABCDEFGHIJ')
+ # # => false
+ #
+ # Returns true if password has at least one of each required character
+ # class, or false if not.
+ def self.acceptable?(password)
+ password.match(/[A-Z]/) &&
+ password.match(/[a-z]/) &&
+ password.match(/[0-9]/)
end
end