From 9f4c7bf3807ea13aad9c3a2e0c55e046672f1529 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Fri, 5 Jan 2024 08:31:39 -0700 Subject: [PATCH] refactored assignment markdown parsing and creation to their own classes --- .../Local/Assignment/LocalAssignment.cs | 52 ++----------------- .../LocalAssignmentMarkdownCreator.cs | 48 +++++++++++++++++ .../LocalAssignmentMarkdownParser.cs | 4 +- 3 files changed, 53 insertions(+), 51 deletions(-) create mode 100644 Management/Models/Local/Assignment/LocalAssignmentMarkdownCreator.cs diff --git a/Management/Models/Local/Assignment/LocalAssignment.cs b/Management/Models/Local/Assignment/LocalAssignment.cs index c31d0dd..0c484a1 100644 --- a/Management/Models/Local/Assignment/LocalAssignment.cs +++ b/Management/Models/Local/Assignment/LocalAssignment.cs @@ -40,7 +40,6 @@ public record LocalAssignment public string GetDescriptionHtml() { var rubricHtml = GetRubricHtml(); - return Markdig.Markdown.ToHtml(Description) + "
" + rubricHtml; } @@ -49,53 +48,8 @@ public record LocalAssignment .FirstOrDefault(g => g.Name == LocalAssignmentGroupName)? .CanvasId; - - public string ToYaml() - { - var serializer = new SerializerBuilder().DisableAliases().Build(); - var yaml = serializer.Serialize(this); - return yaml; - } - - public string ToMarkdown() - { - var settingsMarkdown = settingsToMarkdown(); - var rubricMarkdown = RubricToMarkdown(); - var assignmentMarkdown = - settingsMarkdown + "\n" - + "---\n\n" - + Description + "\n\n" - + "## Rubric\n\n" - + rubricMarkdown; - - 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}" + "\n"); - } - return builder.ToString(); - } - - private string settingsToMarkdown() - { - var builder = new StringBuilder(); - builder.Append($"Name: {Name}" + "\n"); - builder.Append($"LockAt: {LockAt}" + "\n"); - builder.Append($"DueAt: {DueAt}" + "\n"); - builder.Append($"AssignmentGroupName: {LocalAssignmentGroupName}" + "\n"); - builder.Append($"SubmissionTypes:" + "\n"); - foreach (var submissionType in SubmissionTypes) - { - builder.Append($"- {submissionType}" + "\n"); - } - return builder.ToString(); - } - + public string ToMarkdown() => this.AssignmentToMarkdown(); + public string RubricToMarkdown() => this.AssignmentRubricToMarkdown(); public static LocalAssignment ParseMarkdown(string input) => LocalAssignmentMarkdownParser.ParseMarkdown(input); + public static IEnumerable ParseRubricMarkdown(string rawMarkdown) => LocalAssignmentMarkdownParser.ParseRubricMarkdown(rawMarkdown); } diff --git a/Management/Models/Local/Assignment/LocalAssignmentMarkdownCreator.cs b/Management/Models/Local/Assignment/LocalAssignmentMarkdownCreator.cs new file mode 100644 index 0000000..c4a306a --- /dev/null +++ b/Management/Models/Local/Assignment/LocalAssignmentMarkdownCreator.cs @@ -0,0 +1,48 @@ +using System.Text; +using LocalModels; + +namespace LocalModels; +public static class LocalAssignmentMarkdownCreator +{ + + + public static string AssignmentToMarkdown(this LocalAssignment assignment) + { + var settingsMarkdown = assignment.settingsToMarkdown(); + var rubricMarkdown = assignment.RubricToMarkdown(); + var assignmentMarkdown = + settingsMarkdown + "\n" + + "---\n\n" + + assignment.Description + "\n\n" + + "## Rubric\n\n" + + rubricMarkdown; + + return assignmentMarkdown; + } + + public static string AssignmentRubricToMarkdown(this LocalAssignment assignment) + { + var builder = new StringBuilder(); + foreach (var item in assignment.Rubric) + { + var pointLabel = item.Points > 1 ? "pts" : "pt"; + builder.Append($"- {item.Points}{pointLabel}: {item.Label}" + "\n"); + } + return builder.ToString(); + } + + private static string settingsToMarkdown(this LocalAssignment assignment) + { + var builder = new StringBuilder(); + builder.Append($"Name: {assignment.Name}" + "\n"); + builder.Append($"LockAt: {assignment.LockAt}" + "\n"); + builder.Append($"DueAt: {assignment.DueAt}" + "\n"); + builder.Append($"AssignmentGroupName: {assignment.LocalAssignmentGroupName}" + "\n"); + builder.Append($"SubmissionTypes:" + "\n"); + foreach (var submissionType in assignment.SubmissionTypes) + { + builder.Append($"- {submissionType}" + "\n"); + } + return builder.ToString(); + } +} \ No newline at end of file diff --git a/Management/Models/Local/Assignment/LocalAssignmentMarkdownParser.cs b/Management/Models/Local/Assignment/LocalAssignmentMarkdownParser.cs index 3b0c66a..e9f5ad8 100644 --- a/Management/Models/Local/Assignment/LocalAssignmentMarkdownParser.cs +++ b/Management/Models/Local/Assignment/LocalAssignmentMarkdownParser.cs @@ -50,11 +50,11 @@ public static class LocalAssignmentMarkdownParser private static List parseSubmissionTypes(string input) { input = input.Replace("\r\n", "\n"); - List submissionTypes = new List(); + List submissionTypes = []; // Define a regular expression pattern to match the bulleted list items string startOfTypePattern = @"- (.+)"; - Regex regex = new Regex(startOfTypePattern); + Regex regex = new(startOfTypePattern); var words = input.Split("SubmissionTypes:"); var inputAfterSubmissionTypes = words[1];