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; } }
public function testGetPathMappingsReturnsSortedResult() { $mapping1 = new PathMapping('/path1', 'res1'); $mapping2 = new PathMapping('/path2', 'res2'); $mapping3 = new PathMapping('/path3', 'res3'); $packageFile = new PackageFile(); $packageFile->addPathMapping($mapping3); $packageFile->addPathMapping($mapping1); $packageFile->addPathMapping($mapping2); $this->assertSame(array('/path1' => $mapping1, '/path2' => $mapping2, '/path3' => $mapping3), $packageFile->getPathMappings()); }
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; } }