Skip to content

Commit 6ff0420

Browse files
authored
Merge pull request #2 from AlanBarber/valdation-extension
First build out of ResultR.Valdiation companion library
2 parents 2b134d0 + e34beeb commit 6ff0420

26 files changed

+2537
-2
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Release ResultR.Validation
2+
3+
on:
4+
push:
5+
tags:
6+
- 'validation-v*'
7+
8+
env:
9+
DOTNET_VERSION: '10.0.x'
10+
11+
permissions:
12+
contents: write
13+
14+
jobs:
15+
release-validation:
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Setup .NET
23+
uses: actions/setup-dotnet@v4
24+
with:
25+
dotnet-version: ${{ env.DOTNET_VERSION }}
26+
27+
- name: Restore dependencies
28+
run: dotnet restore ResultR.slnx
29+
working-directory: src
30+
31+
- name: Build
32+
run: dotnet build ResultR.slnx --configuration Release --no-restore
33+
working-directory: src
34+
35+
- name: Test
36+
run: dotnet test ResultR.slnx --configuration Release --no-build --verbosity normal
37+
working-directory: src
38+
39+
- name: Pack ResultR.Validation
40+
run: |
41+
VERSION=${GITHUB_REF#refs/tags/validation-v}
42+
dotnet pack ResultR.Validation.csproj --configuration Release --no-build -p:PackageVersion=$VERSION -o ./nupkg
43+
working-directory: src/ResultR.Validation
44+
45+
- name: Publish ResultR.Validation to NuGet
46+
run: dotnet nuget push ./nupkg/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate
47+
working-directory: src/ResultR.Validation
48+
49+
- name: Create GitHub Release
50+
uses: softprops/action-gh-release@v2
51+
with:
52+
files: |
53+
src/ResultR.Validation/nupkg/*.nupkg
54+
src/ResultR.Validation/nupkg/*.snupkg
55+
generate_release_notes: true
56+
draft: false
57+
prerelease: false
58+
env:
59+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,16 @@ ResultR prioritizes:
5858
dotnet add package ResultR
5959
```
6060

61+
### Optional: ResultR.Validation
62+
63+
For inline validation with a fluent API:
64+
65+
```bash
66+
dotnet add package ResultR.Validation
67+
```
68+
69+
**[→ Learn more about ResultR.Validation](https://github.com/AlanBarber/ResultR/wiki/ResultR.Validation)**
70+
6171
## 🚀 Quick Start
6272

6373
### 1. Define a Request
@@ -199,6 +209,44 @@ public class DeleteUserHandler : IRequestHandler<DeleteUserRequest>
199209

200210
## 🔧 Advanced Features
201211

212+
### ResultR.Validation (Optional Package)
213+
214+
Add fluent inline validation to your handlers without separate validator classes:
215+
216+
```csharp
217+
dotnet add package ResultR.Validation
218+
```
219+
220+
```csharp
221+
using ResultR.Validation;
222+
223+
public class CreateUserHandler : IRequestHandler<CreateUserRequest, User>
224+
{
225+
public ValueTask<Result> ValidateAsync(CreateUserRequest request)
226+
{
227+
return Validator.For(request)
228+
.RuleFor(x => x.Email)
229+
.NotEmpty("Email is required")
230+
.EmailAddress("Invalid email format")
231+
.RuleFor(x => x.Name)
232+
.NotEmpty("Name is required")
233+
.MinLength(2, "Name must be at least 2 characters")
234+
.RuleFor(x => x.Age)
235+
.GreaterThan(0, "Age must be positive")
236+
.ToResult();
237+
}
238+
239+
public async ValueTask<Result<User>> HandleAsync(CreateUserRequest request, CancellationToken ct)
240+
{
241+
var user = new User(request.Email, request.Name, request.Age);
242+
await _repository.AddAsync(user, ct);
243+
return Result<User>.Success(user);
244+
}
245+
}
246+
```
247+
248+
**[→ Full ResultR.Validation documentation](https://github.com/AlanBarber/ResultR/wiki/ResultR.Validation)**
249+
202250
### Metadata Support
203251

204252
```csharp

docs/wiki/Home.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ else
6565

6666
## Documentation
6767

68+
### Core Documentation
69+
6870
- [Getting Started](Getting-Started) - Installation and basic setup
6971
- [Requests and Handlers](Requests-and-Handlers) - Creating requests and handlers
7072
- [The Result Type](The-Result-Type) - Working with success and failure states
@@ -73,6 +75,10 @@ else
7375
- [Error Handling](Error-Handling) - Exception handling and failure patterns
7476
- [Best Practices](Best-Practices) - Recommended patterns and conventions
7577

78+
### Optional Packages
79+
80+
- [ResultR.Validation](ResultR.Validation) - Inline validation with fluent API
81+
7682
## Requirements
7783

7884
- .NET 10.0 or later

0 commit comments

Comments
 (0)