mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-10-31 01:09:41 +00:00 
			
		
		
		
	Optimized NamespacePathMap
This commit is contained in:
		| @@ -3,6 +3,8 @@ | ||||
| namespace App\Domain\PathManagement; | ||||
|  | ||||
| /** | ||||
|  * Be carefull with the case sensivity. | ||||
|  * | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| final class NamespacePathMap implements NamespacePathMapInterface | ||||
| @@ -49,6 +51,7 @@ final class NamespacePathMap implements NamespacePathMapInterface | ||||
|      */ | ||||
|     public function setPath(string $path): void | ||||
|     { | ||||
|         $this->setFolders(explode('/', $path)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
| @@ -58,18 +61,32 @@ final class NamespacePathMap implements NamespacePathMapInterface | ||||
|      */ | ||||
|     public function setNamespace(string $namespace): void | ||||
|     { | ||||
|         $this->setFolders(explode('\\', $namespace)); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * The strtolower function could lead to conflicts in other contextes | ||||
|      * {@inheritdoc} | ||||
|      * | ||||
|      * @see \App\Domain\PathManagement\NamespacePathMapInterface::setFolderArray() | ||||
|      */ | ||||
|     public function setFolders(array $folders): void | ||||
|     { | ||||
|         $this->folders = []; | ||||
|         foreach ($folders as $folder) { | ||||
|             $this->folders[] = strtolower($folder); | ||||
|         } | ||||
|         $this->namespace = implode('\\', $this->folders); | ||||
|         $this->path = implode('/', $this->folders); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * {@inheritdoc} | ||||
|      * | ||||
|      * @see \App\Domain\PathManagement\NamespacePathMapInterface::setFolderArray() | ||||
|      * @see \App\Domain\PathManagement\NamespacePathMapInterface::getFolders() | ||||
|      */ | ||||
|     public function setFolderArray(array $folders): void | ||||
|     { | ||||
|     } | ||||
|  | ||||
|     public function getFolderArray(): array | ||||
|     public function getFolders(): array | ||||
|     { | ||||
|         return $this->folders; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -32,10 +32,10 @@ interface NamespacePathMapInterface | ||||
|     /** | ||||
|      * @param array|string[] $folders | ||||
|      */ | ||||
|     public function setFolderArray(array $folders): void; | ||||
|     public function setFolders(array $folders): void; | ||||
|  | ||||
|     /** | ||||
|      * @return array|string[] | ||||
|      */ | ||||
|     public function getFolderArray(): array; | ||||
|     public function getFolders(): array; | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,66 @@ | ||||
| <?php | ||||
|  | ||||
| namespace tests\Unit\Domain\PathManagement; | ||||
|  | ||||
| use PHPUnit\Framework\TestCase; | ||||
| use App\Domain\PathManagement\NamespacePathMapInterface; | ||||
| use App\Domain\PathManagement\NamespacePathMap; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| class NamespacePathMapTest extends TestCase | ||||
| { | ||||
|     const NAMESPACE = 'ABC\\DEF\GHD'; | ||||
|  | ||||
|     const PATH = 'abc/def/ghd'; | ||||
|  | ||||
|     const FOLDERS = [ | ||||
|         'ABC', | ||||
|         'DEF', | ||||
|         'GHD', | ||||
|     ]; | ||||
|  | ||||
|     /** | ||||
|      * @var NamespacePathMapInterface | ||||
|      */ | ||||
|     private $namespacePathMap; | ||||
|  | ||||
|     public function setUp(): void | ||||
|     { | ||||
|         $this->namespacePathMap = new NamespacePathMap(); | ||||
|     } | ||||
|  | ||||
|     private function validateArray(): void | ||||
|     { | ||||
|         $folders = $this->namespacePathMap->getFolders(); | ||||
|         foreach (self::FOLDERS as $key => $folder) { | ||||
|             $this->assertEquals(strtolower($folder), $folders[$key]); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private function validateGet(): void | ||||
|     { | ||||
|         $this->assertEquals(strtolower(self::NAMESPACE), $this->namespacePathMap->getNamespace()); | ||||
|         $this->assertEquals(self::PATH, $this->namespacePathMap->getPath()); | ||||
|         $this->validateArray(); | ||||
|     } | ||||
|  | ||||
|     public function testSetNamespace(): void | ||||
|     { | ||||
|         $this->namespacePathMap->setNamespace(self::NAMESPACE); | ||||
|         $this->validateGet(); | ||||
|     } | ||||
|  | ||||
|     public function testSetPath(): void | ||||
|     { | ||||
|         $this->namespacePathMap->setPath(self::PATH); | ||||
|         $this->validateGet(); | ||||
|     } | ||||
|  | ||||
|     public function testSetFolders(): void | ||||
|     { | ||||
|         $this->namespacePathMap->setFolders(self::FOLDERS); | ||||
|         $this->validateGet(); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user