Skip to content

Commit abc729a

Browse files
committed
Changing to version 2
1 parent 658c736 commit abc729a

27 files changed

Lines changed: 468 additions & 547 deletions

README.md

Lines changed: 15 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ Swift Validator is a rule-based validation library for Swift.
77

88
## Core Concepts
99

10-
* ```UITextField``` + ```ValidationRule``` go into ```Validator```
11-
* ```UITextField``` + ```ValidationError``` come out of ```Validator```
12-
* ```UITextField``` is registered to ```Validator```
13-
* ```Validator``` evaluates ```ValidationRules``` sequentially and stops evaluating when a ```ValidationRule``` fails.
10+
* ``UITextField`` + ``ValidationRule`` go into ```Validator``
11+
* ``ITextField`` + ``ValidationError`` come out of ```Validator``
12+
* ``UITextField`` is registered to ``Validator``
13+
* ``Validator`` evaluates ``ValidationRules`` sequentially and stops evaluating when a ``ValidationRule`` fails.
1414
* Keys are used to allow field registration in TableViewControllers and complex view hierarchies
1515

1616
## Quick Start
1717

18-
Initialize the ```Validator``` by setting a delegate to a View Controller or other object.
18+
Initialize the ``Validator`` by setting a delegate to a View Controller or other object.
1919

2020
```swift
2121

@@ -33,32 +33,23 @@ Register the fields that you want to validate
3333

3434
```swift
3535

36-
var fields:[String] = ["FullName", "Email", "Phone"]
36+
// Validation Rules are evaluated from left to right.
37+
validator.registerField(fullNameTextField, rules: [RequiredRule(), FullNameRule()])
3738

38-
// Validation Rules are evaluated from left to right. The first rule is ValidationRuleType.Required the second is ValidationRuleType.FullName.
39-
validator.registerFieldByKey(fields[0], textField:nameTextField, rules: [.Required, .FullName])
40-
validator.registerFieldByKey(fields[1], textField:emailTextField, rules: [.Required, .Email])
41-
validator.registerFieldByKe(fields[2], textField:phoneTextField, rules: [.Required, .PhoneNumber])
39+
// You can pass in error labels with your rules
4240

43-
```
44-
45-
Validate Individual Field
46-
47-
```swift
48-
49-
validator.validateFieldByKey(fields[0], delegate:self)
41+
validator.registerField(emailTextField, errorLabel: emailErrorLabel, rules: [RequiredRule(), EmailRule()])
5042

51-
// ValidationFieldDelegate methods
52-
func validationFieldSuccess(key:String, validField:UITextField){
53-
validField.backgroundColor = UIColor.greenColor()
54-
}
43+
// You can validate against other fields
44+
validator.registerField(emailConfirmTextField, errorLabel: emailConfirmErrorLabel, rules: [RequiredRule(), EmailRule(), ConfirmationRule(confirmField: emailTextField)])
5545

56-
func validationFieldFailure(key:String, error:ValidationError){
57-
println(error.error.description)
58-
}
46+
// You can now pass in regex and length parameters through overloaded contructors
47+
validator.registerField(phoneNumberTextField, errorLabel: phoneNumberErrorLabel, rules: [RequiredRule(), MinLengthRule(length: 9)])
48+
validator.registerField(zipcodeTextField, errorLabel: zipcodeErrorLabel, rules: [RequiredRule(), ZipCodeRule()])
5949

6050
```
6151

52+
6253
Validate All Fields
6354

6455
```swift
@@ -104,109 +95,11 @@ class SSNValidation: Validation {
10495

10596
}
10697

