/** * Creates a new package. * * @param PackageFile|null $packageFile The package file or `null` if the * package file could not be loaded. * @param string $installPath The absolute install path. * @param InstallInfo|null $installInfo The install info of this package. * @param Exception[] $loadErrors The errors that happened during * loading of the package, if any. */ public function __construct(PackageFile $packageFile = null, $installPath, InstallInfo $installInfo = null, array $loadErrors = array()) { Assert::absoluteSystemPath($installPath); Assert::true($packageFile || $loadErrors, 'The load errors must be passed if the package file is null.'); Assert::allIsInstanceOf($loadErrors, 'Exception'); // If a package name was set during installation, that name wins over // the predefined name in the puli.json file (if any) $this->name = $installInfo && null !== $installInfo->getPackageName() ? $installInfo->getPackageName() : ($packageFile ? $packageFile->getPackageName() : null); if (null === $this->name) { $this->name = $this->getDefaultName(); } // The path is stored both here and in the install info. While the // install info contains the path as it is stored in the install file // (i.e. relative or absolute), the install path of the package is // always an absolute path. $this->installPath = $installPath; $this->installInfo = $installInfo; $this->packageFile = $packageFile; $this->loadErrors = $loadErrors; if (!file_exists($installPath)) { $this->state = PackageState::NOT_FOUND; } elseif (count($loadErrors) > 0) { $this->state = PackageState::NOT_LOADABLE; } else { $this->state = PackageState::ENABLED; } }
private function addConfig(array &$jsonData, PackageFile $packageFile) { $mappings = $packageFile->getPathMappings(); $bindings = $packageFile->getBindingDescriptors(); $bindingTypes = $packageFile->getTypeDescriptors(); $overrides = $packageFile->getOverriddenPackages(); $extra = $packageFile->getExtraKeys(); $jsonData['version'] = '1.0'; if (null !== $packageFile->getPackageName()) { $jsonData['name'] = $packageFile->getPackageName(); } if (count($mappings) > 0) { $jsonData['path-mappings'] = new stdClass(); foreach ($mappings as $mapping) { $puliPath = $mapping->getRepositoryPath(); $localPaths = $mapping->getPathReferences(); $jsonData['path-mappings']->{$puliPath} = count($localPaths) > 1 ? $localPaths : reset($localPaths); } } if (count($bindings) > 0) { uasort($bindings, array('Puli\\Manager\\Api\\Discovery\\BindingDescriptor', 'compare')); $jsonData['bindings'] = new stdClass(); foreach ($bindings as $binding) { $bindingData = new stdClass(); $bindingData->query = $binding->getQuery(); if ('glob' !== $binding->getLanguage()) { $bindingData->language = $binding->getLanguage(); } $bindingData->type = $binding->getTypeName(); // Don't include the default values of the binding type if ($binding->hasParameterValues(false)) { $bindingData->parameters = $binding->getParameterValues(false); ksort($bindingData->parameters); } $jsonData['bindings']->{$binding->getUuid()->toString()} = $bindingData; } } if (count($bindingTypes) > 0) { $bindingTypesData = array(); foreach ($bindingTypes as $bindingType) { $typeData = new stdClass(); if ($bindingType->getDescription()) { $typeData->description = $bindingType->getDescription(); } if (count($bindingType->getParameters()) > 0) { $parametersData = array(); foreach ($bindingType->getParameters() as $parameter) { $paramData = new stdClass(); if ($parameter->getDescription()) { $paramData->description = $parameter->getDescription(); } if ($parameter->isRequired()) { $paramData->required = true; } if (null !== $parameter->getDefaultValue()) { $paramData->default = $parameter->getDefaultValue(); } $parametersData[$parameter->getName()] = $paramData; } ksort($parametersData); $typeData->parameters = (object) $parametersData; } $bindingTypesData[$bindingType->getName()] = $typeData; } ksort($bindingTypesData); $jsonData['binding-types'] = (object) $bindingTypesData; } if (count($overrides) > 0) { $jsonData['override'] = count($overrides) > 1 ? $overrides : reset($overrides); } if (count($extra) > 0) { $jsonData['extra'] = (object) $extra; } }
/** * @dataProvider provideValidPackageNames */ public function testGetPackageNameSetter($name) { $packageFile = new PackageFile(); $packageFile->setPackageName($name); $this->assertSame($name, $packageFile->getPackageName()); }
private function assertMinimalConfig(PackageFile $packageFile) { $this->assertNull($packageFile->getPackageName()); $this->assertSame(array(), $packageFile->getPathMappings()); $this->assertSame(array(), $packageFile->getBindingDescriptors()); $this->assertSame(array(), $packageFile->getOverriddenPackages()); }
private function packageFileToJson(PackageFile $packageFile, stdClass $jsonData) { $mappings = $packageFile->getPathMappings(); $bindingDescriptors = $packageFile->getBindingDescriptors(); $typeDescriptors = $packageFile->getTypeDescriptors(); $overrides = $packageFile->getOverriddenPackages(); $extra = $packageFile->getExtraKeys(); if (null !== $packageFile->getPackageName()) { $jsonData->name = $packageFile->getPackageName(); } if (count($mappings) > 0) { $jsonData->{'path-mappings'} = new stdClass(); foreach ($mappings as $mapping) { $puliPath = $mapping->getRepositoryPath(); $localPaths = $mapping->getPathReferences(); $jsonData->{'path-mappings'}->{$puliPath} = count($localPaths) > 1 ? $localPaths : reset($localPaths); } } if (count($bindingDescriptors) > 0) { uasort($bindingDescriptors, array(__CLASS__, 'compareBindingDescriptors')); $jsonData->bindings = new stdClass(); foreach ($bindingDescriptors as $bindingDescriptor) { $binding = $bindingDescriptor->getBinding(); $bindingData = new stdClass(); $bindingData->_class = get_class($binding); // This needs to be moved to external classes to allow adding // custom binding classes at some point if ($binding instanceof ResourceBinding) { $bindingData->query = $binding->getQuery(); if ('glob' !== $binding->getLanguage()) { $bindingData->language = $binding->getLanguage(); } } elseif ($binding instanceof ClassBinding) { $bindingData->class = $binding->getClassName(); } $bindingData->type = $bindingDescriptor->getTypeName(); // Don't include the default values of the binding type if ($binding->hasParameterValues(false)) { $parameterData = $binding->getParameterValues(false); ksort($parameterData); $bindingData->parameters = (object) $parameterData; } $jsonData->bindings->{$bindingDescriptor->getUuid()->toString()} = $bindingData; } } if (count($typeDescriptors) > 0) { $bindingTypesData = array(); foreach ($typeDescriptors as $typeDescriptor) { $type = $typeDescriptor->getType(); $typeData = new stdClass(); if ($typeDescriptor->getDescription()) { $typeData->description = $typeDescriptor->getDescription(); } if ($type->hasParameters()) { $parametersData = array(); foreach ($type->getParameters() as $parameter) { $parameterData = new stdClass(); if ($typeDescriptor->hasParameterDescription($parameter->getName())) { $parameterData->description = $typeDescriptor->getParameterDescription($parameter->getName()); } if ($parameter->isRequired()) { $parameterData->required = true; } if (null !== $parameter->getDefaultValue()) { $parameterData->default = $parameter->getDefaultValue(); } $parametersData[$parameter->getName()] = $parameterData; } ksort($parametersData); $typeData->parameters = (object) $parametersData; } $bindingTypesData[$type->getName()] = $typeData; } ksort($bindingTypesData); $jsonData->{'binding-types'} = (object) $bindingTypesData; } if (count($overrides) > 0) { $jsonData->override = count($overrides) > 1 ? $overrides : reset($overrides); } if (count($extra) > 0) { $jsonData->extra = (object) $extra; } }