From 48b2a5f5bfdaa2b575db0600fdbbc32e82dac822 Mon Sep 17 00:00:00 2001 From: T-JGrote <135832474+T-JGrote@users.noreply.github.com> Date: Thu, 15 Jun 2023 07:19:01 +0000 Subject: [PATCH] Lab3 Implementation --- src/Lab.3.Bouncer/AssertPEUAgeCmdlet.cs | 28 +++++++++++++++++++++++++ src/Lab.3.Bouncer/GetPEUAgeCmdlet.cs | 21 +++++++++++-------- src/Lab.3.Bouncer/Person.cs | 10 +++++++++ src/Lab.3.Bouncer/TestPEUAgeCmdlet.cs | 0 4 files changed, 50 insertions(+), 9 deletions(-) create mode 100644 src/Lab.3.Bouncer/AssertPEUAgeCmdlet.cs create mode 100644 src/Lab.3.Bouncer/Person.cs delete mode 100644 src/Lab.3.Bouncer/TestPEUAgeCmdlet.cs diff --git a/src/Lab.3.Bouncer/AssertPEUAgeCmdlet.cs b/src/Lab.3.Bouncer/AssertPEUAgeCmdlet.cs new file mode 100644 index 0000000..2d0d38e --- /dev/null +++ b/src/Lab.3.Bouncer/AssertPEUAgeCmdlet.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; +using System.Management.Automation; + +namespace PEURandom; + +[Cmdlet(VerbsLifecycle.Assert, "PEUAge")] +[OutputType(typeof(Person))] +public class AssertPEUAgeCmdlet : PSCmdlet +{ + [Parameter(Position = 0, ValueFromPipeline = true)] + public IPerson Person; + + [Parameter()] + public int Age = 18; + + protected override void ProcessRecord() + { + const int daysInAYear = 365; + var ageSpan = DateTime.Now - Person.BirthDate; + int personAge = (int)Math.Floor(ageSpan.TotalDays / daysInAYear); + if (personAge < Age) { + throw new InvalidDataException($"{Person.Name} is under the age of {Age}"); + } + + WriteObject(Person); + } +} \ No newline at end of file diff --git a/src/Lab.3.Bouncer/GetPEUAgeCmdlet.cs b/src/Lab.3.Bouncer/GetPEUAgeCmdlet.cs index 7e26dc4..684c326 100644 --- a/src/Lab.3.Bouncer/GetPEUAgeCmdlet.cs +++ b/src/Lab.3.Bouncer/GetPEUAgeCmdlet.cs @@ -1,23 +1,26 @@ -namespace PEURandom; -using System; -using System.Management.Automation; +using System.Management.Automation; using LoremNET; -record Person(string Name, DateTime BirthDate); +namespace PEURandom; [Cmdlet(VerbsCommon.Get, "PEUAge")] [OutputType(typeof(Person))] -public class GetPEURandomSentenceCmdlet : PSCmdlet +public class GetPEUAgeCmdlet : PSCmdlet { - [Parameter(ValueFromPipeline = true)] + [Parameter(Position = 0, ValueFromPipeline = true, Mandatory = true)] public string Name; protected override void ProcessRecord() { - DateTime birthDate = Lorem.DateTime(); - WriteObject( - new Person(Name, birthDate) + GetPerson() + ); + } + + Person GetPerson() { + return new Person( + Name, + Lorem.DateTime() ); } } \ No newline at end of file diff --git a/src/Lab.3.Bouncer/Person.cs b/src/Lab.3.Bouncer/Person.cs new file mode 100644 index 0000000..0167bb4 --- /dev/null +++ b/src/Lab.3.Bouncer/Person.cs @@ -0,0 +1,10 @@ +using System; + +namespace PEURandom; + +public interface IPerson { + string Name { get; } + DateTime BirthDate { get; } +} + +record Person(string Name, DateTime BirthDate) : IPerson; diff --git a/src/Lab.3.Bouncer/TestPEUAgeCmdlet.cs b/src/Lab.3.Bouncer/TestPEUAgeCmdlet.cs deleted file mode 100644 index e69de29..0000000