107-
```
108-
109-
Add the ```ValidationRuleType.SocialSecurity```
110-
111-
```swift
112-
113-
enum ValidationRuleType {
114-
case Required,
115-
Email,
116-
Password,
117-
MinLength,
118-
MaxLength,
119-
ZipCode,
120-
PhoneNumber,
121-
FullName,
122-
SocialSecurity // Added to the ValidationRuleTypes
123-
}
124-
125-
```
126-
127-
Add the ```ValidationErrorType.SocialSecurity``` and ```description()```
128-
129-
```swift
130-
131-
enum ValidationErrorType {
132-
case Required,
133-
Email,
134-
Password,
135-
MinLength,
136-
MaxLength,
137-
ZipCode,
138-
PhoneNumber,
139-
FullName,
140-
SocialSecurity, // Added to the ValidationErrorTypes
141-
NoError
142-
143-
func description() -> String {
144-
switch self {
145-
case .Required:
146-
return "Required field"
147-
case .Email:
148-
return "Must be a valid email"
149-
case .MaxLength:
150-
return "This field should be less than"
151-
case .ZipCode:
152-
return "5 digit zipcode"
153-
case .PhoneNumber:
154-
return "10 digit phone number"
155-
case .Password:
156-
return "Must be at least 8 characters"
157-
case .FullName:
158-
return "Provide a first & last name"
159-
// Adding the desired error message
160-
case .SocialSecurity:
161-
return "SSN is XXX-XX-XXXX"
162-
default:
163-
return ""
164-
}
165-
}
166-
167-
}
168-
169-
```
170-
Register the ```SSNValidation``` with the ```ValidationFactory```
171-
172-
```swift
173-
174-
class ValidationFactory {
175-
class func validationForRule(rule:ValidationRuleType) -> Validation {
176-
switch rule {
177-
case .Required:
178-
return RequiredValidation()
179-
case .Email:
180-
return EmailValidation()
181-
case .MinLength:
182-
return MinLengthValidation()
183-
case .MaxLength:
184-
return MaxLengthValidation()
185-
case .PhoneNumber:
186-
return PhoneNumberValidation()
187-
case .ZipCode:
188-
return ZipCodeValidation()
189-
case .FullName:
190-
return FullNameValidation()
191-
// Add Validation to allow Factory to create one on the fly for you
192-
case .SocialSecurity:
193-
return SSNValidation()
194-
default:
195-
return RequiredValidation()
196-
}
197-
}
198-
}
199-
200-
```
20198
Credits
20299
-------
203100

204101
Swift Validator is written and maintained by Jeff Potter [@jpotts18](http://twitter.com/jpotts18) and friends.
205102

206-
Currently funded and maintained by [RingSeven](http://ringseven.com)
207-
208-
![RingSeven](https://avatars1.githubusercontent.com/u/8309133?v=3&s=200)
209-
210103
## Contributing
211104

212105
1. [Fork it](https://github.com/jpotts18/swift-validator/fork)

Validator.xcodeproj/project.pbxproj

Lines changed: 35 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,23 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
628637261AAA474B00BC8FCF /* MinLengthRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 628637251AAA474B00BC8FCF /* MinLengthRule.swift */; };
11+
628637281AAA49E300BC8FCF /* ConfirmRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 628637271AAA49E300BC8FCF /* ConfirmRule.swift */; };
1012
62D1AE1D1A1E6D4400E4DFF8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE1C1A1E6D4400E4DFF8 /* AppDelegate.swift */; };
1113
62D1AE1F1A1E6D4400E4DFF8 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE1E1A1E6D4400E4DFF8 /* ViewController.swift */; };
1214
62D1AE221A1E6D4400E4DFF8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 62D1AE201A1E6D4400E4DFF8 /* Main.storyboard */; };
1315
62D1AE241A1E6D4400E4DFF8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 62D1AE231A1E6D4400E4DFF8 /* Images.xcassets */; };
1416
62D1AE271A1E6D4400E4DFF8 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 62D1AE251A1E6D4400E4DFF8 /* LaunchScreen.xib */; };
1517
62D1AE331A1E6D4500E4DFF8 /* ValidatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE321A1E6D4500E4DFF8 /* ValidatorTests.swift */; };
16-
62D1AE3E1A1E6FEF00E4DFF8 /* FullNameValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE3D1A1E6FEF00E4DFF8 /* FullNameValidation.swift */; };
17-
62D1AE491A1E6FF800E4DFF8 /* EmailValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE3F1A1E6FF800E4DFF8 /* EmailValidation.swift */; };
18-
62D1AE4A1A1E6FF800E4DFF8 /* MaxLengthValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE401A1E6FF800E4DFF8 /* MaxLengthValidation.swift */; };
19-
62D1AE4B1A1E6FF800E4DFF8 /* MinLengthValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE411A1E6FF800E4DFF8 /* MinLengthValidation.swift */; };
20-
62D1AE4C1A1E6FF800E4DFF8 /* PhoneNumberValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE421A1E6FF800E4DFF8 /* PhoneNumberValidation.swift */; };
21-
62D1AE4D1A1E6FF800E4DFF8 /* RequiredValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE431A1E6FF800E4DFF8 /* RequiredValidation.swift */; };
22-
62D1AE4E1A1E6FF800E4DFF8 /* Validation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE441A1E6FF800E4DFF8 /* Validation.swift */; };
2318
62D1AE4F1A1E6FF800E4DFF8 /* ValidationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE451A1E6FF800E4DFF8 /* ValidationError.swift */; };
24-
62D1AE501A1E6FF800E4DFF8 /* ValidationErrorType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE461A1E6FF800E4DFF8 /* ValidationErrorType.swift */; };
25-
62D1AE511A1E6FF800E4DFF8 /* ValidationFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE471A1E6FF800E4DFF8 /* ValidationFactory.swift */; };
2619
62D1AE521A1E6FF800E4DFF8 /* ValidationRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE481A1E6FF800E4DFF8 /* ValidationRule.swift */; };
27-
62D1AE571A1E700200E4DFF8 /* ValidationRuleType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE531A1E700200E4DFF8 /* ValidationRuleType.swift */; };
2820
62D1AE581A1E700200E4DFF8 /* Validator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE541A1E700200E4DFF8 /* Validator.swift */; };
29-
62D1AE591A1E700200E4DFF8 /* ZipCodeValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE551A1E700200E4DFF8 /* ZipCodeValidation.swift */; };
30-
62D1AE5A1A1E700200E4DFF8 /* PasswordValidation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62D1AE561A1E700200E4DFF8 /* PasswordValidation.swift */; };
21+
62DC8D651AAA42520095DFA7 /* Rule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D641AAA42520095DFA7 /* Rule.swift */; };
22+
62DC8D681AAA42920095DFA7 /* FullNameRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D671AAA42920095DFA7 /* FullNameRule.swift */; };
23+
62DC8D6C1AAA42CE0095DFA7 /* EmailRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D691AAA42CE0095DFA7 /* EmailRule.swift */; };
24+
62DC8D6D1AAA42CE0095DFA7 /* RequiredRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D6A1AAA42CE0095DFA7 /* RequiredRule.swift */; };
25+
62DC8D6E1AAA42CE0095DFA7 /* PasswordRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D6B1AAA42CE0095DFA7 /* PasswordRule.swift */; };
26+
62DC8D711AAA43110095DFA7 /* ZipCodeRule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62DC8D701AAA43110095DFA7 /* ZipCodeRule.swift */; };
3127
/* End PBXBuildFile section */
3228

3329
/* Begin PBXContainerItemProxy section */
@@ -41,6 +37,8 @@
4137
/* End PBXContainerItemProxy section */
4238

4339
/* Begin PBXFileReference section */
40+
628637251AAA474B00BC8FCF /* MinLengthRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MinLengthRule.swift; sourceTree = "<group>"; };
41+
628637271AAA49E300BC8FCF /* ConfirmRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfirmRule.swift; sourceTree = "<group>"; };
4442
62D1AE171A1E6D4400E4DFF8 /* Validator.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Validator.app; sourceTree = BUILT_PRODUCTS_DIR; };
4543
62D1AE1B1A1E6D4400E4DFF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
4644
62D1AE1C1A1E6D4400E4DFF8 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@@ -51,21 +49,15 @@
5149
62D1AE2C1A1E6D4500E4DFF8 /* ValidatorTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ValidatorTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
5250
62D1AE311A1E6D4500E4DFF8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
5351
62D1AE321A1E6D4500E4DFF8 /* ValidatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ValidatorTests.swift; sourceTree = "<group>"; };
54-
62D1AE3D1A1E6FEF00E4DFF8 /* FullNameValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FullNameValidation.swift; sourceTree = "<group>"; };
55-
62D1AE3F1A1E6FF800E4DFF8 /* EmailValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmailValidation.swift; sourceTree = "<group>"; };
56-
62D1AE401A1E6FF800E4DFF8 /* MaxLengthValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MaxLengthValidation.swift; sourceTree = "<group>"; };
57-
62D1AE411A1E6FF800E4DFF8 /* MinLengthValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MinLengthValidation.swift; sourceTree = "<group>"; };
58-
62D1AE421A1E6FF800E4DFF8 /* PhoneNumberValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PhoneNumberValidation.swift; sourceTree = "<group>"; };
59-
62D1AE431A1E6FF800E4DFF8 /* RequiredValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequiredValidation.swift; sourceTree = "<group>"; };
60-
62D1AE441A1E6FF800E4DFF8 /* Validation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Validation.swift; sourceTree = "<group>"; };
6152
62D1AE451A1E6FF800E4DFF8 /* ValidationError.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidationError.swift; sourceTree = "<group>"; };
62-
62D1AE461A1E6FF800E4DFF8 /* ValidationErrorType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidationErrorType.swift; sourceTree = "<group>"; };
63-
62D1AE471A1E6FF800E4DFF8 /* ValidationFactory.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidationFactory.swift; sourceTree = "<group>"; };
6453
62D1AE481A1E6FF800E4DFF8 /* ValidationRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidationRule.swift; sourceTree = "<group>"; };
65-
62D1AE531A1E700200E4DFF8 /* ValidationRuleType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ValidationRuleType.swift; sourceTree = "<group>"; };
6654
62D1AE541A1E700200E4DFF8 /* Validator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Validator.swift; sourceTree = "<group>"; };
67-
62D1AE551A1E700200E4DFF8 /* ZipCodeValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZipCodeValidation.swift; sourceTree = "<group>"; };
68-
62D1AE561A1E700200E4DFF8 /* PasswordValidation.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordValidation.swift; sourceTree = "<group>"; };
55+
62DC8D641AAA42520095DFA7 /* Rule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Rule.swift; sourceTree = "<group>"; };
56+
62DC8D671AAA42920095DFA7 /* FullNameRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FullNameRule.swift; sourceTree = "<group>"; };
57+
62DC8D691AAA42CE0095DFA7 /* EmailRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EmailRule.swift; sourceTree = "<group>"; };
58+
62DC8D6A1AAA42CE0095DFA7 /* RequiredRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RequiredRule.swift; sourceTree = "<group>"; };
59+
62DC8D6B1AAA42CE0095DFA7 /* PasswordRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PasswordRule.swift; sourceTree = "<group>"; };
60+
62DC8D701AAA43110095DFA7 /* ZipCodeRule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ZipCodeRule.swift; sourceTree = "<group>"; };
6961
/* End PBXFileReference section */
7062

7163
/* Begin PBXFrameworksBuildPhase section */
@@ -89,8 +81,8 @@
8981
626BE5EE1A9B8EC600FE6D5C /* Swift-Validator */ = {
9082
isa = PBXGroup;
9183
children = (
84+
62DC8D661AAA42700095DFA7 /* Rules */,
9285
62D1AE3C1A1E6FAF00E4DFF8 /* Core */,
93-
62D1AE5B1A1E701B00E4DFF8 /* Validations */,
9486
);
9587
name = "Swift-Validator";
9688
sourceTree = "<group>";
@@ -155,30 +147,26 @@
155147
62D1AE3C1A1E6FAF00E4DFF8 /* Core */ = {
156148
isa = PBXGroup;
157149
children = (
158-
62D1AE531A1E700200E4DFF8 /* ValidationRuleType.swift */,
159150
62D1AE541A1E700200E4DFF8 /* Validator.swift */,
160151
62D1AE451A1E6FF800E4DFF8 /* ValidationError.swift */,
161-
62D1AE461A1E6FF800E4DFF8 /* ValidationErrorType.swift */,
162-
62D1AE471A1E6FF800E4DFF8 /* ValidationFactory.swift */,
163152
62D1AE481A1E6FF800E4DFF8 /* ValidationRule.swift */,
164-
62D1AE441A1E6FF800E4DFF8 /* Validation.swift */,
165153
);
166154
name = Core;
167155
sourceTree = "<group>";
168156
};
169-
62D1AE5B1A1E701B00E4DFF8 /* Validations */ = {
157+
62DC8D661AAA42700095DFA7 /* Rules */ = {
170158
isa = PBXGroup;
171159
children = (
172-
62D1AE3D1A1E6FEF00E4DFF8 /* FullNameValidation.swift */,
173-
62D1AE421A1E6FF800E4DFF8 /* PhoneNumberValidation.swift */,
174-
62D1AE431A1E6FF800E4DFF8 /* RequiredValidation.swift */,
175-
62D1AE3F1A1E6FF800E4DFF8 /* EmailValidation.swift */,
176-
62D1AE411A1E6FF800E4DFF8 /* MinLengthValidation.swift */,
177-
62D1AE401A1E6FF800E4DFF8 /* MaxLengthValidation.swift */,
178-
62D1AE561A1E700200E4DFF8 /* PasswordValidation.swift */,
179-
62D1AE551A1E700200E4DFF8 /* ZipCodeValidation.swift */,
160+
628637251AAA474B00BC8FCF /* MinLengthRule.swift */,
161+
62DC8D641AAA42520095DFA7 /* Rule.swift */,
162+
62DC8D691AAA42CE0095DFA7 /* EmailRule.swift */,
163+
62DC8D6A1AAA42CE0095DFA7 /* RequiredRule.swift */,
164+
62DC8D6B1AAA42CE0095DFA7 /* PasswordRule.swift */,
165+
62DC8D671AAA42920095DFA7 /* FullNameRule.swift */,
166+
62DC8D701AAA43110095DFA7 /* ZipCodeRule.swift */,
167+
628637271AAA49E300BC8FCF /* ConfirmRule.swift */,
180168
);
181-
name = Validations;
169+
name = Rules;
182170
sourceTree = "<group>";
183171
};
184172
/* End PBXGroup section */
@@ -281,23 +269,19 @@
281269
isa = PBXSourcesBuildPhase;
282270
buildActionMask = 2147483647;
283271
files = (
284-
62D1AE4C1A1E6FF800E4DFF8 /* PhoneNumberValidation.swift in Sources */,
285-
62D1AE5A1A1E700200E4DFF8 /* PasswordValidation.swift in Sources */,
272+
62DC8D681AAA42920095DFA7 /* FullNameRule.swift in Sources */,
286273
62D1AE4F1A1E6FF800E4DFF8 /* ValidationError.swift in Sources */,
287-
62D1AE3E1A1E6FEF00E4DFF8 /* FullNameValidation.swift in Sources */,
288-
62D1AE4B1A1E6FF800E4DFF8 /* MinLengthValidation.swift in Sources */,
274+
62DC8D6E1AAA42CE0095DFA7 /* PasswordRule.swift in Sources */,
275+
62DC8D6C1AAA42CE0095DFA7 /* EmailRule.swift in Sources */,
276+
628637281AAA49E300BC8FCF /* ConfirmRule.swift in Sources */,
277+
62DC8D651AAA42520095DFA7 /* Rule.swift in Sources */,
289278
62D1AE1F1A1E6D4400E4DFF8 /* ViewController.swift in Sources */,
290-
62D1AE4E1A1E6FF800E4DFF8 /* Validation.swift in Sources */,
279+
62DC8D6D1AAA42CE0095DFA7 /* RequiredRule.swift in Sources */,
291280
62D1AE1D1A1E6D4400E4DFF8 /* AppDelegate.swift in Sources */,
292281
62D1AE581A1E700200E4DFF8 /* Validator.swift in Sources */,
293-
62D1AE501A1E6FF800E4DFF8 /* ValidationErrorType.swift in Sources */,
294-
62D1AE491A1E6FF800E4DFF8 /* EmailValidation.swift in Sources */,
295-
62D1AE511A1E6FF800E4DFF8 /* ValidationFactory.swift in Sources */,
296-
62D1AE591A1E700200E4DFF8 /* ZipCodeValidation.swift in Sources */,
297-
62D1AE571A1E700200E4DFF8 /* ValidationRuleType.swift in Sources */,
282+
628637261AAA474B00BC8FCF /* MinLengthRule.swift in Sources */,
283+
62DC8D711AAA43110095DFA7 /* ZipCodeRule.swift in Sources */,
298284
62D1AE521A1E6FF800E4DFF8 /* ValidationRule.swift in Sources */,
299-
62D1AE4A1A1E6FF800E4DFF8 /* MaxLengthValidation.swift in Sources */,
300-
62D1AE4D1A1E6FF800E4DFF8 /* RequiredValidation.swift in Sources */,
301285
);
302286
runOnlyForDeploymentPostprocessing = 0;
303287
};

0 commit comments

Comments
 (0)