Skip to content

Commit 7441b2c

Browse files
committed
some refactoring
1 parent 8242e8c commit 7441b2c

File tree

10 files changed

+66
-60
lines changed

10 files changed

+66
-60
lines changed
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
namespace DateRecurrenceR.Core;
2+
3+
/// <summary>
4+
/// Represents an index of a week of the day in a month.
5+
/// </summary>
6+
public enum IndexOfDay
7+
{
8+
/// <summary>First entry in the month.</summary>
9+
First = 0,
10+
/// <summary>Second entry in the month.</summary>
11+
Second = 1,
12+
/// <summary>Third entry in the month.</summary>
13+
Third = 2,
14+
/// <summary>Fourth entry in the month.</summary>
15+
Fourth = 3,
16+
/// <summary>Last entry in the month.</summary>
17+
Last = 4
18+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace DateRecurrenceR;
1+
namespace DateRecurrenceR.Core;
22

33
/// <summary>
44
/// Represents weekdays for one week.
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#if NET8_0_OR_GREATER
2-
namespace DateRecurrenceR;
2+
namespace DateRecurrenceR.Core;
33

44
/// <summary>
55
/// Represents array of week days. The first day of week is Sunday.

src/DateRecurrenceR/Helpers/DateHelper.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Diagnostics;
22
using System.Diagnostics.Contracts;
3+
using DateRecurrenceR.Core;
34
using DateRecurrenceR.Internals;
45

56
namespace DateRecurrenceR.Helpers;
@@ -27,20 +28,20 @@ public static bool TryGetDateOfDayOfWeek(DateOnly dateInSameWeek,
2728
}
2829

2930
[Pure]
30-
public static DateOnly GetDateByDayOfMonth(int year, int month, DayOfWeek dayOfWeek, NumberOfWeek numberOfWeek)
31+
public static DateOnly GetDateByDayOfMonth(int year, int month, DayOfWeek dayOfWeek, IndexOfDay indexOfDay)
3132
{
3233
var date = new DateOnly(year, month, 1);
3334
var diffToFirstDay = (dayOfWeek - date.DayOfWeek + DaysInWeek) % DaysInWeek;
3435

35-
var weekMultiplicand = numberOfWeek switch
36+
var weekMultiplicand = indexOfDay switch
3637
{
37-
NumberOfWeek.First => 0,
38-
NumberOfWeek.Second => 1,
39-
NumberOfWeek.Third => 2,
40-
NumberOfWeek.Fourth => 3,
41-
NumberOfWeek.Last => 4 -
38+
IndexOfDay.First => 0,
39+
IndexOfDay.Second => 1,
40+
IndexOfDay.Third => 2,
41+
IndexOfDay.Fourth => 3,
42+
IndexOfDay.Last => 4 -
4243
(DateTime.DaysInMonth(date.Year, date.Month) % DaysInWeek <= diffToFirstDay ? 1 : 0),
43-
_ => throw new ArgumentOutOfRangeException(nameof(numberOfWeek), numberOfWeek, null)
44+
_ => throw new ArgumentOutOfRangeException(nameof(indexOfDay), indexOfDay, null)
4445
};
4546

4647
var dayDiff = diffToFirstDay + DaysInWeek * weekMultiplicand;

src/DateRecurrenceR/Helpers/WeeklyRecurrenceHelper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using DateRecurrenceR.Core;
12
using DateRecurrenceR.Internals;
23

34
namespace DateRecurrenceR.Helpers;

src/DateRecurrenceR/NumberOfWeek.cs

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/DateRecurrenceR/Recurrence.Monthly.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -72,15 +72,15 @@ DateOnly GetNextDate(int year, int month)
7272
/// <param name="beginDate">The date when the recurrence begins.</param>
7373
/// <param name="count">The maximum number of contiguous dates.</param>
7474
/// <param name="dayOfWeek">The day of the week.</param>
75-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
75+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
7676
/// <param name="interval">The interval between occurrences.</param>
7777
/// <returns>
7878
/// <see cref="IEnumerator{T}" /> type of <see cref="DateOnly" />
7979
/// </returns>
8080
public static IEnumerator<DateOnly> Monthly(DateOnly beginDate, int count, DayOfWeek dayOfWeek,
81-
NumberOfWeek numberOfWeek, Interval interval)
81+
IndexOfDay indexOfDay, Interval interval)
8282
{
83-
return Monthly(beginDate, beginDate, count, dayOfWeek, numberOfWeek, interval);
83+
return Monthly(beginDate, beginDate, count, dayOfWeek, indexOfDay, interval);
8484
}
8585

8686
/// <summary>
@@ -91,7 +91,7 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate, int count, DayOf
9191
/// <param name="fromDate">The date when a specific range starts.</param>
9292
/// <param name="count">The maximum number of contiguous dates.</param>
9393
/// <param name="dayOfWeek">The day of the week.</param>
94-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
94+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
9595
/// <param name="interval">The interval between occurrences.</param>
9696
/// <returns>
9797
/// <see cref="IEnumerator{T}" /> type of <see cref="DateOnly" />
@@ -100,10 +100,10 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
100100
DateOnly fromDate,
101101
int count,
102102
DayOfWeek dayOfWeek,
103-
NumberOfWeek numberOfWeek,
103+
IndexOfDay indexOfDay,
104104
Interval interval)
105105
{
106-
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, beginDate.Month, dayOfWeek, numberOfWeek);
106+
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, beginDate.Month, dayOfWeek, indexOfDay);
107107
var canStart = MonthlyRecurrenceHelper.TryGetStartDate(
108108
beginDate,
109109
fromDate,
@@ -117,7 +117,7 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
117117

118118
DateOnly GetNextDate(int year, int month)
119119
{
120-
return DateHelper.GetDateByDayOfMonth(year, month, dayOfWeek, numberOfWeek);
120+
return DateHelper.GetDateByDayOfMonth(year, month, dayOfWeek, indexOfDay);
121121
}
122122
}
123123

