< Summary

Information
Class: Fluorite.Strainer.Services.Sorting.CustomSortingExpressionProvider
Assembly: Fluorite.Strainer
File(s): /builds/fluorite/strainer/src/Strainer/Services/Sorting/CustomSortingExpressionProvider.cs
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 56
Line coverage: 100%
Branch coverage
100%
Covered branches: 6
Total branches: 6
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
TryGetCustomExpression(...)100%22100%
GetExpression(...)100%22100%
TryGetCustomSortingMethod(...)100%22100%

File(s)

/builds/fluorite/strainer/src/Strainer/Services/Sorting/CustomSortingExpressionProvider.cs

#LineLine coverage
 1using Fluorite.Strainer.Models.Sorting;
 2using Fluorite.Strainer.Models.Sorting.Terms;
 3using Fluorite.Strainer.Services.Configuration;
 4using System.Linq.Expressions;
 5
 6namespace Fluorite.Strainer.Services.Sorting;
 7
 8public class CustomSortingExpressionProvider : ICustomSortingExpressionProvider
 9{
 10    private readonly IConfigurationCustomMethodsProvider _configurationCustomMethodsProvider;
 11
 512    public CustomSortingExpressionProvider(IConfigurationCustomMethodsProvider configurationCustomMethodsProvider)
 13    {
 514        _configurationCustomMethodsProvider = Guard.Against.Null(configurationCustomMethodsProvider);
 515    }
 16
 17    public bool TryGetCustomExpression<T>(
 18        ISortTerm sortTerm,
 19        bool isSubsequent,
 20        out ISortExpression<T>? sortExpression)
 21    {
 422        Guard.Against.Null(sortTerm);
 23
 424        if (!TryGetCustomSortingMethod<T>(sortTerm, out var customMethod))
 25        {
 226            sortExpression = null;
 27
 228            return false;
 29        }
 30
 231        var expression = GetExpression(sortTerm, (ICustomSortMethod<T>)customMethod!);
 232        sortExpression = new SortExpression<T>(expression)
 233        {
 234            IsDefault = false,
 235            IsDescending = sortTerm.IsDescending,
 236            IsSubsequent = isSubsequent,
 237        };
 38
 239        return true;
 40    }
 41
 42    private Expression<Func<T, object>> GetExpression<T>(ISortTerm sortTerm, ICustomSortMethod<T> customSortMethod)
 43    {
 244        return customSortMethod.ExpressionProvider != null
 245            ? customSortMethod.ExpressionProvider(sortTerm)
 246            : customSortMethod.Expression!;
 47    }
 48
 49    private bool TryGetCustomSortingMethod<T>(ISortTerm sortTerm, out ICustomSortMethod? customMethod)
 50    {
 451        customMethod = null;
 52
 453        return _configurationCustomMethodsProvider.GetCustomSortMethods().TryGetValue(typeof(T), out var customSortMetho
 454            && customSortMethods.TryGetValue(sortTerm.Name, out customMethod);
 55    }
 56}