< Summary

Information
Class: MyNet.Temporal.Decomposition.TimeSpanDecompositionBuilder
Assembly: MyNet.Temporal
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Temporal/Decomposition/TimeSpanDecompositionBuilder.cs
Tag: 323_28699572109
Line coverage
68%
Covered lines: 22
Uncovered lines: 10
Coverable lines: 32
Total lines: 115
Line coverage: 68.7%
Branch coverage
50%
Covered branches: 1
Total branches: 2
Branch coverage: 50%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
AsHierarchical()100%11100%
AsFlat()100%210%
UseLargestUnitOnly()100%11100%
UseSmallestUnitOnly()100%210%
MaxComponents(...)100%11100%
WithMinUnit(...)100%11100%
WithMaxUnit(...)100%11100%
WithoutZeroUnits()100%210%
WithQuantizer(...)100%210%
WithUnitRules(...)100%210%
Decompose()50%22100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Temporal/Decomposition/TimeSpanDecompositionBuilder.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="TimeSpanDecompositionBuilder.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using System.Collections.Generic;
 9using MyNet.Primitives;
 10
 11namespace MyNet.Temporal.Decomposition;
 12
 13/// <summary>
 14/// Builder for configuring and performing decomposition of a TimeSpan into its components based on specified options.
 15/// </summary>
 16/// <param name="decomposer">The decomposer to use for the decomposition.</param>
 17/// <param name="timeSpan">The TimeSpan to decompose.</param>
 18public sealed class TimeSpanDecompositionBuilder(ITimeSpanDecomposer decomposer, TimeSpan timeSpan) : ITimeSpanDecomposi
 19{
 20    private TimeSpanDecompositionMode _mode = TimeSpanDecompositionMode.Hierarchical;
 21    private int? _maxComponents;
 22    private bool _removeZeros;
 23    private ITimeSpanQuantizer? _quantizer;
 24    private ITimeUnitRuleEngine? _ruleEngine;
 25    private TimeUnit _minUnit = TimeUnit.Millisecond;
 626    private TimeUnit _maxUnit = TimeUnit.Year;
 27
 28    /// <inheritdoc/>
 29    public ITimeSpanDecompositionBuilder AsHierarchical()
 30    {
 331        _mode = TimeSpanDecompositionMode.Hierarchical;
 332        return this;
 33    }
 34
 35    /// <inheritdoc/>
 36    public ITimeSpanDecompositionBuilder AsFlat()
 37    {
 038        _mode = TimeSpanDecompositionMode.Flat;
 039        return this;
 40    }
 41
 42    /// <inheritdoc/>
 43    public ITimeSpanDecompositionBuilder UseLargestUnitOnly()
 44    {
 345        _mode = TimeSpanDecompositionMode.LargestUnitOnly;
 346        return this;
 47    }
 48
 49    /// <inheritdoc/>
 50    public ITimeSpanDecompositionBuilder UseSmallestUnitOnly()
 51    {
 052        _mode = TimeSpanDecompositionMode.SmallestUnitOnly;
 053        return this;
 54    }
 55
 56    /// <inheritdoc/>
 57    public ITimeSpanDecompositionBuilder MaxComponents(int count)
 58    {
 659        _maxComponents = count;
 660        return this;
 61    }
 62
 63    /// <inheritdoc/>
 64    public ITimeSpanDecompositionBuilder WithMinUnit(TimeUnit minUnit)
 65    {
 666        _minUnit = minUnit;
 667        return this;
 68    }
 69
 70    /// <inheritdoc/>
 71    public ITimeSpanDecompositionBuilder WithMaxUnit(TimeUnit maxUnit)
 72    {
 673        _maxUnit = maxUnit;
 674        return this;
 75    }
 76
 77    /// <inheritdoc/>
 78    public ITimeSpanDecompositionBuilder WithoutZeroUnits()
 79    {
 080        _removeZeros = true;
 081        return this;
 82    }
 83
 84    /// <inheritdoc/>
 85    public ITimeSpanDecompositionBuilder WithQuantizer(ITimeSpanQuantizer quantizer)
 86    {
 087        _quantizer = quantizer;
 088        return this;
 89    }
 90
 91    /// <inheritdoc/>
 92    public ITimeSpanDecompositionBuilder WithUnitRules(ITimeUnitRuleEngine ruleEngine)
 93    {
 094        _ruleEngine = ruleEngine;
 095        return this;
 96    }
 97
 98    /// <inheritdoc/>
 99    public IReadOnlyList<TimeUnitValue> Decompose()
 100    {
 6101        var options = new TimeSpanDecompositionOptions
 6102        {
 6103            RuleEngine = _ruleEngine ?? TimeUnitRuleSelector.Default,
 6104            MinUnit = _minUnit,
 6105            MaxUnit = _maxUnit,
 6106            Quantizer = _quantizer,
 6107            IncludeZeroUnits = !_removeZeros,
 6108            MaxComponents = _maxComponents,
 6109            Mode = _mode
 6110        };
 111
 6112        return decomposer.Decompose(timeSpan, options);
 113    }
 114}
 115