Class: Omnizip::Password::PasswordValidator
- Inherits:
-
Object
- Object
- Omnizip::Password::PasswordValidator
- Defined in:
- lib/omnizip/password/password_validator.rb
Overview
Validates password strength and requirements
Instance Attribute Summary collapse
-
#min_length ⇒ Object
readonly
Returns the value of attribute min_length.
-
#require_lowercase ⇒ Object
readonly
Returns the value of attribute require_lowercase.
-
#require_numbers ⇒ Object
readonly
Returns the value of attribute require_numbers.
-
#require_special ⇒ Object
readonly
Returns the value of attribute require_special.
-
#require_uppercase ⇒ Object
readonly
Returns the value of attribute require_uppercase.
Instance Method Summary collapse
-
#initialize(min_length: 8, require_uppercase: false, require_lowercase: false, require_numbers: false, require_special: false) ⇒ PasswordValidator
constructor
Initialize password validator.
-
#strength(password) ⇒ Integer
Get password strength score (0-100).
-
#strength_label(password) ⇒ Symbol
Get password strength label.
-
#valid?(password) ⇒ Boolean
Check if password is valid (without raising).
-
#validate(password) ⇒ Boolean
Validate password.
Constructor Details
#initialize(min_length: 8, require_uppercase: false, require_lowercase: false, require_numbers: false, require_special: false) ⇒ PasswordValidator
Initialize password validator
16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/omnizip/password/password_validator.rb', line 16 def initialize( min_length: 8, require_uppercase: false, require_lowercase: false, require_numbers: false, require_special: false ) @min_length = min_length @require_uppercase = require_uppercase @require_lowercase = require_lowercase @require_numbers = require_numbers @require_special = require_special end |
Instance Attribute Details
#min_length ⇒ Object (readonly)
Returns the value of attribute min_length.
7 8 9 |
# File 'lib/omnizip/password/password_validator.rb', line 7 def min_length @min_length end |
#require_lowercase ⇒ Object (readonly)
Returns the value of attribute require_lowercase.
7 8 9 |
# File 'lib/omnizip/password/password_validator.rb', line 7 def require_lowercase @require_lowercase end |
#require_numbers ⇒ Object (readonly)
Returns the value of attribute require_numbers.
7 8 9 |
# File 'lib/omnizip/password/password_validator.rb', line 7 def require_numbers @require_numbers end |
#require_special ⇒ Object (readonly)
Returns the value of attribute require_special.
7 8 9 |
# File 'lib/omnizip/password/password_validator.rb', line 7 def require_special @require_special end |
#require_uppercase ⇒ Object (readonly)
Returns the value of attribute require_uppercase.
7 8 9 |
# File 'lib/omnizip/password/password_validator.rb', line 7 def require_uppercase @require_uppercase end |
Instance Method Details
#strength(password) ⇒ Integer
Get password strength score (0-100)
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/omnizip/password/password_validator.rb', line 60 def strength(password) return 0 if password.nil? || password.empty? score = 0 # Length score (up to 40 points) score += [password.length * 4, 40].min # Character variety (up to 60 points) score += 15 if /[a-z]/.match?(password) score += 15 if /[A-Z]/.match?(password) score += 15 if /[0-9]/.match?(password) score += 15 if /[^a-zA-Z0-9]/.match?(password) [score, 100].min end |
#strength_label(password) ⇒ Symbol
Get password strength label
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/omnizip/password/password_validator.rb', line 80 def strength_label(password) score = strength(password) case score when 0...30 :weak when 30...50 :fair when 50...75 :good else :strong end end |
#valid?(password) ⇒ Boolean
Check if password is valid (without raising)
50 51 52 53 54 55 |
# File 'lib/omnizip/password/password_validator.rb', line 50 def valid?(password) validate(password) true rescue ArgumentError false end |
#validate(password) ⇒ Boolean
Validate password
34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/omnizip/password/password_validator.rb', line 34 def validate(password) raise ArgumentError, "Password cannot be nil" if password.nil? raise ArgumentError, "Password cannot be empty" if password.empty? check_length(password) check_uppercase(password) if require_uppercase check_lowercase(password) if require_lowercase check_numbers(password) if require_numbers check_special(password) if require_special true end |