public function testCreateWithParameters() { $descriptor = new InstallerDescriptor('symlink', self::SYMLINK_CLASS, null, array($param1 = new InstallerParameter('param1'), $param2 = new InstallerParameter('param2'))); $this->assertSame('symlink', $descriptor->getName()); $this->assertSame(self::SYMLINK_CLASS, $descriptor->getClassName()); $this->assertNull($descriptor->getDescription()); $this->assertSame(array('param1' => $param1, 'param2' => $param2), $descriptor->getParameters()); }
/** * Returns whether the given parameter values are valid. * * @param array $parameterValues The parameter values to * validate. * @param InstallerDescriptor $descriptor The installer descriptor to * validate the values for. * * @return ConstraintViolation[] The found violations. If no violations were * found, an empty array is returned. */ public function validate(array $parameterValues, InstallerDescriptor $descriptor) { $violations = array(); foreach ($parameterValues as $name => $value) { if (!$descriptor->hasParameter($name)) { $violations[] = new ConstraintViolation(ConstraintViolation::NO_SUCH_PARAMETER, $value, $descriptor->getName(), $name); } } foreach ($descriptor->getParameters() as $parameter) { if (!isset($parameterValues[$parameter->getName()])) { if ($parameter->isRequired()) { $violations[] = new ConstraintViolation(ConstraintViolation::MISSING_PARAMETER, $parameterValues, $descriptor->getName(), $parameter->getName()); } } } return $violations; }
/** * {@inheritdoc} */ public function addRootInstallerDescriptor(InstallerDescriptor $descriptor) { $this->assertInstallersLoaded(); $name = $descriptor->getName(); $previouslySetInRoot = isset($this->rootInstallerDescriptors[$name]); $previousInstaller = $previouslySetInRoot ? $this->rootInstallerDescriptors[$name] : null; if (isset($this->installerDescriptors[$name]) && !$previouslySetInRoot) { throw new RuntimeException(sprintf('An installer with the name "%s" exists already.', $name)); } try { $this->installerDescriptors[$name] = $descriptor; $this->rootInstallerDescriptors[$name] = $descriptor; $this->persistInstallersData(); } catch (Exception $e) { if ($previouslySetInRoot) { $this->installerDescriptors[$name] = $previousInstaller; $this->rootInstallerDescriptors[$name] = $previousInstaller; } else { unset($this->installerDescriptors[$name]); unset($this->rootInstallerDescriptors[$name]); } throw $e; } }
private function loadInstaller(InstallerDescriptor $descriptor) { $installerName = $descriptor->getName(); if (!isset($this->installers[$installerName])) { $installerClass = $descriptor->getClassName(); $this->validateInstallerClass($installerClass); $this->installers[$installerName] = new $installerClass(); } return $this->installers[$installerName]; }