Rulewright.Extensions.Functions
0.3.0
dotnet add package Rulewright.Extensions.Functions --version 0.3.0
NuGet\Install-Package Rulewright.Extensions.Functions -Version 0.3.0
<PackageReference Include="Rulewright.Extensions.Functions" Version="0.3.0" />
<PackageVersion Include="Rulewright.Extensions.Functions" Version="0.3.0" />
<PackageReference Include="Rulewright.Extensions.Functions" />
paket add Rulewright.Extensions.Functions --version 0.3.0
#r "nuget: Rulewright.Extensions.Functions, 0.3.0"
#:package Rulewright.Extensions.Functions@0.3.0
#addin nuget:?package=Rulewright.Extensions.Functions&version=0.3.0
#tool nuget:?package=Rulewright.Extensions.Functions&version=0.3.0
Rulewright.Extensions.Functions
A curated catalog of ready-made predicates for Rulewright's
custom operator, plus the helpers that register them.
Install
dotnet add package Rulewright.Extensions.Functions
Already included in Rulewright — install
this directly only if you reference Rulewright.Execution piecewise.
Register them
var engine = new RulewrightBuilder()
.UseJsonReader(new SystemTextJsonReader())
.RegisterBuiltInFunctions() // the catalog below
.RegisterFunctionsFrom(typeof(Program).Assembly) // scan your own IRuleFunction classes
.Build();
Then name one in a rule leaf:
{ "field": "Customer.Email", "operator": "custom", "name": "IsEmail" }
{ "field": "Customer.Age", "operator": "custom", "name": "IsBetweenInclusive", "value": [18, 65] }
The catalog
Deliberately, these are the things Rulewright's closed operator vocabulary leaves out.
| Function | Checks |
|---|---|
IsNullOrEmpty / IsNullOrWhiteSpace |
field is null, empty, or whitespace |
EqualsIgnoreCase |
field equals the value, ignoring case (ordinal) |
IsEmail |
field looks like an email address |
IsEven / IsOdd |
field is an even / odd integer |
IsPositive / IsNegative |
field is a number greater / less than zero |
DivisibleBy |
field is an integer divisible by the value |
IsBetweenInclusive |
field is within the [min, max] value array |
IsWeekend / IsWeekday |
field date falls on a weekend / weekday |
IsInPast / IsInFuture |
field date is before / after now |
Every predicate is total: given a value of an unexpected shape it returns false rather
than throwing, so a custom leaf can never crash an evaluation.
BuiltInFunctions.Create(clock) takes an injectable clock, so IsInPast/IsInFuture are
deterministic under test.
Write your own
var isBusinessDay = new NamedRuleFunction(
"IsBusinessDay",
(field, value) => field is DateTime d && d.DayOfWeek is not (DayOfWeek.Saturday or DayOfWeek.Sunday),
description: "Field date is a weekday.",
valueKind: RuleFunctionValueKind.None);
NamedRuleFunction implements IRuleFunctionMetadata, so the description and value kind show
up in engine.FunctionCatalog for a rule-builder UI to render.
Requirements
.NET Framework 4.8, .NET Standard 2.0, .NET 8.0 or .NET 10.0.
License
MIT.
| 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 is compatible. 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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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 is compatible. 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. |
-
.NETFramework 4.8
- Rulewright.Core (>= 0.3.0)
- Rulewright.Execution (>= 0.3.0)
-
.NETStandard 2.0
- Rulewright.Core (>= 0.3.0)
- Rulewright.Execution (>= 0.3.0)
-
net10.0
- Rulewright.Core (>= 0.3.0)
- Rulewright.Execution (>= 0.3.0)
-
net8.0
- Rulewright.Core (>= 0.3.0)
- Rulewright.Execution (>= 0.3.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Rulewright.Extensions.Functions:
| Package | Downloads |
|---|---|
|
Rulewright
The Rulewright rule engine — everything you need in one package: the core domain model, JSON parsing and schema validation, the expression-tree evaluation engine, the System.Text.Json adapter, and the built-in custom functions. Rules are plain JSON; evaluation is compiled expression trees. Install this unless you want to pick pieces individually. |
GitHub repositories
This package is not used by any popular GitHub repositories.
See https://github.com/albahadly/rulewright/releases for release notes.