Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ Valit is available on [NuGet](https://www.nuget.org/packages/Valit/).

### Package manager
```bash
Install-Package Valit -Version 1.0.0
Install-Package Valit -Version 2.0.0
```

### .NET CLI
```bash
dotnet add package Valit --version 1.0.0
dotnet add package Valit --version 2.0.0
```

# Getting started
Expand Down
13 changes: 9 additions & 4 deletions src/Valit/Rules/ValitRule.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,18 @@ public IValitResult Validate(TObject @object)
var property = _propertySelector.Compile().Invoke(@object);
var hasAllConditionsFulfilled = true;

foreach(var condition in _conditions)
foreach (var condition in _conditions)
hasAllConditionsFulfilled &= condition(@object);

var isSatisfied = _predicate?.Invoke(property) != false;
var errors = _errors.Where(e => !e.IsDefault).Any() ? _errors.Where(e => !e.IsDefault) : _errors;
if (!hasAllConditionsFulfilled)
{
return ValitResult.Success;
}

var isSatisfied = _predicate?.Invoke(property) ?? false;
var errors = _errors.Any(e => !e.IsDefault) ? _errors.Where(e => !e.IsDefault) : _errors;

return !hasAllConditionsFulfilled || isSatisfied ? ValitResult.Success : ValitResult.Fail(errors.ToArray());
return isSatisfied ? ValitResult.Success : ValitResult.Fail(errors.ToArray());
}
}
}
2 changes: 1 addition & 1 deletion src/Valit/Valit.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<PackageProjectUrl>https://github.com/valit-stack/Valit</PackageProjectUrl>
<PackageLicenseUrl>https://github.com/valit-stack/Valit/blob/master/LICENSE</PackageLicenseUrl>
<PackageIconUrl>https://user-images.githubusercontent.com/7096476/32700023-298ffb9e-c7bf-11e7-9d83-82690b7e260b.png</PackageIconUrl>
<VersionPrefix>1.0.0</VersionPrefix>
<VersionPrefix>2.0.0</VersionPrefix>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>

Expand Down
12 changes: 6 additions & 6 deletions src/Valit/ValitRuleStringExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ public static class ValitRuleStringExtensions
{
private static string _emailRegularExpression => @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z";
public static IValitRule<TObject, string> IsEqualTo<TObject>(this IValitRule<TObject, string> rule, string value) where TObject : class
=> rule.Satisfies(p => !String.IsNullOrEmpty(p) && !String.IsNullOrEmpty(value) && p == value).WithDefaultMessage(ErrorMessages.IsEqualTo, value);
=> rule.Satisfies(p => p != null && value != null && p == value).WithDefaultMessage(ErrorMessages.IsEqualTo, value);

public static IValitRule<TObject, string> MinLength<TObject>(this IValitRule<TObject, string> rule, int length) where TObject : class
=> rule.Satisfies(p => !String.IsNullOrEmpty(p) && p.Length >= length).WithDefaultMessage(ErrorMessages.MinLength, length);
=> rule.Satisfies(p => p != null && p.Length >= length).WithDefaultMessage(ErrorMessages.MinLength, length);

public static IValitRule<TObject, string> MaxLength<TObject>(this IValitRule<TObject, string> rule, int length) where TObject : class
=> rule.Satisfies(p => !String.IsNullOrEmpty(p) && p.Length <= length).WithDefaultMessage(ErrorMessages.MaxLength, length);
=> rule.Satisfies(p => p != null && p.Length <= length).WithDefaultMessage(ErrorMessages.MaxLength, length);

public static IValitRule<TObject, string> Matches<TObject>(this IValitRule<TObject, string> rule, string regularExpression) where TObject : class
=> rule.Satisfies(p => !String.IsNullOrEmpty(p) && !String.IsNullOrEmpty(regularExpression) && Regex.IsMatch(p, regularExpression)).WithDefaultMessage(ErrorMessages.Matches, regularExpression);
=> rule.Satisfies(p => p != null && !String.IsNullOrEmpty(regularExpression) && Regex.IsMatch(p, regularExpression)).WithDefaultMessage(ErrorMessages.Matches, regularExpression);

public static IValitRule<TObject, string> Email<TObject>(this IValitRule<TObject, string> rule) where TObject : class
=> rule.Satisfies(p => !String.IsNullOrEmpty(p) && !String.IsNullOrEmpty(_emailRegularExpression) && Regex.IsMatch(p, _emailRegularExpression)).WithDefaultMessage(ErrorMessages.Email);
=> rule.Satisfies(p => p != null && !String.IsNullOrEmpty(_emailRegularExpression) && Regex.IsMatch(p, _emailRegularExpression)).WithDefaultMessage(ErrorMessages.Email);

public static IValitRule<TObject, string> Required<TObject>(this IValitRule<TObject, string> rule) where TObject : class
=> rule.Satisfies(p => !string.IsNullOrEmpty(p)).WithDefaultMessage(ErrorMessages.Required);
=> rule.Satisfies(p => p != null).WithDefaultMessage(ErrorMessages.Required);
}
}
2 changes: 1 addition & 1 deletion tests/Valit.Tests/Strategies/Complete.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public void Complete_Strategy_Checks_All_Ensure()
.Validate();

