< Summary

Information
Class: AsiBackbone.Core.Constraints.AsiBackboneConstraintEvaluationContext
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/AsiBackboneConstraintEvaluationContext.cs
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
Total lines: 73
Line coverage: 100%
Branch coverage
100%
Covered branches: 16
Total branches: 16
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%
.cctor()100%11100%
get_CorrelationId()100%11100%
get_PolicyVersion()100%11100%
get_PolicyHash()100%11100%
get_Metadata()100%11100%
get_HasMetadata()100%11100%
NormalizeOptional(...)100%22100%
NormalizeMetadata(...)100%1414100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Constraints/AsiBackboneConstraintEvaluationContext.cs

#LineLine coverage
 1using System.Collections.ObjectModel;
 2
 3namespace AsiBackbone.Core.Constraints;
 4
 5/// <summary>
 6/// Default framework-neutral context value used during constraint evaluation.
 7/// </summary>
 8/// <remarks>
 9/// Initializes a new instance of the <see cref="AsiBackboneConstraintEvaluationContext"/> class.
 10/// </remarks>
 11/// <param name="correlationId">Optional correlation identifier.</param>
 12/// <param name="policyVersion">Optional policy version.</param>
 13/// <param name="policyHash">Optional policy hash.</param>
 14/// <param name="metadata">Optional host-provided metadata.</param>
 2515public sealed class AsiBackboneConstraintEvaluationContext(
 2516    string? correlationId = null,
 2517    string? policyVersion = null,
 2518    string? policyHash = null,
 2519    IReadOnlyDictionary<string, string>? metadata = null) : IAsiBackboneConstraintEvaluationContext
 20{
 121    private static readonly IReadOnlyDictionary<string, string> EmptyMetadata =
 122        new ReadOnlyDictionary<string, string>(
 123            new Dictionary<string, string>(StringComparer.Ordinal));
 24
 25    /// <inheritdoc />
 4626    public string? CorrelationId { get; } = NormalizeOptional(correlationId);
 27
 28    /// <inheritdoc />
 4629    public string? PolicyVersion { get; } = NormalizeOptional(policyVersion);
 30
 31    /// <inheritdoc />
 4632    public string? PolicyHash { get; } = NormalizeOptional(policyHash);
 33
 34    /// <inheritdoc />
 6035    public IReadOnlyDictionary<string, string> Metadata { get; } = NormalizeMetadata(metadata);
 36
 37    /// <summary>
 38    /// Gets a value indicating whether this context contains metadata.
 39    /// </summary>
 840    public bool HasMetadata => Metadata.Count > 0;
 41
 42    private static string? NormalizeOptional(string? value)
 43    {
 7544        return string.IsNullOrWhiteSpace(value)
 7545            ? null
 7546            : value.Trim();
 47    }
 48
 49    private static IReadOnlyDictionary<string, string> NormalizeMetadata(
 50        IReadOnlyDictionary<string, string>? metadata)
 51    {
 2552        if (metadata is null || metadata.Count == 0)
 53        {
 654            return EmptyMetadata;
 55        }
 56
 1957        Dictionary<string, string> normalizedMetadata = new(StringComparer.Ordinal);
 58
 14659        foreach (KeyValuePair<string, string> item in metadata)
 60        {
 5461            if (string.IsNullOrWhiteSpace(item.Key))
 62            {
 63                continue;
 64            }
 65
 5166            normalizedMetadata[item.Key.Trim()] = item.Value?.Trim() ?? string.Empty;
 67        }
 68
 1969        return normalizedMetadata.Count == 0
 1970            ? EmptyMetadata
 1971            : new ReadOnlyDictionary<string, string>(normalizedMetadata);
 72    }
 73}