< Summary

Information
Class: Chronicis.Client.Services.RenderDefinitionGeneratorService
Assembly: Chronicis.Client
File(s): /home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/RenderDefinitionGeneratorService.cs
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 48
Line coverage: 100%
Branch coverage
100%
Covered branches: 8
Total branches: 8
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Generate(...)100%22100%
UnwrapFields(...)100%66100%
CreateMinimal()100%11100%

File(s)

/home/runner/work/chronicis/chronicis/src/Chronicis.Client/Services/RenderDefinitionGeneratorService.cs

#LineLine coverage
 1using System.Text.Json;
 2using Chronicis.Client.Models;
 3
 4namespace Chronicis.Client.Services;
 5
 6/// <summary>
 7/// Generates a starter RenderDefinition from a sample JSON record.
 8/// Uses heuristics to group fields, detect ability scores, and choose render hints.
 9/// The output is a starting point for manual refinement.
 10/// </summary>
 11public static class RenderDefinitionGeneratorService
 12{
 13    public static RenderDefinition Generate(JsonElement sample)
 14    {
 1015        var dataSource = UnwrapFields(sample);
 1016        if (dataSource.ValueKind != JsonValueKind.Object)
 117            return CreateMinimal();
 18
 919        var (titleField, hidden, remaining) = FieldClassifier.Classify(dataSource);
 920        var prefixGroups = PrefixGroupDetector.DetectGroups(remaining);
 921        var sections = SectionBuilder.Build(remaining, prefixGroups);
 22
 923        return new RenderDefinition
 924        {
 925            TitleField = titleField,
 926            CatchAll = true,
 927            Hidden = hidden,
 928            Sections = sections
 929        };
 30    }
 31
 32    private static JsonElement UnwrapFields(JsonElement sample)
 33    {
 1034        if (sample.ValueKind == JsonValueKind.Object &&
 1035            sample.TryGetProperty("fields", out var fields) &&
 1036            fields.ValueKind == JsonValueKind.Object)
 37        {
 138            return fields;
 39        }
 940        return sample;
 41    }
 42
 143    private static RenderDefinition CreateMinimal() => new()
 144    {
 145        CatchAll = true,
 146        Sections = new List<RenderSection>()
 147    };
 48}