From 167d087f5bf8bef9bb386fc014677811c99eb152 Mon Sep 17 00:00:00 2001 From: Moath Almallahi Date: Fri, 13 Feb 2026 13:58:27 +0100 Subject: [PATCH] adding relative time to MONTH_EQ, YEAR_EQ --- helper.go | 26 ++++++++++++++++++++++---- rulesengine_test.go | 14 ++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/helper.go b/helper.go index 3bb09c0..56d800c 100644 --- a/helper.go +++ b/helper.go @@ -287,11 +287,29 @@ func compareTimePart(actual any, expected any, op Operator) (bool, error) { if !ok { return false, newError(errType, actual) } - value, err := toFloat(expected) - if err != nil { - return false, err + + var target int + switch v := expected.(type) { + case string: + resolved, err := resolveExpectedTime(v, time.Now()) + if err != nil { + return false, err + } + switch op { + case YearEq: + target = resolved.Year() + case MonthEq: + target = int(resolved.Month()) + default: + return false, nil + } + default: + value, err := toFloat(expected) + if err != nil { + return false, err + } + target = int(value) } - target := int(value) switch op { case YearEq: diff --git a/rulesengine_test.go b/rulesengine_test.go index 9c435c2..bb8bb48 100644 --- a/rulesengine_test.go +++ b/rulesengine_test.go @@ -368,6 +368,20 @@ var ( inputData: map[string]any{"startDate": relativeTime}, expResult: RuleResult{Result: true}, }, + { + ruleNodes: Rule{ + Operator: YearEq, Field: "startDate", Value: "thisYear-1", + }, + inputData: map[string]any{"startDate": relativeTime.AddDate(-1, 0, 0)}, + expResult: RuleResult{Result: true}, + }, + { + ruleNodes: Rule{ + Operator: MonthEq, Field: "startDate", Value: "thisMonth", + }, + inputData: map[string]any{"startDate": time.Date(relativeNow.Year(), relativeNow.Month(), 1, 12, 0, 0, 0, relativeNow.Location())}, + expResult: RuleResult{Result: true}, + }, { ruleNodes: Rule{ Operator: WithinLast, Field: "startDate", Value: last10Sec,