< Summary

Information
Class: Fluorite.Strainer.Services.StrainerProcessor
Assembly: Fluorite.Strainer
File(s): /builds/fluorite/strainer/src/Strainer/Services/StrainerProcessor.cs
Line coverage
100%
Covered lines: 36
Uncovered lines: 0
Coverable lines: 36
Total lines: 132
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%
Apply(...)100%66100%
ApplyFiltering(...)100%11100%
ApplyPagination(...)100%11100%
ApplySorting(...)100%11100%

File(s)

/builds/fluorite/strainer/src/Strainer/Services/StrainerProcessor.cs

#LineLine coverage
 1using Fluorite.Strainer.Models;
 2using Fluorite.Strainer.Services.Pipelines;
 3
 4namespace Fluorite.Strainer.Services;
 5
 6/// <summary>
 7/// Default implementation of Strainer main service taking care of filtering,
 8/// sorting and pagination.
 9/// </summary>
 10public class StrainerProcessor : IStrainerProcessor
 11{
 12    private readonly IStrainerPipelineBuilderFactory _strainerPipelineBuilderFactory;
 13
 14    /// <summary>
 15    /// Initializes a new instance of the <see cref="StrainerProcessor"/> class
 16    /// with specified context.
 17    /// </summary>
 18    /// <param name="strainerPipelineBuilderFactory"></param>
 19    /// <exception cref="ArgumentNullException">
 20    /// <paramref name="strainerPipelineBuilderFactory"/> is <see langword="null"/>.
 21    /// </exception>
 522    public StrainerProcessor(
 523        IStrainerPipelineBuilderFactory strainerPipelineBuilderFactory)
 24    {
 525        _strainerPipelineBuilderFactory = Guard.Against.Null(strainerPipelineBuilderFactory);
 526    }
 27
 28    /// <inheritdoc/>
 29    /// <exception cref="ArgumentNullException">
 30    /// <paramref name="model"/> is <see langword="null"/>.
 31    /// </exception>
 32    /// <exception cref="ArgumentNullException">
 33    /// <paramref name="source"/> is <see langword="null"/>.
 34    /// </exception>
 35    public IQueryable<TEntity> Apply<TEntity>(
 36        IStrainerModel model,
 37        IQueryable<TEntity> source,
 38        bool applyFiltering = true,
 39        bool applySorting = true,
 40        bool applyPagination = true)
 41    {
 142        Guard.Against.Null(model);
 143        Guard.Against.Null(source);
 44
 145        var builder = _strainerPipelineBuilderFactory.CreateBuilder();
 46
 147        if (applyFiltering)
 48        {
 149            builder.Filter();
 50        }
 51
 152        if (applySorting)
 53        {
 154            builder.Sort();
 55        }
 56
 157        if (applyPagination)
 58        {
 159            builder.Paginate();
 60        }
 61
 162        var pipeline = builder.Build();
 63
 164        return pipeline.Run(model, source);
 65    }
 66
 67    /// <inheritdoc/>
 68    /// <exception cref="ArgumentNullException">
 69    /// <paramref name="model"/> is <see langword="null"/>.
 70    /// </exception>
 71    /// <exception cref="ArgumentNullException">
 72    /// <paramref name="source"/> is <see langword="null"/>.
 73    /// </exception>
 74    public IQueryable<TEntity> ApplyFiltering<TEntity>(
 75        IStrainerModel model,
 76        IQueryable<TEntity> source)
 77    {
 178        Guard.Against.Null(model);
 179        Guard.Against.Null(source);
 80
 181        var pipeline = _strainerPipelineBuilderFactory
 182            .CreateBuilder()
 183            .Filter()
 184            .Build();
 85
 186        return pipeline.Run(model, source);
 87    }
 88
 89    /// <inheritdoc/>
 90    /// <exception cref="ArgumentNullException">
 91    /// <paramref name="model"/> is <see langword="null"/>.
 92    /// </exception>
 93    /// <exception cref="ArgumentNullException">
 94    /// <paramref name="source"/> is <see langword="null"/>.
 95    /// </exception>
 96    public IQueryable<TEntity> ApplyPagination<TEntity>(
 97        IStrainerModel model,
 98        IQueryable<TEntity> source)
 99    {
 1100        Guard.Against.Null(model);
 1101        Guard.Against.Null(source);
 102
 1103        var pipeline = _strainerPipelineBuilderFactory
 1104            .CreateBuilder()
 1105            .Paginate()
 1106            .Build();
 107
 1108        return pipeline.Run(model, source);
 109    }
 110
 111    /// <inheritdoc/>
 112    /// <exception cref="ArgumentNullException">
 113    /// <paramref name="model"/> is <see langword="null"/>.
 114    /// </exception>
 115    /// <exception cref="ArgumentNullException">
 116    /// <paramref name="source"/> is <see langword="null"/>.
 117    /// </exception>
 118    public IQueryable<TEntity> ApplySorting<TEntity>(
 119        IStrainerModel model,
 120        IQueryable<TEntity> source)
 121    {
 1122        Guard.Against.Null(model);
 1123        Guard.Against.Null(source);
 124
 1125        var pipeline = _strainerPipelineBuilderFactory
 1126            .CreateBuilder()
 1127            .Sort()
 1128            .Build();
 129
 1130        return pipeline.Run(model, source);
 131    }
 132}