From 7af86b1186da00d3d37c708479dd58bb2655f699 Mon Sep 17 00:00:00 2001 From: Vasily Belosludcev Date: Wed, 22 Nov 2017 19:01:32 +0500 Subject: [PATCH] 1.0.1 --- .travis.yml | 1 + CHANGELOG.md | 7 ++++++ composer.json | 2 +- src/Manager/EntityManagerInterface.php | 7 +++++- src/Repository/TaskRepositoryInterface.php | 5 ++-- src/Service/QueueService.php | 14 ++++++++++- test/Assert/Manager/DummyEntityManager.php | 2 +- test/Functional/Service/QueueServiceTest.php | 26 ++++++++++++++++++++ 8 files changed, 58 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 72f9f5a..e7d5523 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,7 @@ language: php php: - '7.1' + - '7.2' before_script: - composer install --no-interaction diff --git a/CHANGELOG.md b/CHANGELOG.md index b2ea914..53dd1ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ zf-queue ======== +1.0.1 [2017-11-22] +------------------ + +- Fix: Skiped the param in the `Bupy7\Queue\Manager\EntityManagerInterface::flush()` method. +- Enh: Small enhancements. +- Add: `executed` event in the `Bupy7\Queue\Service\QueueService`. + 1.0.0 [2017-09-13] ------------------ diff --git a/composer.json b/composer.json index ab19644..d039aa1 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "bupy7/zf-queue", "description": "Queue module for Zend Framework 3.", - "version": "1.0.0", + "version": "1.0.1", "license": "BSD-3-Clause", "keywords": [ "zend", diff --git a/src/Manager/EntityManagerInterface.php b/src/Manager/EntityManagerInterface.php index ca853b1..86953c9 100644 --- a/src/Manager/EntityManagerInterface.php +++ b/src/Manager/EntityManagerInterface.php @@ -12,9 +12,14 @@ interface EntityManagerInterface * @return object|null */ public function newInstance(string $name); + /** * @param object $entity */ public function persist($entity): void; - public function flush(): void; + + /** + * @param object|null $entity + */ + public function flush($entity = null): void; } diff --git a/src/Repository/TaskRepositoryInterface.php b/src/Repository/TaskRepositoryInterface.php index afd3f31..e754c10 100644 --- a/src/Repository/TaskRepositoryInterface.php +++ b/src/Repository/TaskRepositoryInterface.php @@ -5,8 +5,9 @@ interface TaskRepositoryInterface { /** - * Returns entities has status Task::STATUS_RUN or Task::STATUS_ERROR for run. - * @return \Bupy7\Queue\Entity\Task[] + * Returns entities has status \Bupy7\Queue\Entity\TaskInterface::STATUS_RUN or + * \Bupy7\Queue\Entity\TaskInterface::STATUS_ERROR for run. + * @return \Bupy7\Queue\Entity\TaskInterface[] */ public function findForRun(int $limit = null): array; } diff --git a/src/Service/QueueService.php b/src/Service/QueueService.php index 5f8fb96..ce363a4 100644 --- a/src/Service/QueueService.php +++ b/src/Service/QueueService.php @@ -18,6 +18,10 @@ class QueueService implements EventManagerAwareInterface { public const EVENT_ERROR_EXECUTE = 'errorExecute'; + /** + * @since 1.0.1 + */ + public const EVENT_EXECUTED = 'executed'; public const EVENT_BEFORE_ADD = 'beforeAdd'; use EventManagerAwareTrait; @@ -101,13 +105,14 @@ protected function executeTask(TaskEntityInterface $entity): void $task = $this->queueManager->get($entity->getName()); try { - if ($task->execute($entity->getParams())) { + if ($task->execute(clone $entity->getParams())) { $entity->setStatusId(TaskEntityInterface::STATUS_OK); } else { $entity->setStatusId(TaskEntityInterface::STATUS_ERROR); } } catch (Exception $e) { $entity->setStatusId(TaskEntityInterface::STATUS_ERROR); + // event trigger $this->getEventManager()->trigger(self::EVENT_ERROR_EXECUTE, $this, [ 'exception' => $e, @@ -125,5 +130,12 @@ protected function executeTask(TaskEntityInterface $entity): void $entity->setStopAt(new DateTime); $this->entityManager->flush($entity); } + + if ($entity->getStatusId() === TaskEntityInterface::STATUS_OK) { + $this->getEventManager()->trigger(self::EVENT_EXECUTED, $this, [ + 'name' => $entity->getName(), + 'params' => clone $entity->getParams(), + ]); + } } } diff --git a/test/Assert/Manager/DummyEntityManager.php b/test/Assert/Manager/DummyEntityManager.php index b4894ff..1dd32b2 100644 --- a/test/Assert/Manager/DummyEntityManager.php +++ b/test/Assert/Manager/DummyEntityManager.php @@ -29,7 +29,7 @@ public function persist($entity): void $this->persist[] = $entity; } - public function flush(): void + public function flush($entity = null): void { foreach ($this->persist as $entity) { $this->saved[spl_object_hash($entity)] = $entity; diff --git a/test/Functional/Service/QueueServiceTest.php b/test/Functional/Service/QueueServiceTest.php index 1183ca7..7854583 100644 --- a/test/Functional/Service/QueueServiceTest.php +++ b/test/Functional/Service/QueueServiceTest.php @@ -10,6 +10,7 @@ use Zend\EventManager\EventInterface; use Exception; use Bupy7\Queue\Test\Assert\Entity\Task; +use Zend\Stdlib\ParametersInterface; /** * @author Belosludcev Vasily @@ -134,4 +135,29 @@ public function testErrorExecuteEvent() $this->assertInstanceOf(Exception::class, $eventException); } } + + /** + * @since 1.0.1 + */ + public function testExecutedEvent() + { + $sm = $this->getSm($this->memoryConfig); + + $sm->get('MemoryTaskRepository')->entities = [ + (new Task)->setId(1)->setName('Bupy7\Queue\Test\Assert\Task\SuccessHelloTask'), + ]; + + $name = null; + $params = null; + $sm->get('MemoryQueueService')->getEventManager() + ->attach(QueueService::EVENT_EXECUTED, function (EventInterface $event) use (&$name, &$params) { + $name = $event->getParam('name'); + $params = $event->getParam('params'); + }); + + $sm->get('MemoryQueueService')->run(); + + $this->assertInstanceOf(ParametersInterface::class, $params); + $this->assertEquals('Bupy7\Queue\Test\Assert\Task\SuccessHelloTask', $name); + } }