/** * Load an *Extension or *ExtensionInterface class. If it does not exist, create a stub file and load it. * * @param string $className * @return void */ public function load($className) { if (!class_exists($className)) { if (!$this->isExtension($className) && !$this->isExtensionInterface($className)) { return false; } $resultFileName = $this->generatorIo->getResultFileName($className); if (!$this->generatorIo->fileExists($resultFileName)) { $this->generatorIo->makeResultFileDirectory($className); $classNameParts = explode('\\', $className); /* Split the type name and namespace for the file's contents. */ $justTypeName = $classNameParts[count($classNameParts) - 1]; unset($classNameParts[count($classNameParts) - 1]); $namespace = implode('\\', $classNameParts); if ($this->isExtension($className)) { $content = "namespace {$namespace};\n\nclass {$justTypeName} implements " . "{$justTypeName}Interface\n{\n\n}"; } else { if ($this->isExtensionInterface($className)) { $content = "namespace {$namespace};\n\ninterface {$justTypeName} extends " . "\\Magento\\Framework\\Api\\ExtensionAttributesInterface \n{\n\n}"; } } $this->generatorIo->writeResultFile($resultFileName, $content); } include $resultFileName; } return false; }
/** * @return bool */ protected function _validateData() { $sourceClassName = $this->_getSourceClassName(); $resultClassName = $this->_getResultClassName(); $resultFileName = $this->_ioObject->getResultFileName($resultClassName); // @todo the controller handling logic below must be removed when controllers become PSR-0 compliant $controllerSuffix = 'Controller'; $pathParts = explode('_', $sourceClassName); if (strrpos($sourceClassName, $controllerSuffix) === strlen($sourceClassName) - strlen($controllerSuffix) && isset($pathParts[2]) && !in_array($pathParts[2], array('Block', 'Helper', 'Model'))) { $controllerPath = preg_replace('/^([0-9A-Za-z]*)_([0-9A-Za-z]*)/', '\\1_\\2_controllers', $sourceClassName); $filePath = stream_resolve_include_path(str_replace('_', '/', $controllerPath) . '.php'); $isSourceClassValid = !empty($filePath); } else { $isSourceClassValid = $this->_autoloader->getFile($sourceClassName); } if (!$isSourceClassValid) { $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.'); return false; } elseif ($this->_autoloader->getFile($resultClassName)) { $this->_addError('Result class ' . $resultClassName . ' already exists.'); return false; } elseif (!$this->_ioObject->makeGenerationDirectory()) { $this->_addError('Can\'t create directory ' . $this->_ioObject->getGenerationDirectory() . '.'); return false; } elseif (!$this->_ioObject->makeResultFileDirectory($resultClassName)) { $this->_addError('Can\'t create directory ' . $this->_ioObject->getResultFileDirectory($resultClassName) . '.'); return false; } elseif ($this->_ioObject->fileExists($resultFileName)) { $this->_addError('Result file ' . $resultFileName . ' already exists.'); return false; } return true; }
public function testGenerateClassInterceptorWithNamespace() { $interceptorClassName = self::CLASS_NAME_WITH_NAMESPACE . '\\Interceptor'; $result = false; $generatorResult = $this->_generator->generateClass($interceptorClassName); if (\Magento\Framework\Code\Generator::GENERATION_ERROR !== $generatorResult) { $result = true; } $this->assertTrue($result, 'Failed asserting that \'' . (string) $generatorResult . '\' equals \'success\'.'); if (\Magento\Framework\Code\Generator::GENERATION_SUCCESS == $generatorResult) { $content = $this->_clearDocBlock(file_get_contents($this->_ioObject->getResultFileName(self::CLASS_NAME_WITH_NAMESPACE . '\\Interceptor'))); $expectedContent = $this->_clearDocBlock(file_get_contents(__DIR__ . '/_expected/SourceClassWithNamespaceInterceptor.php.sample')); $this->assertEquals($expectedContent, $content); } }
public function testGetResultFileName() { $expectedFileName = self::GENERATION_DIRECTORY . '/class/name.php'; $this->assertEquals($expectedFileName, $this->_object->getResultFileName(self::CLASS_NAME)); }