Skip to content

Commit eb4b074

Browse files
authored
refactor(cron): make delimiter runes constant variables (#123)
1 parent 60094f6 commit eb4b074

File tree

2 files changed

+24
-28
lines changed

2 files changed

+24
-28
lines changed

quartz/cron.go

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,17 @@ func NewCronTriggerWithLoc(expression string, location *time.Location) (*CronTri
4747
if location == nil {
4848
return nil, illegalArgumentError("location is nil")
4949
}
50-
5150
expression = trimCronExpression(expression)
5251
fields, err := parseCronExpression(expression)
5352
if err != nil {
5453
return nil, err
5554
}
56-
5755
lastDefined := -1
5856
for i, field := range fields {
5957
if len(field.values) > 0 {
6058
lastDefined = i
6159
}
6260
}
63-
6461
// full wildcard expression
6562
if lastDefined == -1 {
6663
fields[0].values, _ = fillRangeValues(0, 59)
@@ -165,37 +162,38 @@ func trimCronExpression(expression string) string {
165162
func buildCronField(tokens []string) ([]*cronField, error) {
166163
var err error
167164
fields := make([]*cronField, 7)
165+
// second field
168166
fields[0], err = parseField(tokens[0], 0, 59)
169167
if err != nil {
170168
return nil, err
171169
}
172-
170+
// minute field
173171
fields[1], err = parseField(tokens[1], 0, 59)
174172
if err != nil {
175173
return nil, err
176174
}
177-
175+
// hour field
178176
fields[2], err = parseField(tokens[2], 0, 23)
179177
if err != nil {
180178
return nil, err
181179
}
182-
180+
// day-of-month field
183181
fields[3], err = parseField(tokens[3], 1, 31)
184182
if err != nil {
185183
return nil, err
186184
}
187-
185+
// month field
188186
fields[4], err = parseField(tokens[4], 1, 12, months)
189187
if err != nil {
190188
return nil, err
191189
}
192-
190+
// day-of-week field
193191
fields[5], err = parseField(tokens[5], 1, 7, days)
194192
if err != nil {
195193
return nil, err
196194
}
197195
fields[5].add(-1)
198-
196+
// year field
199197
fields[6], err = parseField(tokens[6], 1970, 1970*2)
200198
if err != nil {
201199
return nil, err
@@ -209,12 +207,10 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
209207
if len(translate) > 0 {
210208
glossary = translate[0]
211209
}
212-
213210
// any value
214211
if field == "*" || field == "?" {
215212
return &cronField{[]int{}}, nil
216213
}
217-
218214
// simple value
219215
i, err := strconv.Atoi(field)
220216
if err == nil {
@@ -223,22 +219,18 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
223219
}
224220
return nil, invalidCronFieldError("simple", field)
225221
}
226-
227222
// list values
228-
if strings.Contains(field, ",") {
223+
if strings.ContainsRune(field, listRune) {
229224
return parseListField(field, min, max, glossary)
230225
}
231-
232226
// step values
233-
if strings.Contains(field, "/") {
227+
if strings.ContainsRune(field, stepRune) {
234228
return parseStepField(field, min, max, glossary)
235229
}
236-
237230
// range values
238-
if strings.Contains(field, "-") {
231+
if strings.ContainsRune(field, rangeRune) {
239232
return parseRangeField(field, min, max, glossary)
240233
}
241-
242234
// simple literal value
243235
if glossary != nil {
244236
intVal, err := translateLiteral(glossary, field)
@@ -251,11 +243,11 @@ func parseField(field string, min, max int, translate ...[]string) (*cronField,
251243
return nil, invalidCronFieldError("literal", field)
252244
}
253245

254-
return nil, cronParseError("parse error")
246+
return nil, cronParseError(fmt.Sprintf("invalid field %s", field))
255247
}
256248

257249
func parseListField(field string, min, max int, glossary []string) (*cronField, error) {
258-
t := strings.Split(field, ",")
250+
t := strings.Split(field, string(listRune))
259251
values, stepValues := extractStepValues(t)
260252
values, rangeValues := extractRangeValues(values)
261253
listValues, err := translateLiterals(glossary, values)
@@ -282,7 +274,7 @@ func parseListField(field string, min, max int, glossary []string) (*cronField,
282274
}
283275

284276
func parseRangeField(field string, min, max int, glossary []string) (*cronField, error) {
285-
t := strings.Split(field, "-")
277+
t := strings.Split(field, string(rangeRune))
286278
if len(t) != 2 {
287279
return nil, invalidCronFieldError("range", field)
288280
}
@@ -306,7 +298,7 @@ func parseRangeField(field string, min, max int, glossary []string) (*cronField,
306298
}
307299

308300
func parseStepField(field string, min, max int, glossary []string) (*cronField, error) {
309-
t := strings.Split(field, "/")
301+
t := strings.Split(field, string(stepRune))
310302
if len(t) != 2 {
311303
return nil, invalidCronFieldError("step", field)
312304
}
@@ -318,8 +310,8 @@ func parseStepField(field string, min, max int, glossary []string) (*cronField,
318310
switch {
319311
case t[0] == "*":
320312
from = min
321-
case strings.Contains(t[0], "-"):
322-
trange := strings.Split(t[0], "-")
313+
case strings.ContainsRune(t[0], rangeRune):
314+
trange := strings.Split(t[0], string(rangeRune))
323315
if len(trange) != 2 {
324316
return nil, invalidCronFieldError("step", field)
325317
}

quartz/util.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ import (
77
"time"
88
)
99

10+
const (
11+
listRune = ','
12+
stepRune = '/'
13+
rangeRune = '-'
14+
)
15+
1016
// Sep is the serialization delimiter; the default is a double colon.
1117
var Sep = "::"
1218

@@ -26,7 +32,7 @@ func extractRangeValues(parsed []string) ([]string, []string) {
2632
values := make([]string, 0, len(parsed))
2733
rangeValues := make([]string, 0)
2834
for _, v := range parsed {
29-
if strings.Contains(v, "-") { // range value
35+
if strings.ContainsRune(v, rangeRune) { // range value
3036
rangeValues = append(rangeValues, v)
3137
} else {
3238
values = append(values, v)
@@ -39,7 +45,7 @@ func extractStepValues(parsed []string) ([]string, []string) {
3945
values := make([]string, 0, len(parsed))
4046
stepValues := make([]string, 0)
4147
for _, v := range parsed {
42-
if strings.Contains(v, "/") { // step value
48+
if strings.ContainsRune(v, stepRune) { // step value
4349
stepValues = append(stepValues, v)
4450
} else {
4551
values = append(values, v)
@@ -54,7 +60,6 @@ func fillRangeValues(from, to int) ([]int, error) {
5460
}
5561
length := (to - from) + 1
5662
rangeValues := make([]int, length)
57-
5863
for i, j := from, 0; i <= to; i, j = i+1, j+1 {
5964
rangeValues[j] = i
6065
}
@@ -67,7 +72,6 @@ func fillStepValues(from, step, max int) ([]int, error) {
6772
}
6873
length := ((max - from) / step) + 1
6974
stepValues := make([]int, length)
70-
7175
for i, j := from, 0; i <= max; i, j = i+step, j+1 {
7276
stepValues[j] = i
7377
}

0 commit comments

Comments
 (0)