diff --git a/autoload/functions_oxDIC.php b/autoload/functions_oxDIC.php index 13c5d86..3d3025b 100644 --- a/autoload/functions_oxDIC.php +++ b/autoload/functions_oxDIC.php @@ -17,7 +17,8 @@ use D3\DIContainerHandler\d3DicHandler; use Symfony\Component\DependencyInjection\Container; /** - * @return Container + * @return Container + * @throws Exception */ function d3GetOxidDIC(): Container { diff --git a/composer.json b/composer.json index f882e2f..fbee068 100644 --- a/composer.json +++ b/composer.json @@ -22,7 +22,11 @@ "MIT" ], "require": { - "symfony/dependency-injection": "^3.1|^5.4.11|^6.0" + "symfony/dependency-injection": "^3.1|^5.4.11|^6.0", + "beberlei/assert": "^3.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6" }, "autoload": { "psr-4": { @@ -31,5 +35,8 @@ "files": [ "autoload/functions_oxDIC.php" ] + }, + "scripts": { + "phpunit": "XDEBUG_MODE=coverage ./vendor/bin/phpunit --bootstrap=source/bootstrap.php --config=vendor/d3/oxid-dic-handler/tests/" } } diff --git a/d3DicHandler.php b/d3DicHandler.php index 4c741bb..2107029 100644 --- a/d3DicHandler.php +++ b/d3DicHandler.php @@ -28,13 +28,11 @@ use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; class d3DicHandler implements d3DicHandlerInterface { - /** - * instance - * @var null|Container - */ - protected static ?Container $_instance = null; + protected static Container|null $_instance = null; - public static array $circularReferenceMethodNames = ['getViewConfig']; + public static array $circularReferenceMethodNames = [ + 'getViewConfig' + ]; /** * get instance @@ -48,14 +46,12 @@ class d3DicHandler implements d3DicHandlerInterface $caller = $trace[1]; $functionName = $caller['function']; - if (in_array(strtolower($functionName), array_map('strtolower', self::$circularReferenceMethodNames))) { - throw oxNew( - Exception::class, - 'method '.$functionName." can't use DIC due the danger of circular reference" - ); + if (in_array(strtolower($functionName), array_map('strtolower', self::$circularReferenceMethodNames))) + { + throw oxNew(Exception::class, 'method '.$functionName." can't use DIC due the danger of circular reference"); } - if (null === self::$_instance) { + if (null == self::$_instance) { $oDicHandler = oxNew(d3DicHandler::class); self::$_instance = $oDicHandler->buildContainer(); } @@ -75,11 +71,9 @@ class d3DicHandler implements d3DicHandlerInterface $caller = $trace[1]; $functionName = $caller['function']; - if (in_array(strtolower($functionName), array_map('strtolower', self::$circularReferenceMethodNames))) { - throw oxNew( - Exception::class, - 'method '.$functionName." can't use DIC due the danger of circular reference" - ); + if (in_array(strtolower($functionName), array_map('strtolower', self::$circularReferenceMethodNames))) + { + throw oxNew(Exception::class, 'method '.$functionName." can't use DIC due the danger of circular reference"); } $oDicHandler = oxNew(d3DicHandler::class); @@ -103,8 +97,7 @@ class d3DicHandler implements d3DicHandlerInterface public function d3GetCacheFilePath(): string { - return $this->d3GetConfig()->getConfigParam('sCompileDir').'/d3DicContainer_'. - Registry::getConfig()->getShopId().'.php'; + return $this->d3GetConfig()->getConfigParam('sCompileDir').'/d3DicContainer_'.Registry::getConfig()->getShopId().'.php'; } /** @@ -113,10 +106,7 @@ class d3DicHandler implements d3DicHandlerInterface public function d3GetCacheContainer(): Container { require_once $this->d3GetCacheFilePath(); - - /** @var Container $container */ - $container = oxNew(d3DIContainerCache::class); /** @phpstan-ignore-line */ - return $container; + return oxNew(d3DIContainerCache::class); } /** @@ -127,8 +117,7 @@ class d3DicHandler implements d3DicHandlerInterface public function d3GetFileLoader(ContainerBuilder $container): YamlFileLoader { /** @var YamlFileLoader $fileLoader */ - $fileLoader = oxNew( - YamlFileLoader::class, + $fileLoader = oxNew(YamlFileLoader::class, $container, oxNew(FileLocator::class, d3DicUtilities::getVendorDir()) ); @@ -154,6 +143,22 @@ class d3DicHandler implements d3DicHandlerInterface } } + /** + * @return bool + */ + protected function isNotInTest(): bool + { + return false == defined('OXID_PHP_UNIT') || true == defined('D3_MODCFG_TEST'); + } + + /** + * @return bool + */ + protected function cacheFileExists(): bool + { + return file_exists($this->d3GetCacheFilePath()); + } + /** * @param bool $compileAndDump * @@ -162,16 +167,14 @@ class d3DicHandler implements d3DicHandlerInterface */ public function buildContainer(bool $compileAndDump = true): Container { - if (Registry::get(ConfigFile::class)->getVar('iDebug')) { - startProfile(__METHOD__); - } + if ((bool) Registry::get( ConfigFile::class)->getVar( 'iDebug')) startProfile(__METHOD__); $config = $this->d3GetConfig(); - if ($config->isProductiveMode() - && ! $config->getConfigParam('iDebug') - && (! defined('OXID_PHP_UNIT') || defined('D3_MODCFG_TEST')) - && file_exists($this->d3GetCacheFilePath()) + if ( $config->isProductiveMode() + && ! $config->getConfigParam( 'iDebug' ) + && $this->isNotInTest() + && $this->cacheFileExists() ) { $container = $this->d3GetCacheContainer(); } else { @@ -181,16 +184,14 @@ class d3DicHandler implements d3DicHandlerInterface if ($compileAndDump) { $container->compile(); - if (! defined('OXID_PHP_UNIT')) { + if ($this->isNotInTest()) { $dumper = new PhpDumper($container); - file_put_contents($this->d3GetCacheFilePath(), $dumper->dump(['class' => 'd3DIContainerCache'])); + file_put_contents($this->d3GetCacheFilePath(), $dumper->dump(array('class' => 'd3DIContainerCache'))); } } } - if (Registry::get(ConfigFile::class)->getVar('iDebug')) { - stopProfile(__METHOD__); - } + if ((bool) Registry::get( ConfigFile::class)->getVar( 'iDebug')) stopProfile(__METHOD__); return $container; } @@ -203,14 +204,10 @@ class d3DicHandler implements d3DicHandlerInterface /** * clone */ - public function __clone() - { - } + public function __clone() {} /** * constructor */ - public function __construct() - { - } + public function __construct() {} } diff --git a/d3DicHandlerInterface.php b/d3DicHandlerInterface.php index 5f08359..25b5931 100644 --- a/d3DicHandlerInterface.php +++ b/d3DicHandlerInterface.php @@ -17,10 +17,7 @@ namespace D3\DIContainerHandler; use Symfony\Component\DependencyInjection\Container; -/** - * Interface d3DicHandlerInterface - */ interface d3DicHandlerInterface { - public static function getInstance(): ?Container; -} + public static function getInstance(): Container; +} \ No newline at end of file diff --git a/d3DicUtilities.php b/d3DicUtilities.php index b3c7155..96330dd 100644 --- a/d3DicUtilities.php +++ b/d3DicUtilities.php @@ -23,7 +23,7 @@ class d3DicUtilities * * @return string */ - public static function getServiceId(string $classNameSpace, ?string $additional = null): string + public static function getServiceId(string $classNameSpace, string $additional = null): string { return strtolower( ($additional ? $additional.'.' : ''). @@ -51,6 +51,6 @@ class d3DicUtilities */ public static function getVendorDir(): string { - return rtrim(dirname(dirname(dirname(__FILE__))), '/').'/'; + return rtrim( dirname( __FILE__, 3 ), '/') . '/'; } } diff --git a/definitionFileContainer.php b/definitionFileContainer.php index ecdb1bf..201f5f6 100644 --- a/definitionFileContainer.php +++ b/definitionFileContainer.php @@ -15,60 +15,54 @@ declare(strict_types=1); namespace D3\DIContainerHandler; -use InvalidArgumentException; +use Assert\Assert; +use Assert\InvalidArgumentException; class definitionFileContainer { public const TYPE_YAML = 'yml'; protected array $definitionFiles = [ - self::TYPE_YAML => [], + self::TYPE_YAML => [] ]; protected array $allowedTypes = [ - self::TYPE_YAML, + self::TYPE_YAML ]; public function __construct() { - $this->addYamlDefinitions('d3/modcfg/Config/services.yaml'); } /** - * @param string $definitionFile - * @param string $type + * @param $definitionFile + * @param $type + * @throws InvalidArgumentException * * @return void */ - public function addDefinitions(string $definitionFile, string $type): void + public function addDefinitions($definitionFile, $type): void { - if (!in_array($type, $this->allowedTypes)) { - throw new InvalidArgumentException('invalid definition file type'); - } + Assert::that($type)->inArray($this->allowedTypes, 'invalid definition file type'); + Assert::that(rtrim(dirname(__FILE__, 3).'/').$definitionFile)->file('invalid definition file'); $this->definitionFiles[$type][md5($definitionFile)] = $definitionFile; } - /** - * @param string $definitionFile - * - * @return void - */ - public function addYamlDefinitions(string $definitionFile): void + public function addYamlDefinitions($definitionFile): void { $this->addDefinitions($definitionFile, self::TYPE_YAML); } /** - * @param string $type + * @param $type * * @return array + * @throws InvalidArgumentException */ - public function getDefinitions(string $type): array + public function getDefinitions($type): array { - if (!in_array($type, $this->allowedTypes)) { - throw new InvalidArgumentException('invalid definition file type'); - } + Assert::that($type)->inArray($this->allowedTypes, 'invalid definition file type'); return $this->definitionFiles[$type]; } @@ -82,14 +76,8 @@ class definitionFileContainer } /** - * @param string $definitionFile - * @return bool + * @return array[] */ - public function has(string $definitionFile): bool - { - return isset($this->definitionFiles[md5($definitionFile)]); - } - public function getAll(): array { return $this->definitionFiles; @@ -99,4 +87,4 @@ class definitionFileContainer { $this->definitionFiles = []; } -} +} \ No newline at end of file