From 1f1635ef7b20643387403fc644ac9b8ced8ecb9b Mon Sep 17 00:00:00 2001 From: Paramtamtam <7326800+tarampampam@users.noreply.github.com> Date: Fri, 12 Nov 2021 12:42:48 +0500 Subject: [PATCH] Integration with Livewire added --- CHANGELOG.md | 6 ++- composer.json | 3 +- src/Defaults.php | 1 + src/Listeners/ResetLivewireListener.php | 39 +++++++++++++++ .../Listeners/ResetLivewireListenerTest.php | 50 +++++++++++++++++++ 5 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/Listeners/ResetLivewireListener.php create mode 100644 tests/Unit/Listeners/ResetLivewireListenerTest.php diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a21e87..7260c56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,9 +8,11 @@ The format is based on [Keep a Changelog][keepachangelog] and this project adher ### Added -- Listener `FlushTranslatorCacheListener` for memory leak fixing on `Translator` implementation [#69] +- Listener `FlushTranslatorCacheListener` for memory leak fixing on `Translator` implementation [#70] +- Integration with [Livewire](https://github.com/livewire/livewire) is supported now [#71] -[#69]:https://github.com/spiral/roadrunner-laravel/pull/69 +[#70]:https://github.com/spiral/roadrunner-laravel/pull/70 +[#71]:https://github.com/spiral/roadrunner-laravel/pull/71 ## v5.4.0 diff --git a/composer.json b/composer.json index 5b9afd7..5c22849 100644 --- a/composer.json +++ b/composer.json @@ -50,7 +50,8 @@ "laravel/telescope": "^4.5", "mockery/mockery": "^1.3.2", "phpstan/phpstan": "~0.12.80", - "phpunit/phpunit": "^8.0 || ^9.3" + "phpunit/phpunit": "^8.0 || ^9.3", + "livewire/livewire": "^2.7" }, "autoload": { "psr-4": { diff --git a/src/Defaults.php b/src/Defaults.php index 8f85951..4e367a8 100644 --- a/src/Defaults.php +++ b/src/Defaults.php @@ -55,6 +55,7 @@ public static function beforeLoopIteration(): array Listeners\ResetLaravelSocialiteListener::class, // for Listeners\ResetInertiaListener::class, // for Listeners\ResetZiggyListener::class, // for + Listeners\ResetLivewireListener::class, // for ]; } diff --git a/src/Listeners/ResetLivewireListener.php b/src/Listeners/ResetLivewireListener.php new file mode 100644 index 0000000..63f74a4 --- /dev/null +++ b/src/Listeners/ResetLivewireListener.php @@ -0,0 +1,39 @@ +. + */ +class ResetLivewireListener implements ListenerInterface +{ + /** + * {@inheritdoc} + */ + public function handle($event): void + { + if (!\class_exists(LivewireManager::class)) { + return; + } + + if ($event instanceof WithApplication) { + $app = $event->application(); + + if (!$app->resolved($manager_abstract = LivewireManager::class)) { + return; + } + + /** @var LivewireManager $manager */ + $manager = $app->make($manager_abstract); + + if (\method_exists($manager, 'flushState')) { + $manager->flushState(); + } + } + } +} diff --git a/tests/Unit/Listeners/ResetLivewireListenerTest.php b/tests/Unit/Listeners/ResetLivewireListenerTest.php new file mode 100644 index 0000000..5e5213b --- /dev/null +++ b/tests/Unit/Listeners/ResetLivewireListenerTest.php @@ -0,0 +1,50 @@ +app->make($manager_abstract = LivewireManager::class); + + $manager_mock = m::mock($manager) + ->makePartial() + ->expects('flushState') + ->withNoArgs() + ->getMock(); + + $this->app->instance($manager_abstract, $manager_mock); + + /** @var m\MockInterface|WithApplication $event_mock */ + $event_mock = m::mock(WithApplication::class) + ->makePartial() + ->expects('application') + ->andReturn($this->app) + ->getMock(); + + $this->listenerFactory()->handle($event_mock); + } + + /** + * @return ResetLivewireListener + */ + protected function listenerFactory(): ResetLivewireListener + { + return new ResetLivewireListener(); + } +}