Optimized NamespacePathMap

This commit is contained in:
Kevin Frantz 2019-01-06 14:38:28 +01:00
parent 72d0a6ba95
commit 77822b8e56
3 changed files with 91 additions and 8 deletions

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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();
}
}