Skip to content

Commit 17cee68

Browse files
committed
Move internal publicly exposed properties and methods on FluentValidation into single exposed property with type Internal.
1 parent 25df6d2 commit 17cee68

13 files changed

Lines changed: 84 additions & 69 deletions

CodingFlow.FluentValidation.UnitTests/TestValidators.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public static class TestValidators
88
{
99
public FluentValidation<T> Valid()
1010
{
11-
validation.Validate(
11+
validation.Internal.Validate(
1212
_ => true,
1313
new() { Message = ErrorMessage }
1414
);
@@ -18,7 +18,7 @@ public FluentValidation<T> Valid()
1818

1919
public FluentValidation<T> Invalid()
2020
{
21-
validation.Validate(
21+
validation.Internal.Validate(
2222
_ => false,
2323
new() { Message = ErrorMessage }
2424
);

CodingFlow.FluentValidation/FluentValidation.cs

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -6,52 +6,23 @@
66
/// <typeparam name="T">Input type.</typeparam>
77
public class FluentValidation<T>
88
{
9-
public T Input { get; set; }
109
public ValidationResult Result { get; set; }
1110

1211
public List<ValidationError> Errors { get; init; } = [];
1312

14-
public ValidationError LastError { get; private set; }
13+
/// <summary>
14+
/// Used internally by the library. Do not use this property
15+
/// unless you are building your own validator.
16+
/// </summary>
17+
public Internal<T> Internal { get; private set; }
1518

1619
public FluentValidation(T input)
1720
{
18-
Input = input;
1921
Result = new() { Errors = Errors };
20-
}
21-
22-
public void AddValid()
23-
{
24-
LastError = default;
25-
}
26-
27-
public void AddError(ValidationError error)
28-
{
29-
Result.IsValid = false;
30-
LastError = error;
31-
Errors.Add(error);
32-
}
33-
34-
public void Validate(Func<FluentValidation<T>, bool> validator, ValidationError error)
35-
{
36-
if (validator(this))
37-
{
38-
AddValid();
39-
}
40-
else
41-
{
42-
AddError(error);
43-
}
44-
}
45-
46-
public void ChangeErrorMessage(string message)
47-
{
48-
if (LastError != default)
22+
23+
Internal = new Internal<T>(this)
4924
{
50-
Errors.RemoveAt(Errors.Count - 1);
51-
Errors.Add(LastError with
52-
{
53-
Message = message
54-
});
55-
}
25+
Input = input
26+
};
5627
}
5728
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
namespace CodingFlow.FluentValidation;
2+
3+
public class Internal<T>(FluentValidation<T> validation)
4+
{
5+
public required T Input { get; set; }
6+
7+
public ValidationError LastError { get; private set; }
8+
9+
public void AddValid()
10+
{
11+
LastError = default;
12+
}
13+
14+
public void AddError(ValidationError error)
15+
{
16+
validation.Result.IsValid = false;
17+
LastError = error;
18+
validation.Errors.Add(error);
19+
}
20+
21+
public void Validate(Func<FluentValidation<T>, bool> validator, ValidationError error)
22+
{
23+
if (validator(validation))
24+
{
25+
AddValid();
26+
}
27+
else
28+
{
29+
AddError(error);
30+
}
31+
}
32+
33+
public void ChangeErrorMessage(string message)
34+
{
35+
if (LastError != default)
36+
{
37+
validation.Errors.RemoveAt(validation.Errors.Count - 1);
38+
validation.Errors.Add(LastError with
39+
{
40+
Message = message
41+
});
42+
}
43+
}
44+
}

CodingFlow.FluentValidation/Validators/BetweenExclusiveValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public static FluentValidation<T> BetweenExclusive<T>(this FluentValidation<T> v
2424
private static void Validate<T>(FluentValidation<T> validation, T minimum, T maximum)
2525
where T : INumber<T>
2626
{
27-
validation.Validate(
28-
validation => minimum < validation.Input && validation.Input < maximum,
29-
new ValidationError($"Value '{validation.Input}' of type {typeof(T)} is not between {minimum} and {maximum}.")
27+
validation.Internal.Validate(
28+
validation => minimum < validation.Internal.Input && validation.Internal.Input < maximum,
29+
new ValidationError($"Value '{validation.Internal.Input}' of type {typeof(T)} is not between {minimum} and {maximum}.")
3030
);
3131
}
3232
}

CodingFlow.FluentValidation/Validators/BetweenInclusiveValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ public static FluentValidation<T> BetweenInclusive<T>(this FluentValidation<T> v
2424
private static void Validate<T>(FluentValidation<T> validation, T minimum, T maximum)
2525
where T : INumber<T>
2626
{
27-
validation.Validate(
28-
validation => minimum <= validation.Input && validation.Input <= maximum,
29-
new ValidationError($"Value '{validation.Input}' of type {typeof(T)} is not equal to or between {minimum} and {maximum}.")
27+
validation.Internal.Validate(
28+
validation => minimum <= validation.Internal.Input && validation.Internal.Input <= maximum,
29+
new ValidationError($"Value '{validation.Internal.Input}' of type {typeof(T)} is not equal to or between {minimum} and {maximum}.")
3030
);
3131
}
3232
}

CodingFlow.FluentValidation/Validators/EqualValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public static FluentValidation<T> Equal<T>(this FluentValidation<T> validation,
2020

2121
private static void Validate<T>(FluentValidation<T> validation, T input)
2222
{
23-
validation.Validate(
24-
validation => validation.Input.Equals(input),
25-
new ValidationError($"Value '{validation.Input}' of type {typeof(T)} is not equal to {input}.")
23+
validation.Internal.Validate(
24+
validation => validation.Internal.Input.Equals(input),
25+
new ValidationError($"Value '{validation.Internal.Input}' of type {typeof(T)} is not equal to {input}.")
2626
);
2727
}
2828
}

CodingFlow.FluentValidation/Validators/IsGuidValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public static FluentValidation<string> IsGuid(this FluentValidation<string> vali
1818

1919
private static void Validate(FluentValidation<string> validation)
2020
{
21-
validation.Validate(
22-
validation => Guid.TryParse(validation.Input, out var value),
23-
new ValidationError($"Value '{validation.Input}' is not a valid GUID.")
21+
validation.Internal.Validate(
22+
validation => Guid.TryParse(validation.Internal.Input, out var value),
23+
new ValidationError($"Value '{validation.Internal.Input}' is not a valid GUID.")
2424
);
2525
}
2626
}

CodingFlow.FluentValidation/Validators/MatchesValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ public static FluentValidation<string> Matches(this FluentValidation<string> val
2121

2222
private static void Validate(FluentValidation<string> validation, string regex)
2323
{
24-
validation.Validate(
25-
validation => Regex.IsMatch(validation.Input, regex),
26-
new ValidationError($"Value '{validation.Input}' does not match the pattern.")
24+
validation.Internal.Validate(
25+
validation => Regex.IsMatch(validation.Internal.Input, regex),
26+
new ValidationError($"Value '{validation.Internal.Input}' does not match the pattern.")
2727
);
2828
}
2929
}

CodingFlow.FluentValidation/Validators/MaximumLengthValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public static FluentValidation<string> MaximumLength(this FluentValidation<strin
1919

2020
private static void Validate(FluentValidation<string> validation, int maximum)
2121
{
22-
validation.Validate(
23-
validation => validation.Input.Length <= maximum,
24-
new ValidationError($"Value '{validation.Input}' has a length more than {maximum}.")
22+
validation.Internal.Validate(
23+
validation => validation.Internal.Input.Length <= maximum,
24+
new ValidationError($"Value '{validation.Internal.Input}' has a length more than {maximum}.")
2525
);
2626
}
2727
}

CodingFlow.FluentValidation/Validators/MinimumLengthValidator.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ public static FluentValidation<string> MinimumLength(this FluentValidation<strin
1919

2020
private static void Validate(FluentValidation<string> validation, int minimum)
2121
{
22-
validation.Validate(
23-
validation => validation.Input.Length >= minimum,
24-
new ValidationError($"Value '{validation.Input}' has a length less than {minimum}.")
22+
validation.Internal.Validate(
23+
validation => validation.Internal.Input.Length >= minimum,
24+
new ValidationError($"Value '{validation.Internal.Input}' has a length less than {minimum}.")
2525
);
2626
}
2727
}

0 commit comments

Comments
 (0)