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