mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
wrote rubric parsing tests
This commit is contained in:
@@ -9,6 +9,7 @@
|
|||||||
private string rubricText = "";
|
private string rubricText = "";
|
||||||
private int rubricReloadKey = 0;
|
private int rubricReloadKey = 0;
|
||||||
|
|
||||||
|
|
||||||
protected override void OnInitialized()
|
protected override void OnInitialized()
|
||||||
{
|
{
|
||||||
assignmentContext.StateHasChanged += reload;
|
assignmentContext.StateHasChanged += reload;
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using YamlDotNet.Serialization;
|
using YamlDotNet.Serialization;
|
||||||
|
|
||||||
@@ -97,28 +98,41 @@ public record LocalAssignment
|
|||||||
return assignmentMarkdown;
|
return assignmentMarkdown;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string RubricToMarkdown()
|
||||||
|
{
|
||||||
|
var builder = new StringBuilder();
|
||||||
|
foreach (var item in Rubric)
|
||||||
|
{
|
||||||
|
var pointLabel = item.Points > 1 ? "pts" : "pt";
|
||||||
|
builder.Append($"- {item.Points}{pointLabel}: {item.Label}" + Environment.NewLine);
|
||||||
|
}
|
||||||
|
return builder.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
|
public static IEnumerable<RubricItem> ParseRubricMarkdown(string rawMarkdown)
|
||||||
{
|
{
|
||||||
var lines = rawMarkdown.Trim().Split(Environment.NewLine);
|
var lines = rawMarkdown.Trim().Split(Environment.NewLine);
|
||||||
var items = lines.Select(l =>
|
var items = lines.Select(parseIndividualRubricItemMarkdown).ToArray();
|
||||||
{
|
|
||||||
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
|
|
||||||
var match = Regex.Match(l, pointsPattern);
|
|
||||||
if (!match.Success)
|
|
||||||
throw new RubricMarkdownParseException($"points not found: {l}");
|
|
||||||
|
|
||||||
var points = int.Parse(match.Groups[1].Value);
|
|
||||||
|
|
||||||
var label = string.Join(": ", l.Split(": ").Skip(1));
|
|
||||||
|
|
||||||
return new RubricItem()
|
|
||||||
{
|
|
||||||
Points = points,
|
|
||||||
Label = label
|
|
||||||
};
|
|
||||||
}).ToArray();
|
|
||||||
return items;
|
return items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static RubricItem parseIndividualRubricItemMarkdown(string rawMarkdown)
|
||||||
|
{
|
||||||
|
var pointsPattern = @"\s*-\s*(\d+)\s*pt(s)?:";
|
||||||
|
var match = Regex.Match(rawMarkdown, pointsPattern);
|
||||||
|
if (!match.Success)
|
||||||
|
throw new RubricMarkdownParseException($"points not found: {rawMarkdown}");
|
||||||
|
|
||||||
|
var points = int.Parse(match.Groups[1].Value);
|
||||||
|
|
||||||
|
var label = string.Join(": ", rawMarkdown.Split(": ").Skip(1));
|
||||||
|
|
||||||
|
return new RubricItem()
|
||||||
|
{
|
||||||
|
Points = points,
|
||||||
|
Label = label
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RubricMarkdownParseException : Exception
|
public class RubricMarkdownParseException : Exception
|
||||||
|
|||||||
Reference in New Issue
Block a user