From e449cab8de7ae79f3303441720ca7a68687cb030 Mon Sep 17 00:00:00 2001 From: Luke Kuzmish Date: Sat, 13 Jul 2024 20:52:38 -0400 Subject: [PATCH] bind record as a singleton --- src/StatsDAdapterServiceProvider.php | 10 +++++++++- tests/AdapterManagerTest.php | 16 ++++++++++++++++ tests/StatsDAdapterServiceProviderTest.php | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/StatsDAdapterServiceProvider.php b/src/StatsDAdapterServiceProvider.php index 738eac9..ff73feb 100644 --- a/src/StatsDAdapterServiceProvider.php +++ b/src/StatsDAdapterServiceProvider.php @@ -2,6 +2,7 @@ namespace Cosmastech\LaravelStatsDAdapter; +use Cosmastech\LaravelStatsDAdapter\Adapters\EventDispatchingStatsRecord; use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter; use Illuminate\Contracts\Foundation\Application; use Illuminate\Contracts\Support\DeferrableProvider; @@ -25,6 +26,13 @@ public function register(): void StatsDClientAdapter::class, fn (Application $app) => $app->make(AdapterManager::class)->instance() ); + + $this->app->singleton( + EventDispatchingStatsRecord::class, + function (Application $app): EventDispatchingStatsRecord { + return new EventDispatchingStatsRecord($app->make('events')); + } + ); } /** @@ -32,7 +40,7 @@ public function register(): void */ public function provides(): array { - return [AdapterManager::class, StatsDClientAdapter::class]; + return [AdapterManager::class, StatsDClientAdapter::class, EventDispatchingStatsRecord::class]; } protected function offerPublishing(): void diff --git a/tests/AdapterManagerTest.php b/tests/AdapterManagerTest.php index 1ba6a09..9043c27 100644 --- a/tests/AdapterManagerTest.php +++ b/tests/AdapterManagerTest.php @@ -2,6 +2,7 @@ namespace Cosmastech\LaravelStatsDAdapter\Tests; +use Cosmastech\LaravelStatsDAdapter\Adapters\EventDispatchingAdapter; use Cosmastech\StatsDClientAdapter\Adapters\Datadog\DatadogStatsDClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\InMemory\InMemoryClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\League\LeagueStatsDClientAdapter; @@ -144,4 +145,19 @@ public function setDefaultTags_passesToNewInstance(): void // Then self::assertEquals(["abc" => "123"], $adapterManager->instance("memory")->getDefaultTags()); } + + #[Test] + public function instance_event_returnsConfiguredEventDispatchingAdapter(): void + { + // Given + $adapterManager = $this->createAdapterManager(); + + // And events is configured + + // When + $eventDispatchingAdapter = $adapterManager->instance('event'); + + // Then + self::assertInstanceOf(EventDispatchingAdapter::class, $eventDispatchingAdapter); + } } diff --git a/tests/StatsDAdapterServiceProviderTest.php b/tests/StatsDAdapterServiceProviderTest.php index 2186a49..518c214 100644 --- a/tests/StatsDAdapterServiceProviderTest.php +++ b/tests/StatsDAdapterServiceProviderTest.php @@ -2,6 +2,7 @@ namespace Cosmastech\LaravelStatsDAdapter\Tests; +use Cosmastech\LaravelStatsDAdapter\Adapters\EventDispatchingStatsRecord; use Cosmastech\StatsDClientAdapter\Adapters\Datadog\DatadogStatsDClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\InMemory\InMemoryClientAdapter; use Cosmastech\StatsDClientAdapter\Adapters\StatsDClientAdapter; @@ -59,4 +60,17 @@ public function passesDefaultTagsToAdapterManager(): void // Then self::assertEqualsCanonicalizing($defaultTags, $clientAdapter->getDefaultTags()); } + + #[Test] + public function eventDispatchingStatsRecord_isSingleton(): void + { + // Given + $firstRecord = $this->app->make(EventDispatchingStatsRecord::class); + + // When + $secondRecord = $this->app->make(EventDispatchingStatsRecord::class); + + // Then + self::assertSame($firstRecord, $secondRecord); + } }