From 7e11bcdceb4247c4c74db9f052eabc66e4d5de8f Mon Sep 17 00:00:00 2001 From: Jef Roosens Date: Thu, 26 May 2022 13:34:57 +0200 Subject: [PATCH] refactor: added CronExpression.next_n function --- src/console/schedule/schedule.v | 12 ++++-------- src/cron/expression/expression.v | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/console/schedule/schedule.v b/src/console/schedule/schedule.v index b086b53..8fceddd 100644 --- a/src/console/schedule/schedule.v +++ b/src/console/schedule/schedule.v @@ -2,11 +2,13 @@ module schedule import cli import cron.expression { parse_expression } +import time // cmd returns the cli submodule for previewing a cron schedule. pub fn cmd() cli.Command { return cli.Command{ name: 'schedule' + usage: 'schedule' description: 'Preview the behavior of a cron schedule.' flags: [ cli.Flag{ @@ -17,16 +19,10 @@ pub fn cmd() cli.Command { }, ] execute: fn (cmd cli.Command) ? { - exp := parse_expression(cmd.args.join(' '))? - - mut t := exp.next_from_now()? - println(t) - + ce := parse_expression(cmd.args.join(' '))? count := cmd.flags.get_int('count')? - for _ in 1 .. count { - t = exp.next(t)? - + for t in ce.next_n(time.now(), count)? { println(t) } } diff --git a/src/cron/expression/expression.v b/src/cron/expression/expression.v index 5eae332..4873ffd 100644 --- a/src/cron/expression/expression.v +++ b/src/cron/expression/expression.v @@ -121,6 +121,20 @@ pub fn (ce &CronExpression) next_from_now() ?time.Time { return ce.next(time.now()) } +// next_n returns the n next occurences of the expression, given a starting +// time. +pub fn (ce &CronExpression) next_n(ref time.Time, n int) ?[]time.Time { + mut times := []time.Time{cap: n} + + times << ce.next(ref) ? + + for i in 1..n { + times << ce.next(times[i - 1]) ? + } + + return times +} + // parse_range parses a given string into a range of sorted integers, if // possible. fn parse_range(s string, min int, max int, mut bitv []bool) ? {