@@ -195,18 +195,18 @@ DateOnly GetNextDate(int year, int month)
195195
/// <param name="beginDate">The date when the recurrence begins.</param>
196196
/// <param name="endDate">The date when the recurrence ends.</param>
197197
/// <param name="dayOfWeek">The day of the week.</param>
198-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
198+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
199199
/// <param name="interval">The interval between occurrences.</param>
200200
/// <returns>
201201
/// <see cref="IEnumerator{T}" /> type of <see cref="DateOnly" />
202202
/// </returns>
203203
public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
204204
DateOnly endDate,
205205
DayOfWeek dayOfWeek,
206-
NumberOfWeek numberOfWeek,
206+
IndexOfDay indexOfDay,
207207
Interval interval)
208208
{
209-
return Monthly(beginDate, endDate, beginDate, endDate, dayOfWeek, numberOfWeek, interval);
209+
return Monthly(beginDate, endDate, beginDate, endDate, dayOfWeek, indexOfDay, interval);
210210
}
211211

212212
/// <summary>
@@ -219,7 +219,7 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
219219
/// <param name="fromDate">The date when a specific range starts.</param>
220220
/// <param name="toDate">The date when a specific range finishes.</param>
221221
/// <param name="dayOfWeek">The day of the week.</param>
222-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
222+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
223223
/// <param name="interval">The interval between occurrences.</param>
224224
/// <returns>
225225
/// <see cref="IEnumerator{T}" /> type of <see cref="DateOnly" />
@@ -229,10 +229,10 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
229229
DateOnly fromDate,
230230
DateOnly toDate,
231231
DayOfWeek dayOfWeek,
232-
NumberOfWeek numberOfWeek,
232+
IndexOfDay indexOfDay,
233233
Interval interval)
234234
{
235-
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, beginDate.Month, dayOfWeek, numberOfWeek);
235+
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, beginDate.Month, dayOfWeek, indexOfDay);
236236
var canStart = MonthlyRecurrenceHelper.TryGetStartDate(
237237
beginDate,
238238
fromDate,
@@ -252,7 +252,7 @@ public static IEnumerator<DateOnly> Monthly(DateOnly beginDate,
252252

253253
DateOnly GetNextDate(int year, int month)
254254
{
255-
return DateHelper.GetDateByDayOfMonth(year, month, dayOfWeek, numberOfWeek);
255+
return DateHelper.GetDateByDayOfMonth(year, month, dayOfWeek, indexOfDay);
256256
}
257257
}
258258
}

