Skip to content

Commit

Permalink
Merge pull request #4 from gardenofconcepts/improvements
Browse files Browse the repository at this point in the history
.NET 8 Update + Added more filters
  • Loading branch information
Ziad17 authored Jan 5, 2024
2 parents ff010ea + 7338ba1 commit 0e5cfa9
Show file tree
Hide file tree
Showing 17 changed files with 104 additions and 48 deletions.
6 changes: 3 additions & 3 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,11 @@ jobs:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v3
uses: actions/setup-dotnet@v4
with:
dotnet-version: 7.0.x
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
Expand Down
4 changes: 2 additions & 2 deletions Extensions/BooleanExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ public static class BooleanExtensions
{
public static IValue<T> IsTrue<T>(this IBooleanEvaluator<T> value)
{
value.Filter.Append(StringExtensions.AddWhiteSpaceBeforeToLower("= true"));
value.Filter.Append(" = true");
return (IValue<T>)value;
}

public static IValue<T> IsFalse<T>(this IBooleanEvaluator<T> value)
{
value.Filter.Append(StringExtensions.AddWhiteSpaceBeforeToLower("= false"));
value.Filter.Append(" = false");
return (IValue<T>)value;
}
}
Expand Down
2 changes: 1 addition & 1 deletion Extensions/CollectionExpressions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public static class CollectionExpressions
{
public static IValue<T> Contains<T, TData>(this ICollectionEvaluator<T> value, TData itemToSearch)
{
value.Filter.Append(StringExtensions.AddWhiteSpaceBeforeToLower($"= '{itemToSearch}'"));
value.Filter.Append($" = '{itemToSearch}'");
return (IValue<T>)value;
}
}
Expand Down
9 changes: 5 additions & 4 deletions Extensions/DateTimeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,21 @@ public static class DateTimeExtensions
{
public static IValue<T> After<T>(this IDateTimeEvaluator<T> value, DateTime dateTime)
{
value.Filter.Append(StringExtensions.AddWhiteSpaceBeforeToLower($"> {dateTime.ToUnixEpoch()}"));
value.Filter.Append($" > {dateTime.ToUnixEpoch()}");
return (IValue<T>)value;
}

public static IValue<T> AfterOrEqual<T>(this IDateTimeEvaluator<T> value, DateTime dateTime)
{
value.Filter.Append(StringExtensions.AddWhiteSpaceBeforeToLower($">= {dateTime}"));
value.Filter.Append($" >= {dateTime}");
return (IValue<T>)value;
}

public static double ToUnixEpoch(this DateTime date)
{
DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
TimeSpan diff = date.ToUniversalTime() - origin;
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
var diff = date.ToUniversalTime() - origin;

return Math.Floor(diff.TotalSeconds);
}
}
Expand Down
24 changes: 24 additions & 0 deletions Extensions/GenericExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
using FluentSearchEngine.GenericEvaluators.Interfaces;

namespace FluentSearchEngine.Extensions;

