diff --git a/src/HydratorManager.php b/src/HydratorManager.php index b343827..c7438ca 100644 --- a/src/HydratorManager.php +++ b/src/HydratorManager.php @@ -71,7 +71,11 @@ public function extract(mixed $class, ?string $overrideHydrator = null): Collect } if (! $overrideHydrator && ! isset($this->classHydrators[get_class($class)])) { - throw new Exception\NoHydrator(get_class($class)); + if (! isset($this->classHydrators['*']) || ! $this->classHydrators['*']) { + throw new Exception\NoHydrator(get_class($class)); + } + + $overrideHydrator = $this->classHydrators['*']; } // Use DI for hydrators diff --git a/test/HydratorManagerTest.php b/test/HydratorManagerTest.php index 37b09c0..ee825ee 100644 --- a/test/HydratorManagerTest.php +++ b/test/HydratorManagerTest.php @@ -7,6 +7,7 @@ use ApiSkeletons\Laravel\HAL\Exception\NoHydrator; use ApiSkeletons\Laravel\HAL\Resource; use ApiSkeletonsTest\Laravel\HAL\Hydrator\DiHydrator; +use ApiSkeletonsTest\Laravel\HAL\Hydrator\WildcardHydrator; use ApiSkeletonsTest\Laravel\HAL\Model\User; use Illuminate\Foundation\Application; use Illuminate\Pagination\LengthAwarePaginator; @@ -78,6 +79,21 @@ public function testNoHydratorInExtract(): void $hydratorManager->extract($invalid); } + public function testWildcardHydrator(): void + { + $hydratorManager = new WildcardHydratorManager(); + $user = new User(); + $user->id = 1; + $user->name = 'Test'; + $user->email = 'testing@test.net'; + + $resource = $hydratorManager->extract($user); + $this->assertInstanceOf(Resource::class, $resource); + + $array = $resource->toArray(); + $this->assertEquals(User::class, $array['class']); + } + public function testExtractCollection(): void { $hydratorManager = new HydratorManager(); diff --git a/test/src/Hydrator/WildcardHydrator.php b/test/src/Hydrator/WildcardHydrator.php new file mode 100644 index 0000000..7eadad6 --- /dev/null +++ b/test/src/Hydrator/WildcardHydrator.php @@ -0,0 +1,31 @@ +app = $app; + } + + /** {@inheritdoc} */ + public function extract($class): Resource + { + $data = [ + 'class' => get_class($class), + ]; + + return $this->hydratorManager->resource($data); + } +} diff --git a/test/src/WildcardHydratorManager.php b/test/src/WildcardHydratorManager.php new file mode 100644 index 0000000..74d1b2e --- /dev/null +++ b/test/src/WildcardHydratorManager.php @@ -0,0 +1,15 @@ + Hydrator\WildcardHydrator::class, + ]; +}