result.Succeeded.ShouldBe(false);
result.ErrorMessages.Count().ShouldBe(6);
result.ErrorMessages.Count().ShouldBe(5);
result.ErrorMessages.ShouldContain(M1);
result.ErrorMessages.ShouldContain(M3);
result.ErrorMessages.ShouldContain(M4);
Expand Down
2 changes: 1 addition & 1 deletion tests/Valit.Tests/Strategies/FailFast.cs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ public void FailFast_Strategy_Checks_Until_First_Error_While_Error_Is_Not_First(

result.Succeeded.ShouldBe(false);
result.ErrorMessages.Count().ShouldBe(1);
result.ErrorMessages.ShouldContain(M2);
result.ErrorMessages.ShouldContain(M3);
}

#region ARRANGE
Expand Down
2 changes: 1 addition & 1 deletion tests/Valit.Tests/String/String_IsEqualTo_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public void String_IsEqualTo_Returns_Proper_Result_For_Left_Value(string value,
[Theory]
[InlineData("text", false)]
[InlineData("other", false)]
[InlineData("", false)]
[InlineData("", true)]
[InlineData(null, false)]
public void String_IsEqualTo_Returns_Proper_Result_For_Left_Empty_Value(string value, bool expected)
{
Expand Down
6 changes: 3 additions & 3 deletions tests/Valit.Tests/String/String_MaxLength_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ public void String_MaxLength_Returns_Proper_Result_For_Left_Value(int value, boo
}

[Theory]
[InlineData(0, false)]
[InlineData(4, false)]
[InlineData(8, false)]
[InlineData(0, true)]
[InlineData(4, true)]
[InlineData(8, true)]
public void String_MaxLength_Returns_Proper_Result_For_Left_Empty_Value(int value, bool expected)
{
IValitResult result = ValitRules<Model>
Expand Down
2 changes: 1 addition & 1 deletion tests/Valit.Tests/String/String_MinLength_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void String_MinLength_Returns_Proper_Result_For_Left_Value(int value, boo
}

[Theory]
[InlineData(0, false)]
[InlineData(0, true)]
[InlineData(4, false)]
[InlineData(8, false)]
public void String_MinLength_Returns_Proper_Result_For_Left_Empty_Value(int value, bool expected)
Expand Down
4 changes: 2 additions & 2 deletions tests/Valit.Tests/String/String_Required_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public void String_Required_Fails_For_Null_Value()
}

[Fact]
public void String_Required_Fails_For_Empty_Value()
public void String_Required_Succeeds_For_Empty_Value()
{
IValitResult result = ValitRules<Model>
.Create()
Expand All @@ -42,7 +42,7 @@ public void String_Required_Fails_For_Empty_Value()
.For(_model)
.Validate();

result.Succeeded.ShouldBeFalse();
result.Succeeded.ShouldBeTrue();
}

[Fact]
Expand Down
7 changes: 2 additions & 5 deletions tests/Valit.Tests/Valit.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
Expand All @@ -14,8 +14,5 @@
<ItemGroup>
<ProjectReference Include="..\..\src\Valit\Valit.csproj" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>

</Project>