public static class GenericExtensions
{
public static IValue<T> IsNotNull<T>(this IGenericEvaluator<T> value)
{
value.Filter.Append(" IS NOT NULL");
return (IValue<T>)value;
}

public static IValue<T> IsNull<T>(this IGenericEvaluator<T> value)
{
value.Filter.Append(" IS NULL");
return (IValue<T>)value;
}

public static IValue<T> Exists<T>(this IGenericEvaluator<T> value)
{
value.Filter.Append(" EXISTS");
return (IValue<T>)value;
}
}
21 changes: 7 additions & 14 deletions Extensions/NumericExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,50 +7,43 @@ public static class NumericExtensions
{
public static IValue<T> IsEqual<T>(this INumbersEvaluator<T> value, decimal number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($"= {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" = {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> IsNotEqual<T>(this INumbersEvaluator<T> value, int number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($"!= {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" != {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> GreaterThan<T>(this INumbersEvaluator<T> value, int number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($"> {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" > {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> GreaterThanOrEquals<T>(this INumbersEvaluator<T> value, int number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($">= {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" >= {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> GreaterThanOrEquals<T>(this INumbersEvaluator<T> value, double number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($">= {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" >= {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> LowerThanOrEquals<T>(this INumbersEvaluator<T> value, int number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($"<= {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" <= {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}

public static IValue<T> LowerThan<T>(this INumbersEvaluator<T> value, int number)
{
value.Filter.Append(
StringExtensions.AddWhiteSpaceBeforeToLower($"< {number.ToString(CultureInfo.InvariantCulture)}"));
value.Filter.Append($" < {number.ToString(CultureInfo.InvariantCulture)}");
return (IValue<T>)value;
}
}
Expand Down
20 changes: 13 additions & 7 deletions Extensions/StringExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,21 +12,27 @@ public static string FirstCharToLowerCase(this string str)
return str;
}

public static string AddWhiteSpaceBeforeToLower(object value)
public static IValue<T> ExactSame<T>(this IStringsEvaluator<T> value, string text)
{
value.Filter.Append($" = '{text}'");
return (IValue<T>)value;
}

public static IValue<T> NotExactSame<T>(this IStringsEvaluator<T> value, string text)
{
var originalText = " " + value.ToString()!.FirstCharToLowerCase();
return originalText;
value.Filter.Append($" != '{text}'");
return (IValue<T>)value;
}

public static IValue<T> Like<T>(this IStringsEvaluator<T> value, string text)
public static IValue<T> IsEmpty<T>(this IStringsEvaluator<T> value)
{
value.Filter.Append(AddWhiteSpaceBeforeToLower($"LIKE '{text}'"));
value.Filter.Append(" IS EMPTY");
return (IValue<T>)value;
}

public static IValue<T> ExactSame<T>(this IStringsEvaluator<T> value, string text)
public static IValue<T> IsNotEmpty<T>(this IStringsEvaluator<T> value)
{
value.Filter.Append(AddWhiteSpaceBeforeToLower($"= '{text}'"));
value.Filter.Append(" IS NOT EMPTY");
return (IValue<T>)value;
}
}
Expand Down
14 changes: 7 additions & 7 deletions FluentSearchEngine.csproj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<Authors>Ziad M.Fathy</Authors>
Expand All @@ -12,7 +12,7 @@
<PackageTags>Search, Search Engine, Fluent, Filtering, Index</PackageTags>
<PackageReleaseNotes>Beta Version</PackageReleaseNotes>
<GeneratePackageOnBuild>False</GeneratePackageOnBuild>
<Version>2.0.0</Version>
<Version>2.2.0</Version>

</PropertyGroup>

Expand All @@ -24,12 +24,12 @@

<ItemGroup>
<PackageReference Include="Humanizer" Version="2.14.1" />
<PackageReference Include="MeiliSearch" Version="0.13.1" />
<PackageReference Include="MeiliSearch" Version="0.14.6" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.0" />
</ItemGroup>

</Project>
2 changes: 1 addition & 1 deletion GenericEvaluators/Interfaces/IBooleanEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface IBooleanEvaluator<T> : IFilter
public interface IBooleanEvaluator<T> : IGenericEvaluator<T>
{
}
}
2 changes: 1 addition & 1 deletion GenericEvaluators/Interfaces/ICollectionEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface ICollectionEvaluator<T> : IFilter
public interface ICollectionEvaluator<T> : IGenericEvaluator<T>
{
}
}
2 changes: 1 addition & 1 deletion GenericEvaluators/Interfaces/IDateTimeEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface IDateTimeEvaluator<T> : IFilter
public interface IDateTimeEvaluator<T> : IGenericEvaluator<T>
{
}
}
6 changes: 6 additions & 0 deletions GenericEvaluators/Interfaces/IGenericEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface IGenericEvaluator<T> : IFilter
{
}
}
2 changes: 1 addition & 1 deletion GenericEvaluators/Interfaces/INumbersEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface INumbersEvaluator<T> : IFilter
public interface INumbersEvaluator<T> : IGenericEvaluator<T>
{
}
}
2 changes: 1 addition & 1 deletion GenericEvaluators/Interfaces/IStringsEvaluator`1.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace FluentSearchEngine.GenericEvaluators.Interfaces
{
public interface IStringsEvaluator<T> : IFilter
public interface IStringsEvaluator<T> : IGenericEvaluator<T>
{
}
}
26 changes: 26 additions & 0 deletions Tests/FluentSearchEngine.Tests/Extensions/GenericExtensionsTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
using FluentAssertions;
using FluentSearchEngine.Extensions;
using FluentSearchEngine.GenericEvaluators;
using Xunit;

namespace FluentSearchEngine.Tests.Extensions;

public class GenericExtensionsTest
{
[Fact]
public void Exists()
{
//arrange
var evaluator = new SearchQueryBuilder<EmployeeWithoutGeoModel>()
.Value(x => x.Age).Exists()
.Value(x => x.Name).Exists();

//act
var searchQuery = evaluator.Evaluate();
var filter = (string)searchQuery.Filter;

//assert
searchQuery.Should().NotBeNull();
filter.Should().Be("age EXISTS AND name EXISTS");
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.8.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.0" />
<PackageReference Include="xunit" Version="2.4.2" />
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="xunit" Version="2.6.4" />
</ItemGroup>

<ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion Tests/FluentSearchEngine.Tests/SearchQueryBuilderTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public void WithinRadius_WhenCalled_OnGeoModel_ShouldMatchQuery()

//assert
searchQuery.Should().NotBeNull();
filter.Should().Be("_geoRadius(21.654640,21.241000,2000)");
filter.Should().Be("_geoRadius(21.654640, 21.241000, 2000)");
}

[Fact]
Expand Down

0 comments on commit 0e5cfa9

Please sign in to comment.