     }
 }
 
-class NJOAllowedCharacterRule: NSObject, NJOPasswordRule
+public class NJOAllowedCharacterRule: NSObject, NJOPasswordRule
 {
     private var disallowedCharacters: NSCharacterSet! = nil
     
-    convenience init(characterSet: NSCharacterSet)
+    public convenience init(characterSet: NSCharacterSet)
     {
         self.init()
         disallowedCharacters = characterSet.invertedSet
     }
     
-    func evaluateWithString(string: String) -> Bool
+    public func evaluateWithString(string: String) -> Bool
     {
         if disallowedCharacters == nil
         {


// MARK: Password Validation

class NJOPasswordValidator: NSObject
{
    private var _rules: [NJOPasswordRule]! = nil
    
    convenience init(rules: [NJOPasswordRule])
    {
        self.init()
        _rules = rules
    }
    
    class func standardValidator() -> NJOPasswordValidator
    {
        return NJOPasswordValidator(rules: [NJOLengthRule(min: 6, max: 24)])
    }
    
    class func standardLengthRule() -> NJOLengthRule
    {
        return NJOLengthRule(min: 6, max: 24)
    }
    
    func validatePassword(password: String) -> [NJOPasswordRule]?
    {
        var failingRules: [NJOPasswordRule] = []
        

    case VeryStrong
}

public protocol NJOPasswordRule
{
    func evaluateWithString(string: String) -> Bool
    
    func localizedErrorDescription() -> String
}

public enum NJORequiredCharacterRulePreset
{
    case LowercaseCharacter
    case UppercaseCharacter
