password_policy.rb 593 B

1234567891011121314151617181920212223242526272829303132
  1. # Check if password matches system settings
  2. class PasswordPolicy
  3. include ::Mixin::HasBackends
  4. attr_reader :password
  5. # @param password [String, nil] to evaluate. nil is treated as empty string
  6. def initialize(password)
  7. @password = password || ''
  8. end
  9. def valid?
  10. errors.blank?
  11. end
  12. def error
  13. errors.first
  14. end
  15. def errors
  16. @errors ||= applicable_backends
  17. .map { |backend| backend.new(password) }
  18. .reject(&:valid?)
  19. .map(&:error)
  20. end
  21. private
  22. def applicable_backends
  23. @applicable_backends ||= backends.select(&:applicable?)
  24. end
  25. end