feat(rules): add the aggressive deadline option to nl and br

This commit is contained in:
dualfroz committed 2026-10-03 01:52:53 +02:00
1 parent b80ddbf523
commit c2384ff7ad
4 files changed
+66 -4

No files matched your search

+13 -2
View File
@@ -11,12 +11,23 @@ import (
"github.com/pkg/errors"
)
func Deadline(s rules.Strategy) rules.Rule {
// DeadlineOptions configures the Deadline rule.
type DeadlineOptions struct {
// Aggressive makes the "dentro de"/"em" prefix optional, so "3 dias" matches too.
Aggressive bool
}
func Deadline(s rules.Strategy, opts ...DeadlineOptions) rules.Rule {
overwrite := s == rules.Override
prefix := "(dentro\\sde|em)"
if len(opts) > 0 && opts[0].Aggressive {
prefix += "?"
}
return &rules.F{
RegExp: regexp.MustCompile(
"(?i)(?:\\W|^)(dentro\\sde|em)\\s*" +
"(?i)(?:\\W|^)" + prefix + "\\s*" +
"(?:(" + INTEGER_WORDS_PATTERN + "|[0-9]+|(?:\\s*pouc[oa](?:s|)?|algu(?:mas|m|ns)?|mei[oa]?))\\s*" +
"(segundos?|min(?:uto)?s?|horas?|dias?|semanas?|mês|meses|anos?)\\s*)" +
"(?:\\W|$)"),
+20
View File
@@ -32,3 +32,23 @@ func TestDeadline(t *testing.T) {
ApplyFixtures(t, "br.Deadline", w, fixt)
}
func TestDeadlineAggressive(t *testing.T) {
fixt := []Fixture{
{"3 dias", 0, "3 dias", 3 * 24 * time.Hour},
{"me lembre 4 dias depois", 10, "4 dias", 4 * 24 * time.Hour},
{"uma semana", 0, "uma semana", 7 * 24 * time.Hour},
{"dentro de meia hora", 0, "dentro de meia hora", time.Hour / 2},
{"me ligue em 5 minutos", 9, "em 5 minutos", 5 * time.Minute},
}
w := when.New(nil)
w.Add(br.Deadline(rules.Skip, br.DeadlineOptions{Aggressive: true}))
ApplyFixtures(t, "br.Deadline aggressive", w, fixt)
w = when.New(nil)
w.Add(br.Deadline(rules.Skip))
ApplyFixturesNil(t, "br.Deadline", w, []Fixture{{"3 dias", 0, "", 0}})
}