Skip to content

Commit afadf88

Browse files
author
pallav.jha
committed
fixes for the PR: remove anon func, refactor parseDowInNthWeekFormat
1 parent c7bb70c commit afadf88

2 files changed

Lines changed: 30 additions & 35 deletions

File tree

parser.go

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,11 @@ func (p Parser) Parse(spec string) (Schedule, error) {
139139
if err != nil {
140140
return nil, err
141141
}
142-
dayNum, weekNumInt, isLastWeek, ok := parseDowInNthWeekFormat(fields[5])
143-
dayOfWeek := func() uint64 {
144-
if ok {
145-
return 0
146-
}
147-
return field(fields[5], dow)
148-
}()
142+
dowExtra, ok := parseDowInNthWeekFormat(fields[5])
143+
var dayOfWeek uint64 = 0
144+
if !ok {
145+
dayOfWeek = field(fields[5], dow)
146+
}
149147
if err != nil {
150148
return nil, err
151149
}
@@ -158,49 +156,45 @@ func (p Parser) Parse(spec string) (Schedule, error) {
158156
Month: month,
159157
Dow: dayOfWeek,
160158
Location: loc,
161-
Extra: Extra{
162-
DayOfWeek: dayNum,
163-
WeekNumber: weekNumInt,
164-
LastWeek: isLastWeek,
165-
Valid: ok,
166-
},
159+
Extra: dowExtra,
167160
}, nil
168161
}
169162

170163
// parseDowInNthWeekFormat parse the dow spec of the cron spec
171-
// It returns dayOfTheWeek, occurrence or the week number in month, true if the week number is last week, ok
164+
// It returns the Extra struct that contains
165+
// dayOfTheWeek, occurrence or the week number in month and a boolean for Last Week
172166
// For example:
173-
// 6#3 => 6, 3, false, true
174-
// 6#L => 6, 0, true, true
175-
// XYZ => 0, 0, false, false
176-
// 8#9 => 0, 0, false, false
177-
func parseDowInNthWeekFormat(spec string) (uint8, uint8, bool, bool) {
167+
// 6#3 => Extra{6, 3, false, true}
168+
// 6#L => Extra{6, 0, true, true}
169+
// XYZ => Extra{}
170+
// 8#9 => Extra{}
171+
func parseDowInNthWeekFormat(spec string) (Extra, bool) {
178172
var dayOfWeek uint8 = 0
179173
var weekNumber uint8 = 0
180174
if len(spec) != 3 {
181-
return 0, 0, false, false
175+
return Extra{}, false
182176
}
183177
day := spec[0:1]
184178
if day >= "0" && day <= "6" {
185179
dayOfWeek = day[0] - '0'
186180
} else {
187-
return 0, 0, false, false
181+
return Extra{}, false
188182
}
189183

190184
shebang := spec[1:2]
191185
if shebang != "#" {
192-
return 0, 0, false, false
186+
return Extra{}, false
193187
}
194188

195189
week := spec[2:]
196190
if week >= "1" && week <= "4" {
197191
weekNumber = week[0] - '0'
198192
} else if week == "L" {
199-
return dayOfWeek, 0, true, true
193+
return Extra{dayOfWeek, 0, true, true}, true
200194
} else {
201-
return 0, 0, false, false
195+
return Extra{}, false
202196
}
203-
return dayOfWeek, weekNumber, false, true
197+
return Extra{dayOfWeek, weekNumber, false, true}, true
204198
}
205199

206200
// normalizeFields takes a subset set of the time fields and returns the full set

parser_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -381,9 +381,10 @@ func TestNormalizeFields_Errors(t *testing.T) {
381381
actual, err := normalizeFields(test.input, test.options)
382382
if err == nil {
383383
t.Errorf("expected an error, got none. results: %v", actual)
384-
}
385-
if !strings.Contains(err.Error(), test.err) {
386-
t.Errorf("expected error %q, got %q", test.err, err.Error())
384+
} else {
385+
if !strings.Contains(err.Error(), test.err) {
386+
t.Errorf("expected error %q, got %q", test.err, err.Error())
387+
}
387388
}
388389
})
389390
}
@@ -494,15 +495,15 @@ func TestParseDowInNthWeekFormat(t *testing.T) {
494495
}
495496

496497
for _, c := range entries {
497-
dayOfWeek, weekNumber, lastWeek, ok := parseDowInNthWeekFormat(c.spec)
498-
if dayOfWeek != c.dayOfWeek {
499-
t.Errorf("%s => expected %v, got %v", c.spec, c.dayOfWeek, dayOfWeek)
498+
dowExtra, ok := parseDowInNthWeekFormat(c.spec)
499+
if dowExtra.DayOfWeek != c.dayOfWeek {
500+
t.Errorf("%s => expected %v, got %v", c.spec, c.dayOfWeek, dowExtra.DayOfWeek)
500501
}
501-
if weekNumber != c.weekNumber {
502-
t.Errorf("%s => expected %v, got %v", c.spec, c.weekNumber, weekNumber)
502+
if dowExtra.WeekNumber != c.weekNumber {
503+
t.Errorf("%s => expected %v, got %v", c.spec, c.weekNumber, dowExtra.WeekNumber)
503504
}
504-
if lastWeek != c.lastWeek {
505-
t.Errorf("%s => expected %v, got %v", c.spec, c.lastWeek, lastWeek)
505+
if dowExtra.LastWeek != c.lastWeek {
506+
t.Errorf("%s => expected %v, got %v", c.spec, c.lastWeek, dowExtra.LastWeek)
506507
}
507508
if ok != c.ok {
508509
t.Errorf("%s => expected %v, got %v", c.spec, c.ok, ok)

0 commit comments

Comments
 (0)