< Summary

Information
Class: MyNet.Humanizer.Temporal.TimeHumanizationBuilder
Assembly: MyNet.Humanizer
File(s): https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Humanizer/Temporal/TimeHumanizationBuilder.cs
Tag: 323_28699572109
Line coverage
67%
Covered lines: 41
Uncovered lines: 20
Coverable lines: 61
Total lines: 238
Line coverage: 67.2%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor()100%11100%
From(...)100%11100%
AsDuration()100%210%
AsRelative()100%11100%
WithTense(...)100%11100%
MinUnit(...)100%210%
MaxUnit(...)100%210%
UseUnits(...)100%11100%
MaxComponents(...)100%11100%
IncludeZeroUnits()100%210%
ExcludeZeroUnits()100%210%
Hierarchical()100%210%
LargestUnitOnly()100%210%
SmallestUnitOnly()100%210%
Fuzzy()100%11100%
Precise()100%11100%
WithQuantizer(...)100%210%
WithListFormatting(...)100%210%
Build()100%11100%

File(s)

https://raw.githubusercontent.com/sandre58/MyNet/85372080fe102cd9ee155ceab49ae000e7f66103/src/MyNet.Humanizer/Temporal/TimeHumanizationBuilder.cs

#LineLine coverage
 1// -----------------------------------------------------------------------
 2// <copyright file="TimeHumanizationBuilder.cs" company="Stéphane ANDRE">
 3// Copyright (c) Stéphane ANDRE. All rights reserved.
 4// </copyright>
 5// -----------------------------------------------------------------------
 6
 7using System;
 8using MyNet.Humanizer.Formatting.Collections;
 9using MyNet.Primitives;
 10using MyNet.Temporal.Decomposition;
 11
 12namespace MyNet.Humanizer.Temporal;
 13
 14/// <summary>
 15/// Fluent builder used to configure <see cref="TimeHumanizationOptions"/>.
 16/// </summary>
 17public sealed class TimeHumanizationBuilder
 18{
 1519    private TimeHumanizationMode _mode = TimeHumanizationMode.Duration;
 1520    private TimeUnit _minUnit = TimeUnit.Second;
 1521    private TimeUnit _maxUnit = TimeUnit.Year;
 1522    private int? _maxComponents = 2;
 23    private bool _includeZeroUnits;
 24    private TimeSpanDecompositionMode _decompositionMode = TimeSpanDecompositionMode.Hierarchical;
 25    private ITimeSpanQuantizer? _quantizer;
 26    private Tense? _tense;
 1527    private ListFormattingOptions _listFormatting = ListFormattingOptionsPresets.CommaSeparated;
 28
 29    /// <summary>
 30    /// Configures the builder from an existing preset or options instance.
 31    /// </summary>
 32    /// <param name="options">The source options.</param>
 33    /// <returns>The current builder.</returns>
 34    public TimeHumanizationBuilder From(TimeHumanizationOptions options)
 35    {
 336        ArgumentNullException.ThrowIfNull(options);
 37
 338        _mode = options.Mode;
 339        _minUnit = options.MinUnit;
 340        _maxUnit = options.MaxUnit;
 341        _maxComponents = options.MaxComponents;
 342        _includeZeroUnits = options.IncludeZeroUnits;
 343        _decompositionMode = options.DecompositionMode;
 344        _quantizer = options.Quantizer;
 345        _tense = options.Tense;
 346        _listFormatting = options.ListFormatting;
 47
 348        return this;
 49    }
 50
 51    /// <summary>
 52    /// Uses duration humanization.
 53    /// </summary>
 54    /// <returns>The current builder.</returns>
 55    public TimeHumanizationBuilder AsDuration()
 56    {
 057        _mode = TimeHumanizationMode.Duration;
 058        return this;
 59    }
 60
 61    /// <summary>
 62    /// Uses relative-time humanization.
 63    /// </summary>
 64    /// <returns>The current builder.</returns>
 65    public TimeHumanizationBuilder AsRelative()
 66    {
 667        _mode = TimeHumanizationMode.Relative;
 668        return this;
 69    }
 70
 71    /// <summary>
 72    /// Uses the specified tense for relative humanization.
 73    /// </summary>
 74    /// <param name="tense">The tense to use.</param>
 75    /// <returns>The current builder.</returns>
 76    public TimeHumanizationBuilder WithTense(Tense tense)
 77    {
 378        _tense = tense;
 379        return this;
 80    }
 81
 82    /// <summary>
 83    /// Uses the specified minimum unit.
 84    /// </summary>
 85    /// <param name="unit">The minimum unit.</param>
 86    /// <returns>The current builder.</returns>
 87    public TimeHumanizationBuilder MinUnit(TimeUnit unit)
 88    {
 089        _minUnit = unit;
 090        return this;
 91    }
 92
 93    /// <summary>
 94    /// Uses the specified maximum unit.
 95    /// </summary>
 96    /// <param name="unit">The maximum unit.</param>
 97    /// <returns>The current builder.</returns>
 98    public TimeHumanizationBuilder MaxUnit(TimeUnit unit)
 99    {
 0100        _maxUnit = unit;
 0101        return this;
 102    }
 103
 104    /// <summary>
 105    /// Uses the specified unit range.
 106    /// </summary>
 107    /// <param name="minUnit">The minimum unit.</param>
 108    /// <param name="maxUnit">The maximum unit.</param>
 109    /// <returns>The current builder.</returns>
 110    public TimeHumanizationBuilder UseUnits(TimeUnit minUnit, TimeUnit maxUnit)
 111    {
 3112        _minUnit = minUnit;
 3113        _maxUnit = maxUnit;
 114
 3115        return this;
 116    }
 117
 118    /// <summary>
 119    /// Limits the number of displayed components.
 120    /// </summary>
 121    /// <param name="count">The maximum number of components.</param>
 122    /// <returns>The current builder.</returns>
 123    public TimeHumanizationBuilder MaxComponents(int? count)
 124    {
 3125        _maxComponents = count;
 3126        return this;
 127    }
 128
 129    /// <summary>
 130    /// Includes zero-value units.
 131    /// </summary>
 132    /// <returns>The current builder.</returns>
 133    public TimeHumanizationBuilder IncludeZeroUnits()
 134    {
 0135        _includeZeroUnits = true;
 0136        return this;
 137    }
 138
 139    /// <summary>
 140    /// Excludes zero-value units.
 141    /// </summary>
 142    /// <returns>The current builder.</returns>
 143    public TimeHumanizationBuilder ExcludeZeroUnits()
 144    {
 0145        _includeZeroUnits = false;
 0146        return this;
 147    }
 148
 149    /// <summary>
 150    /// Uses hierarchical decomposition.
 151    /// </summary>
 152    /// <returns>The current builder.</returns>
 153    public TimeHumanizationBuilder Hierarchical()
 154    {
 0155        _decompositionMode = TimeSpanDecompositionMode.Hierarchical;
 0156        return this;
 157    }
 158
 159    /// <summary>
 160    /// Uses largest-unit-only decomposition.
 161    /// </summary>
 162    /// <returns>The current builder.</returns>
 163    public TimeHumanizationBuilder LargestUnitOnly()
 164    {
 0165        _decompositionMode = TimeSpanDecompositionMode.LargestUnitOnly;
 0166        return this;
 167    }
 168
 169    /// <summary>
 170    /// Uses smallest-unit-only decomposition.
 171    /// </summary>
 172    /// <returns>The current builder.</returns>
 173    public TimeHumanizationBuilder SmallestUnitOnly()
 174    {
 0175        _decompositionMode = TimeSpanDecompositionMode.SmallestUnitOnly;
 0176        return this;
 177    }
 178
 179    /// <summary>
 180    /// Uses fuzzy humanization.
 181    /// </summary>
 182    /// <returns>The current builder.</returns>
 183    public TimeHumanizationBuilder Fuzzy()
 184    {
 6185        _quantizer = HumanFriendlyTimeSpanQuantizer.Default;
 6186        return this;
 187    }
 188
 189    /// <summary>
 190    /// Uses precise humanization.
 191    /// </summary>
 192    /// <returns>The current builder.</returns>
 193    public TimeHumanizationBuilder Precise()
 194    {
 3195        _quantizer = null;
 3196        return this;
 197    }
 198
 199    /// <summary>
 200    /// Uses the specified quantizer.
 201    /// </summary>
 202    /// <param name="quantizer">The quantizer.</param>
 203    /// <returns>The current builder.</returns>
 204    public TimeHumanizationBuilder WithQuantizer(ITimeSpanQuantizer? quantizer)
 205    {
 0206        _quantizer = quantizer;
 0207        return this;
 208    }
 209
 210    /// <summary>
 211    /// Uses the specified list formatting options.
 212    /// </summary>
 213    /// <param name="options">The list formatting options.</param>
 214    /// <returns>The current builder.</returns>
 215    public TimeHumanizationBuilder WithListFormatting(ListFormattingOptions options)
 216    {
 0217        _listFormatting = options;
 0218        return this;
 219    }
 220
 221    /// <summary>
 222    /// Builds the configured <see cref="TimeHumanizationOptions"/>.
 223    /// </summary>
 224    /// <returns>The built options.</returns>
 15225    public TimeHumanizationOptions Build() => new()
 15226    {
 15227        Mode = _mode,
 15228        MinUnit = _minUnit,
 15229        MaxUnit = _maxUnit,
 15230        MaxComponents = _maxComponents,
 15231        IncludeZeroUnits = _includeZeroUnits,
 15232        DecompositionMode = _decompositionMode,
 15233        Quantizer = _quantizer,
 15234        Tense = _tense,
 15235        ListFormatting = _listFormatting
 15236    };
 237}
 238