BrutalHack.Bouncer
1.0.0
See the version list below for details.
dotnet add package BrutalHack.Bouncer --version 1.0.0
NuGet\Install-Package BrutalHack.Bouncer -Version 1.0.0
<PackageReference Include="BrutalHack.Bouncer" Version="1.0.0" />
paket add BrutalHack.Bouncer --version 1.0.0
#r "nuget: BrutalHack.Bouncer, 1.0.0"
// Install BrutalHack.Bouncer as a Cake Addin #addin nuget:?package=BrutalHack.Bouncer&version=1.0.0 // Install BrutalHack.Bouncer as a Cake Tool #tool nuget:?package=BrutalHack.Bouncer&version=1.0.0
Bouncer
Bouncer provides lightweight runtime-only "contracts" for .Net applications. Focus lies on readability, extensibility and a high unit test coverage.
Installing via NuGet
Install-Package BrutalHack.Bouncer
Usage
Import the Nuget Package and check constraints for your methods parameters in a few readable lines. When a constraint is violated, you receive a readable exception including stack trace.
with Bouncer
IBouncer Bouncer;
public CreateNewUser(string name, int age)
{
Bouncer.IsNotNullOrEmpty(name);
Bouncer.IsPositive(age)
// Do Stuff
}
without Bouncer
public CreateNewUser(string name, int age)
{
if (name == null)
{
throw new ArgumentNullException(nameof(name), "Must not be null.");
}
if (name.length == 0)
{
throw new ArgumentOutOfRangeException(nameof(name), "Must not be empty.");
}
if (age < 0)
(
throw new ArgumentOutOfRangeException(nameof(age), "Must be positive.");
}
// Do Stuff
}
Custom Rules
Using Extension Methods
Bouncer is easily extendible via C# Extension Methods.
By extending IBouncer
, your methods are available to all Bouncer instances retrieved via Bouncer.Instance or via Dependency Injection.
Example:
using System;
using System.Collections.Generic;
namespace BrutalHack.Bouncer
{
public static class BouncerExtensions
{
/// <summary>
/// Validates if a collection contains the given elements
/// </summary>
/// <param name="bouncer"></param>
/// <param name="element"></param>
/// <param name="collection"></param>
/// <typeparam name="T">Generic Type of the given list</typeparam>
/// <exception cref="ArgumentOutOfRangeException">thrown, when the list does not contain the given element.</exception>
public static void Contains<T>(this IBouncer bouncer, T element, ICollection<T> collection)
{
if (!collection.Contains(element))
{
throw new ArgumentOutOfRangeException($"Collection {collection} must contain Element {element}.");
}
}
}
}
Extension methods are used like normal methods on IBouncer:
var collection = new List<string>{"foo", "bar"};
_bouncer.Contains("not included", collection);
Using IsTrue
For rules, which are only needed once, you may also use IsTrue with a boolean expression.
We do not recommend this approach, as it can easily create duplicate code.
var collection = new List<string>{"foo", "bar"};
_bouncer.IsTrue(collection.Contains("not included"));
Planned Features
- More constraints
- Easily disable all constraints in production mode
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Added Bouncer.IsNotZero for int and float; Fixed issue with custom epsilon in AreEqual and AreNotEqual for float.