src/DateRecurrenceR/Recurrence.Yearly.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ DateOnly GetNextDate(int year)
8282
/// <param name="beginDate">The date when the recurrence begins.</param>
8383
/// <param name="count">The maximum number of contiguous dates.</param>
8484
/// <param name="dayOfWeek">The day of the week.</param>
85-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
85+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
8686
/// <param name="numberOfMonth">The number of the month.</param>
8787
/// <param name="interval">The interval between occurrences.</param>
8888
/// <returns>
@@ -91,11 +91,11 @@ DateOnly GetNextDate(int year)
9191
public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
9292
int count,
9393
DayOfWeek dayOfWeek,
94-
NumberOfWeek numberOfWeek,
94+
IndexOfDay indexOfDay,
9595
MonthOfYear numberOfMonth,
9696
Interval interval)
9797
{
98-
return Yearly(beginDate, beginDate, count, dayOfWeek, numberOfWeek, numberOfMonth, interval);
98+
return Yearly(beginDate, beginDate, count, dayOfWeek, indexOfDay, numberOfMonth, interval);
9999
}
100100

101101
/// <summary>
@@ -106,7 +106,7 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
106106
/// <param name="fromDate">The date when a specific range starts.</param>
107107
/// <param name="count">The maximum number of contiguous dates.</param>
108108
/// <param name="dayOfWeek">The day of the week.</param>
109-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
109+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
110110
/// <param name="numberOfMonth">The number of the month.</param>
111111
/// <param name="interval">The interval between occurrences.</param>
112112
/// <returns>
@@ -116,11 +116,11 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
116116
DateOnly fromDate,
117117
int count,
118118
DayOfWeek dayOfWeek,
119-
NumberOfWeek numberOfWeek,
119+
IndexOfDay indexOfDay,
120120
MonthOfYear numberOfMonth,
121121
Interval interval)
122122
{
123-
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, numberOfMonth, dayOfWeek, numberOfWeek);
123+
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, numberOfMonth, dayOfWeek, indexOfDay);
124124
var canStart = YearlyRecurrenceHelper.TryGetStartDate(
125125
beginDate,
126126
fromDate,
@@ -138,7 +138,7 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
138138

139139
DateOnly GetNextDate(int year)
140140
{
141-
return DateHelper.GetDateByDayOfMonth(year, numberOfMonth, dayOfWeek, numberOfWeek);
141+
return DateHelper.GetDateByDayOfMonth(year, numberOfMonth, dayOfWeek, indexOfDay);
142142
}
143143
}
144144

@@ -280,7 +280,7 @@ DateOnly GetNextDate(int year)
280280
/// <param name="beginDate">The date when the recurrence begins.</param>
281281
/// <param name="endDate">The date when the recurrence ends.</param>
282282
/// <param name="dayOfWeek">The day of the week.</param>
283-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
283+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
284284
/// <param name="numberOfMonth">The number of the month.</param>
285285
/// <param name="interval">The interval between occurrences.</param>
286286
/// <returns>
@@ -289,11 +289,11 @@ DateOnly GetNextDate(int year)
289289
public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
290290
DateOnly endDate,
291291
DayOfWeek dayOfWeek,
292-
NumberOfWeek numberOfWeek,
292+
IndexOfDay indexOfDay,
293293
MonthOfYear numberOfMonth,
294294
Interval interval)
295295
{
296-
return Yearly(beginDate, endDate, beginDate, endDate, dayOfWeek, numberOfWeek, numberOfMonth, interval);
296+
return Yearly(beginDate, endDate, beginDate, endDate, dayOfWeek, indexOfDay, numberOfMonth, interval);
297297
}
298298

