From 9fc7cf53dd0f84cfb4bc563b6cd4e75800ca223c Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Fri, 17 Mar 2023 09:49:33 +0100 Subject: [PATCH] [Scheduler] Fix some minor bugs --- .../Component/Scheduler/Generator/MessageGenerator.php | 3 +++ .../Scheduler/Generator/MessageGeneratorInterface.php | 3 +++ src/Symfony/Component/Scheduler/RecurringMessage.php | 9 +++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php b/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php index 3643631cd29ce..41cfa10c7ad85 100644 --- a/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php +++ b/src/Symfony/Component/Scheduler/Generator/MessageGenerator.php @@ -52,6 +52,9 @@ public function getMessages(): \Generator while (!$heap->isEmpty() && $heap->top()[0] <= $now) { /** @var TriggerInterface $trigger */ + /** @var int $index */ + /** @var \DateTimeImmutable $time */ + /** @var object $message */ [$time, $index, $trigger, $message] = $heap->extract(); $yield = true; diff --git a/src/Symfony/Component/Scheduler/Generator/MessageGeneratorInterface.php b/src/Symfony/Component/Scheduler/Generator/MessageGeneratorInterface.php index 0ee6483f974b1..8b2f7eeacc4ce 100644 --- a/src/Symfony/Component/Scheduler/Generator/MessageGeneratorInterface.php +++ b/src/Symfony/Component/Scheduler/Generator/MessageGeneratorInterface.php @@ -16,5 +16,8 @@ */ interface MessageGeneratorInterface { + /** + * @return iterable + */ public function getMessages(): iterable; } diff --git a/src/Symfony/Component/Scheduler/RecurringMessage.php b/src/Symfony/Component/Scheduler/RecurringMessage.php index 173c65aa4196a..e2499c0a6e497 100644 --- a/src/Symfony/Component/Scheduler/RecurringMessage.php +++ b/src/Symfony/Component/Scheduler/RecurringMessage.php @@ -11,6 +11,7 @@ namespace Symfony\Component\Scheduler; +use Symfony\Component\Scheduler\Exception\InvalidArgumentException; use Symfony\Component\Scheduler\Trigger\CronExpressionTrigger; use Symfony\Component\Scheduler\Trigger\PeriodicalTrigger; use Symfony\Component\Scheduler\Trigger\TriggerInterface; @@ -31,9 +32,13 @@ private function __construct( * * @see https://php.net/datetime.formats.relative */ - public static function every(string $frequency, object $message, \DateTimeImmutable $from = new \DateTimeImmutable(), ?\DateTimeImmutable $until = new \DateTimeImmutable('3000-01-01')): self + public static function every(string $frequency, object $message, \DateTimeImmutable $from = new \DateTimeImmutable(), \DateTimeImmutable $until = new \DateTimeImmutable('3000-01-01')): self { - return new self(PeriodicalTrigger::create(\DateInterval::createFromDateString($frequency), $from, $until), $message); + if (false === $interval = \DateInterval::createFromDateString($frequency)) { + throw new InvalidArgumentException(sprintf('Frequency "%s" cannot be parsed.', $frequency)); + } + + return new self(PeriodicalTrigger::create($interval, $from, $until), $message); } public static function cron(string $expression, object $message): self