< Summary

Information
Class: AsiBackbone.Core.Evaluation.GovernancePolicyEvaluatorBuilder<T>
Assembly: AsiBackbone.Core
File(s): /home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Evaluation/GovernancePolicyEvaluatorBuilder.cs
Line coverage
100%
Covered lines: 25
Uncovered lines: 0
Coverable lines: 25
Total lines: 126
Line coverage: 100%
Branch coverage
100%
Covered branches: 4
Total branches: 4
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%
AddConstraint(...)100%11100%
AddConstraints(...)100%22100%
AddThreatModelContributor(...)100%11100%
AddThreatModelContributors(...)100%22100%
WithDecisionPolicy(...)100%11100%
WithOptions(...)100%11100%
WithLogger(...)100%11100%
Build()100%11100%

File(s)

/home/runner/work/AsiBackbone/AsiBackbone/src/AsiBackbone.Core/Evaluation/GovernancePolicyEvaluatorBuilder.cs

#LineLine coverage
 1using AsiBackbone.Core.Constraints;
 2using AsiBackbone.Core.ThreatModeling;
 3using Microsoft.Extensions.Logging;
 4
 5namespace AsiBackbone.Core.Evaluation;
 6
 7/// <summary>
 8/// Fluent builder for <see cref="DefaultGovernancePolicyEvaluator{TContext}" />.
 9/// </summary>
 10/// <remarks>
 11/// Every call to <see cref="Build" /> creates an independent evaluator that snapshots the constraints and threat model
 12/// contributors added so far. Later builder changes do not affect evaluators that were already built. Options are
 13/// validated and frozen by the first evaluator built with them.
 14/// </remarks>
 15/// <typeparam name="TContext">The framework-neutral evaluation context type.</typeparam>
 16public sealed class GovernancePolicyEvaluatorBuilder<TContext>
 17    where TContext : IGovernanceEvaluationContext
 18{
 819    private readonly List<IGovernanceConstraint<TContext>> constraints = [];
 820    private readonly List<IThreatModelContributor<TContext>> threatModelContributors = [];
 21    private IGovernanceDecisionPolicy<TContext>? decisionPolicy;
 22    private GovernancePolicyOptions? options;
 23    private ILogger<DefaultGovernancePolicyEvaluator<TContext>>? logger;
 24
 825    internal GovernancePolicyEvaluatorBuilder()
 26    {
 827    }
 28
 29    /// <summary>
 30    /// Adds a constraint to the end of the active policy structure.
 31    /// </summary>
 32    /// <param name="constraint">The constraint to add.</param>
 33    /// <returns>The same builder instance.</returns>
 34    public GovernancePolicyEvaluatorBuilder<TContext> AddConstraint(IGovernanceConstraint<TContext> constraint)
 35    {
 1036        ArgumentNullException.ThrowIfNull(constraint);
 837        constraints.Add(constraint);
 838        return this;
 39    }
 40
 41    /// <summary>
 42    /// Adds constraints, in order, to the end of the active policy structure.
 43    /// </summary>
 44    /// <param name="constraints">The constraints to add.</param>
 45    /// <returns>The same builder instance.</returns>
 46    public GovernancePolicyEvaluatorBuilder<TContext> AddConstraints(IEnumerable<IGovernanceConstraint<TContext>> constr
 47    {
 348        ArgumentNullException.ThrowIfNull(constraints);
 949        foreach (IGovernanceConstraint<TContext> constraint in constraints)
 50        {
 351            AddConstraint(constraint);
 52        }
 53
 154        return this;
 55    }
 56
 57    /// <summary>
 58    /// Adds a threat model contributor that inspects the context before constraint composition.
 59    /// </summary>
 60    /// <param name="contributor">The contributor to add.</param>
 61    /// <returns>The same builder instance.</returns>
 62    public GovernancePolicyEvaluatorBuilder<TContext> AddThreatModelContributor(IThreatModelContributor<TContext> contri
 63    {
 464        ArgumentNullException.ThrowIfNull(contributor);
 265        threatModelContributors.Add(contributor);
 266        return this;
 67    }
 68
 69    /// <summary>
 70    /// Adds threat model contributors, in order, that inspect the context before constraint composition.
 71    /// </summary>
 72    /// <param name="contributors">The contributors to add.</param>
 73    /// <returns>The same builder instance.</returns>
 74    public GovernancePolicyEvaluatorBuilder<TContext> AddThreatModelContributors(IEnumerable<IThreatModelContributor<TCo
 75    {
 376        ArgumentNullException.ThrowIfNull(contributors);
 777        foreach (IThreatModelContributor<TContext> contributor in contributors)
 78        {
 279            AddThreatModelContributor(contributor);
 80        }
 81
 182        return this;
 83    }
 84
 85    /// <summary>
 86    /// Sets the decision policy applied after composition, replacing any previously set policy.
 87    /// </summary>
 88    /// <param name="decisionPolicy">The decision policy, or <see langword="null" /> for none.</param>
 89    /// <returns>The same builder instance.</returns>
 90    public GovernancePolicyEvaluatorBuilder<TContext> WithDecisionPolicy(IGovernanceDecisionPolicy<TContext>? decisionPo
 91    {
 392        this.decisionPolicy = decisionPolicy;
 393        return this;
 94    }
 95
 96    /// <summary>
 97    /// Sets the evaluator options, replacing any previously set options.
 98    /// </summary>
 99    /// <param name="options">The options, or <see langword="null" /> for defaults.</param>
 100    /// <returns>The same builder instance.</returns>
 101    public GovernancePolicyEvaluatorBuilder<TContext> WithOptions(GovernancePolicyOptions? options)
 102    {
 1103        this.options = options;
 1104        return this;
 105    }
 106
 107    /// <summary>
 108    /// Sets the logger used to emit operational warning signals, replacing any previously set logger.
 109    /// </summary>
 110    /// <param name="logger">The logger, or <see langword="null" /> for none.</param>
 111    /// <returns>The same builder instance.</returns>
 112    public GovernancePolicyEvaluatorBuilder<TContext> WithLogger(ILogger<DefaultGovernancePolicyEvaluator<TContext>>? lo
 113    {
 1114        this.logger = logger;
 1115        return this;
 116    }
 117
 118    /// <summary>
 119    /// Creates an evaluator from the current builder state.
 120    /// </summary>
 121    /// <returns>A new evaluator.</returns>
 122    public DefaultGovernancePolicyEvaluator<TContext> Build()
 123    {
 8124        return new DefaultGovernancePolicyEvaluator<TContext>(constraints, threatModelContributors, decisionPolicy, opti
 125    }
 126}