299299
/// <summary>
@@ -306,7 +306,7 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
306306
/// <param name="fromDate">The date when a specific range starts.</param>
307307
/// <param name="toDate">The date when a specific range finishes.</param>
308308
/// <param name="dayOfWeek">The day of the week.</param>
309-
/// <param name="numberOfWeek">The number of the week. The first week of a month starts from the first day of the month.</param>
309+
/// <param name="indexOfDay">Index of <b>dayOfWeek</b> in the month.</param>
310310
/// <param name="numberOfMonth">The number of the month.</param>
311311
/// <param name="interval">The interval between occurrences.</param>
312312
/// <returns>
@@ -317,11 +317,11 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
317317
DateOnly fromDate,
318318
DateOnly toDate,
319319
DayOfWeek dayOfWeek,
320-
NumberOfWeek numberOfWeek,
320+
IndexOfDay indexOfDay,
321321
MonthOfYear numberOfMonth,
322322
Interval interval)
323323
{
324-
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, numberOfMonth, dayOfWeek, numberOfWeek);
324+
var date = DateHelper.GetDateByDayOfMonth(beginDate.Year, numberOfMonth, dayOfWeek, indexOfDay);
325325
var canStart = YearlyRecurrenceHelper.TryGetStartDate(
326326
beginDate,
327327
fromDate,
@@ -341,7 +341,7 @@ public static IEnumerator<DateOnly> Yearly(DateOnly beginDate,
341341

342342
DateOnly GetNextDate(int year)
343343
{
344-
return DateHelper.GetDateByDayOfMonth(year, numberOfMonth, dayOfWeek, numberOfWeek);
344+
return DateHelper.GetDateByDayOfMonth(year, numberOfMonth, dayOfWeek, indexOfDay);
345345
}
346346
}
347347

test/DateRecurrenceR.Tests.Unit/Helpers/DateHelperTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using DateRecurrenceR.Core;
12
using DateRecurrenceR.Helpers;
23
using FluentAssertions;
34

@@ -96,7 +97,7 @@ public void Method_GetDateByDayOfMonth_by_FirstWeek()
9697
const int year = 1;
9798
const int month = 1;
9899
const DayOfWeek dayOfWeek = DayOfWeek.Saturday;
99-
const NumberOfWeek numberOfWeek = NumberOfWeek.First;
100+
const IndexOfDay numberOfWeek = IndexOfDay.First;
100101
var expectedDate = new DateOnly(1, 1, 6);
101102

102103
// Act
@@ -113,7 +114,7 @@ public void Method_GetDateByDayOfMonth_by_SecondWeek()
113114
const int year = 1;
114115
const int month = 1;
115116
const DayOfWeek dayOfWeek = DayOfWeek.Monday;
116-
const NumberOfWeek numberOfWeek = NumberOfWeek.Second;
117+
const IndexOfDay numberOfWeek = IndexOfDay.Second;
117118
var expectedDate = new DateOnly(1, 1, 8);
118119

119120
// Act
@@ -130,7 +131,7 @@ public void Method_GetDateByDayOfMonth_by_ThirdWeek()
130131
const int year = 1;
131132
const int month = 1;
132133
const DayOfWeek dayOfWeek = DayOfWeek.Monday;
133-
const NumberOfWeek numberOfWeek = NumberOfWeek.Third;
134+
const IndexOfDay numberOfWeek = IndexOfDay.Third;
134135
var expectedDate = new DateOnly(1, 1, 15);
135136

136137
// Act
@@ -147,7 +148,7 @@ public void Method_GetDateByDayOfMonth_by_FourthWeek()
147148
const int year = 1;
148149
const int month = 1;
149150
const DayOfWeek dayOfWeek = DayOfWeek.Monday;
150-
const NumberOfWeek numberOfWeek = NumberOfWeek.Fourth;
151+
const IndexOfDay numberOfWeek = IndexOfDay.Fourth;
151152
var expectedDate = new DateOnly(1, 1, 22);
152153

153154
// Act
@@ -164,7 +165,7 @@ public void Method_GetDateByDayOfMonth_by_LastWeek()
164165
const int year = 1;
165166
const int month = 1;
166167
const DayOfWeek dayOfWeek = DayOfWeek.Monday;
167-
const NumberOfWeek numberOfWeek = NumberOfWeek.Last;
168+
const IndexOfDay numberOfWeek = IndexOfDay.Last;
168169
var expectedDate = new DateOnly(1, 1, 29);
169170

170171
// Act
@@ -181,7 +182,7 @@ public void Method_GetDateByDayOfMonth_throws_Exception_when_NumberOfWeek_is_out
181182
const int year = 1;
182183
const int month = 1;
183184
const DayOfWeek dayOfWeek = DayOfWeek.Monday;
184-
const NumberOfWeek numberOfWeek = (NumberOfWeek) 5;
185+
const IndexOfDay numberOfWeek = (IndexOfDay) 5;
185186

186187
// Act
187188
var action = () => DateHelper.GetDateByDayOfMonth(year, month, dayOfWeek, numberOfWeek);

test/DateRecurrenceR.Tests.Unit/Helpers/WeeklyRecurrenceHelperTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using DateRecurrenceR.Core;
12
using DateRecurrenceR.Helpers;
23
using FluentAssertions;
34

0 commit comments

Comments
 (0)