Skip to content

Commit 0f2b883

Browse files
committed
Support strings containing "from now"
1 parent c3b538a commit 0f2b883

File tree

2 files changed

+29
-3
lines changed

2 files changed

+29
-3
lines changed

rules/en/deadline.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,27 @@ import (
1111
"github.com/pkg/errors"
1212
)
1313

14+
var (
15+
pointInTime = "(" + INTEGER_WORDS_PATTERN + "|[0-9]+|an?(?:\\s*few)?|half(?:\\s*an?)?)\\s*" +
16+
"(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)\\s*"
17+
)
18+
1419
func Deadline(s rules.Strategy) rules.Rule {
1520
overwrite := s == rules.Override
1621

1722
return &rules.F{
1823
RegExp: regexp.MustCompile(
19-
"(?i)(?:\\W|^)(within|in)\\s*" +
20-
"(" + INTEGER_WORDS_PATTERN + "|[0-9]+|an?(?:\\s*few)?|half(?:\\s*an?)?)\\s*" +
21-
"(seconds?|min(?:ute)?s?|hours?|days?|weeks?|months?|years?)\\s*" +
24+
"(?i)(?:\\W|^)" +
25+
"(within|in)\\s*" + pointInTime + "|" + pointInTime + "\\s+(from\\s+now)" +
2226
"(?:\\W|$)"),
2327
Applier: func(m *rules.Match, c *rules.Context, o *rules.Options, ref time.Time) (bool, error) {
2428

2529
numStr := strings.TrimSpace(m.Captures[1])
2630

31+
if numStr == "" {
32+
numStr = strings.TrimSpace(m.Captures[3])
33+
}
34+
2735
var num int
2836
var err error
2937

@@ -44,6 +52,10 @@ func Deadline(s rules.Strategy) rules.Rule {
4452

4553
exponent := strings.TrimSpace(m.Captures[2])
4654

55+
if exponent == "" {
56+
exponent = strings.TrimSpace(m.Captures[4])
57+
}
58+
4759
if !strings.Contains(numStr, "half") {
4860
switch {
4961
case strings.Contains(exponent, "second"):

rules/en/deadline_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,24 @@ func TestDeadline(t *testing.T) {
2424
{"within a few months", 0, "within a few months", 91 * 24 * time.Hour},
2525
{"within one year", 0, "within one year", 366 * 24 * time.Hour},
2626
{"in a week", 0, "in a week", 7 * 24 * time.Hour},
27+
{"7 days from now", 0, "7 days from now", 7 * 24 * time.Hour},
28+
{"a week from now", 0, "a week from now", 7 * 24 * time.Hour},
2729
}
2830

2931
w := when.New(nil)
3032
w.Add(en.Deadline(rules.Skip))
3133

3234
ApplyFixtures(t, "en.Deadline", w, fixt)
3335
}
36+
37+
func TestDeadlineNil(t *testing.T) {
38+
fixt := []Fixture{
39+
{"5 minutes", 0, "", 0},
40+
{"a month", 0, "", 0},
41+
}
42+
43+
w := when.New(nil)
44+
w.Add(en.Deadline(rules.Skip))
45+
46+
ApplyFixturesNil(t, "en.Deadline", w, fixt)
47+
}

0 commit comments

Comments
 (0)