From f8f9eb602b329c5a6f650550e9464b3a71d663e4 Mon Sep 17 00:00:00 2001 From: Geovanni Perez <1775792+geoperez@users.noreply.github.com> Date: Sat, 8 Mar 2025 12:53:01 -0600 Subject: [PATCH 1/2] Refactor methods to improve code Refactor code to change `Next` and `Previous` properties to methods with an optional `offset` parameter. * **Interfaces/ILinkedEntity.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearAbstract.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearEntity.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearMonth.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearQuarter.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearToDate.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearWeek.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearWeekBase.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **YearWeekIso.cs** - Change `Previous` property to `Previous(int offset = 1)` method - Change `Next` property to `Next(int offset = 1)` method * **Unit Tests** - Update tests in `YearMonth-Tests.cs`, `YearQuarter-Tests.cs`, `YearToDate-Tests.cs`, `YearWeek-Tests.cs`, and `YearWeekIsoTests.cs` to use `Previous(int offset = 1)` and `Next(int offset = 1)` methods --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/unosquare/unodatetime?shareId=XXXX-XXXX-XXXX-XXXX). --- .../Interfaces/ILinkedEntity.cs | 6 +++--- src/Unosquare.DateTimeExt/YearAbstract.cs | 6 +++--- src/Unosquare.DateTimeExt/YearEntity.cs | 6 +++--- src/Unosquare.DateTimeExt/YearMonth.cs | 6 +++--- src/Unosquare.DateTimeExt/YearQuarter.cs | 6 +++--- src/Unosquare.DateTimeExt/YearToDate.cs | 6 +++--- src/Unosquare.DateTimeExt/YearWeek.cs | 6 +++--- src/Unosquare.DateTimeExt/YearWeekBase.cs | 6 +++--- src/Unosquare.DateTimeExt/YearWeekIso.cs | 6 +++--- .../YearMonth-Tests.cs | 6 +++--- .../YearToDate-Tests.cs | 20 ++++++++++++++++++- .../YearWeek-Tests.cs | 6 +++--- .../YearWeekIsoTests.cs | 6 +++--- 13 files changed, 55 insertions(+), 37 deletions(-) diff --git a/src/Unosquare.DateTimeExt/Interfaces/ILinkedEntity.cs b/src/Unosquare.DateTimeExt/Interfaces/ILinkedEntity.cs index a0c0321..8f3b840 100644 --- a/src/Unosquare.DateTimeExt/Interfaces/ILinkedEntity.cs +++ b/src/Unosquare.DateTimeExt/Interfaces/ILinkedEntity.cs @@ -2,8 +2,8 @@ public interface ILinkedEntity { - T Previous { get; } - T Next { get; } + T Previous(int offset = 1); + T Next(int offset = 1); bool IsCurrent { get; } -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearAbstract.cs b/src/Unosquare.DateTimeExt/YearAbstract.cs index 07333c3..e4948bb 100644 --- a/src/Unosquare.DateTimeExt/YearAbstract.cs +++ b/src/Unosquare.DateTimeExt/YearAbstract.cs @@ -30,9 +30,9 @@ protected YearAbstract(DateTime startDate, DateTime endDate) public IReadOnlyCollection Quarters { get; } - public abstract T Previous { get; } + public abstract T Previous(int offset = 1); - public abstract T Next { get; } + public abstract T Next(int offset = 1); public abstract bool IsCurrent { get; } -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearEntity.cs b/src/Unosquare.DateTimeExt/YearEntity.cs index 46795e1..8ffe50b 100644 --- a/src/Unosquare.DateTimeExt/YearEntity.cs +++ b/src/Unosquare.DateTimeExt/YearEntity.cs @@ -10,9 +10,9 @@ public YearEntity(DateTime? dateTime) public static YearEntity Current => new(); - public override YearEntity Next => new(StartDate.AddYears(1)); + public override YearEntity Next(int offset = 1) => new(StartDate.AddYears(offset)); - public override YearEntity Previous => new(StartDate.AddYears(-1)); + public override YearEntity Previous(int offset = 1) => new(StartDate.AddYears(-offset)); public override bool IsCurrent => IsCurrentYear; -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearMonth.cs b/src/Unosquare.DateTimeExt/YearMonth.cs index 2f85976..95e5005 100644 --- a/src/Unosquare.DateTimeExt/YearMonth.cs +++ b/src/Unosquare.DateTimeExt/YearMonth.cs @@ -34,9 +34,9 @@ public YearMonth(IYearWeek yearWeek) public YearEntity YearEntity => new(Year); - public override YearMonth Next => new(StartDate.AddMonths(1)); + public override YearMonth Next(int offset = 1) => new(StartDate.AddMonths(offset)); - public override YearMonth Previous => new(StartDate.AddMonths(-1)); + public override YearMonth Previous(int offset = 1) => new(StartDate.AddMonths(-offset)); public override bool IsCurrent => Month == DateTime.UtcNow.Month && IsCurrentYear; @@ -97,4 +97,4 @@ public int CompareTo(YearMonth? other) return other is null ? 1 : base.CompareTo(other); } -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearQuarter.cs b/src/Unosquare.DateTimeExt/YearQuarter.cs index 8bf227c..50043ef 100644 --- a/src/Unosquare.DateTimeExt/YearQuarter.cs +++ b/src/Unosquare.DateTimeExt/YearQuarter.cs @@ -34,9 +34,9 @@ public YearQuarter(DateTime? dateTime) public YearEntity YearEntity => new(Year); - public override YearQuarter Next => new(StartDate.AddMonths(QuarterMonths)); + public override YearQuarter Next(int offset = 1) => new(StartDate.AddMonths(QuarterMonths * offset)); - public override YearQuarter Previous => new(StartDate.AddMonths(-QuarterMonths)); + public override YearQuarter Previous(int offset = 1) => new(StartDate.AddMonths(-QuarterMonths * offset)); public override bool IsCurrent => Quarter == DateTime.UtcNow.GetQuarter() && IsCurrentYear; @@ -92,4 +92,4 @@ public static bool TryParse(string? value, out YearQuarter result) year ?? DateTime.UtcNow.Year, ((quarter ?? DateTime.UtcNow.GetQuarter()) - 1) * QuarterMonths + 1, 1); -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearToDate.cs b/src/Unosquare.DateTimeExt/YearToDate.cs index 731dac2..260a079 100644 --- a/src/Unosquare.DateTimeExt/YearToDate.cs +++ b/src/Unosquare.DateTimeExt/YearToDate.cs @@ -31,9 +31,9 @@ public YearToDate(int? year = null) public IReadOnlyCollection YearQuarters { get; } - public override YearToDate Previous => new(StartDate.AddYears(-1).Year); + public override YearToDate Previous(int offset = 1) => new(StartDate.AddYears(-offset).Year); - public override YearToDate Next => new(StartDate.AddYears(1).Year); + public override YearToDate Next(int offset = 1) => new(StartDate.AddYears(offset).Year); public override bool IsCurrent => IsCurrentYear; @@ -42,4 +42,4 @@ public YearToDate(int? year = null) private static DateTime CalculateEndDate(int? year) => CalculateStartDate(year).AddYears(1).AddDays(-1).OrUtcNow(); private static DateTime CalculateStartDate(int? year) => new(year ?? DateTime.UtcNow.Year, 1, 1); -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearWeek.cs b/src/Unosquare.DateTimeExt/YearWeek.cs index 89bdd04..f7d9d20 100644 --- a/src/Unosquare.DateTimeExt/YearWeek.cs +++ b/src/Unosquare.DateTimeExt/YearWeek.cs @@ -31,9 +31,9 @@ public YearWeek(DateTime? dateTime) public override int Week { get; } public override int Year => StartDate.Year; - public override YearWeek Next => new(StartDate.AddDays(WeekDays)); + public override YearWeek Next(int offset = 1) => new(StartDate.AddDays(WeekDays * offset)); - public override YearWeek Previous => new(StartDate.AddDays(-WeekDays)); + public override YearWeek Previous(int offset = 1) => new(StartDate.AddDays(-WeekDays * offset)); public override bool IsCurrent => IsCurrentYear && Week == DateTime.UtcNow.GetWeekOfYear(); @@ -75,4 +75,4 @@ public static bool TryParse(string? value, out YearWeek result) private static int WeekYear => DateTime.UtcNow.Month == 1 && DateTime.UtcNow.GetWeekOfYear() > 5 ? DateTime.UtcNow.Year - 1 : DateTime.UtcNow.Year; -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearWeekBase.cs b/src/Unosquare.DateTimeExt/YearWeekBase.cs index 06d3644..1bff6fc 100644 --- a/src/Unosquare.DateTimeExt/YearWeekBase.cs +++ b/src/Unosquare.DateTimeExt/YearWeekBase.cs @@ -7,8 +7,8 @@ public abstract class YearWeekBase(DateTime startDate, DateTime endDate) { protected const int WeekDays = 7; - public abstract T Previous { get; } - public abstract T Next { get; } + public abstract T Previous(int offset = 1); + public abstract T Next(int offset = 1); public abstract bool IsCurrent { get; } public abstract int Year { get; } public abstract int Week { get; } @@ -25,4 +25,4 @@ public void Deconstruct(out int year, out int week) } public override string ToString() => $"{Year}-W{Week.ToString().PadLeft(2, '0')}"; -} \ No newline at end of file +} diff --git a/src/Unosquare.DateTimeExt/YearWeekIso.cs b/src/Unosquare.DateTimeExt/YearWeekIso.cs index 0d56325..6ed6b32 100644 --- a/src/Unosquare.DateTimeExt/YearWeekIso.cs +++ b/src/Unosquare.DateTimeExt/YearWeekIso.cs @@ -26,9 +26,9 @@ public YearWeekIso(DateTime? dateTime = null) public override int Week => ISOWeek.GetWeekOfYear(StartDate); public override int Year => ISOWeek.GetYear(StartDate); - public override YearWeekIso Next => new(StartDate.AddDays(WeekDays)); + public override YearWeekIso Next(int offset = 1) => new(StartDate.AddDays(WeekDays * offset)); - public override YearWeekIso Previous => new(StartDate.AddDays(-WeekDays)); + public override YearWeekIso Previous(int offset = 1) => new(StartDate.AddDays(-WeekDays * offset)); public override bool IsCurrent => IsCurrentYear && Week == ISOWeek.GetWeekOfYear(DateTime.UtcNow); @@ -63,4 +63,4 @@ public static bool TryParse(string? value, out YearWeekIso result) result = new(week, year); return true; } -} \ No newline at end of file +} diff --git a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearMonth-Tests.cs b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearMonth-Tests.cs index e934a5c..4088bdb 100644 --- a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearMonth-Tests.cs +++ b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearMonth-Tests.cs @@ -23,7 +23,7 @@ public void WithMonth_Next() { var yearMonth = new YearMonth(month: 1, year: 2022); - Assert.Equal(new(2022, 2, 1), yearMonth.Next.StartDate); + Assert.Equal(new(2022, 2, 1), yearMonth.Next().StartDate); } [Fact] @@ -31,7 +31,7 @@ public void WithMonth_Previous() { var yearMonth = new YearMonth(month: 2, year: 2022); - Assert.Equal(new(2022, 1, 1), yearMonth.Previous.StartDate); + Assert.Equal(new(2022, 1, 1), yearMonth.Previous().StartDate); } [Fact] @@ -145,4 +145,4 @@ public void YearMonth_Deconstruct() Assert.Equal(2022, year); Assert.Equal(1, month); } -} \ No newline at end of file +} diff --git a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearToDate-Tests.cs b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearToDate-Tests.cs index cf2898c..a848ee5 100644 --- a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearToDate-Tests.cs +++ b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearToDate-Tests.cs @@ -109,4 +109,22 @@ public void YearToDate_YearMonths() Assert.Equal(12, yearMonths.Count); Assert.Equal(new(2021, 1, 1), yearMonths.First().StartDate); } -} \ No newline at end of file + + [Fact] + public void YearToDate_Previous() + { + var yearToDate = new YearToDate(2021); + var previousYearToDate = yearToDate.Previous(); + + Assert.Equal(2020, previousYearToDate.Year); + } + + [Fact] + public void YearToDate_Next() + { + var yearToDate = new YearToDate(2021); + var nextYearToDate = yearToDate.Next(); + + Assert.Equal(2022, nextYearToDate.Year); + } +} diff --git a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeek-Tests.cs b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeek-Tests.cs index f537f32..f40d6f7 100644 --- a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeek-Tests.cs +++ b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeek-Tests.cs @@ -51,7 +51,7 @@ public void WithWeek_Previous() { var yearMonth = new YearWeek(2, 2022); - Assert.Equal(new(2022, 1, 2), yearMonth.Previous.StartDate); + Assert.Equal(new(2022, 1, 2), yearMonth.Previous().StartDate); } [Fact] @@ -59,7 +59,7 @@ public void WithWeek_Next() { var yearMonth = new YearWeek(1, 2022); - Assert.Equal(new(2022, 1, 9), yearMonth.Next.StartDate); + Assert.Equal(new(2022, 1, 9), yearMonth.Next().StartDate); } [Fact] @@ -173,4 +173,4 @@ public void YearWeek_CompareTo() Assert.Equal(-1, yearWeek1.CompareTo(yearWeek3)); Assert.Equal(1, yearWeek3.CompareTo(yearWeek1)); } -} \ No newline at end of file +} diff --git a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeekIsoTests.cs b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeekIsoTests.cs index cdcc718..912ca24 100644 --- a/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeekIsoTests.cs +++ b/test/Unosquare.DateTimeExt.Test/Unosquare.DateTimeExt.Test/YearWeekIsoTests.cs @@ -51,7 +51,7 @@ public void WithWeek_Previous() { var yearMonth = new YearWeekIso(2, 2022); - Assert.Equal(new(2022, 1, 3), yearMonth.Previous.StartDate); + Assert.Equal(new(2022, 1, 3), yearMonth.Previous().StartDate); } [Fact] @@ -59,7 +59,7 @@ public void WithWeek_Next() { var yearMonth = new YearWeekIso(1, 2022); - Assert.Equal(new(2022, 1, 10), yearMonth.Next.StartDate); + Assert.Equal(new(2022, 1, 10), yearMonth.Next().StartDate); } [Fact] @@ -173,4 +173,4 @@ public void YearWeekIso_CompareTo() Assert.Equal(-1, yearWeek1.CompareTo(yearWeek3)); Assert.Equal(1, yearWeek3.CompareTo(yearWeek1)); } -} \ No newline at end of file +} From 9dc3594e09852d36508e46c7851524238804ec55 Mon Sep 17 00:00:00 2001 From: Geovanni Perez <1775792+geoperez@users.noreply.github.com> Date: Sat, 8 Mar 2025 12:56:56 -0600 Subject: [PATCH 2/2] Update Unosquare.DateTimeExt.csproj --- src/Unosquare.DateTimeExt/Unosquare.DateTimeExt.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Unosquare.DateTimeExt/Unosquare.DateTimeExt.csproj b/src/Unosquare.DateTimeExt/Unosquare.DateTimeExt.csproj index 93ad1cb..1787a5f 100644 --- a/src/Unosquare.DateTimeExt/Unosquare.DateTimeExt.csproj +++ b/src/Unosquare.DateTimeExt/Unosquare.DateTimeExt.csproj @@ -6,7 +6,7 @@ enable latest ..\..\StyleCop.Analyzers.ruleset - 1.5.4 + 2.0.0