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;
     }
 }
示例#2
0
 public function testClearExtraKeys()
 {
     $packageFile = new PackageFile();
     $packageFile->setExtraKey('key1', 'value1');
     $packageFile->setExtraKey('key2', 'value2');
     $packageFile->clearExtraKeys();
     $this->assertSame(array(), $packageFile->getExtraKeys());
 }
 private function assertFullConfig(PackageFile $packageFile)
 {
     $this->assertSame('my/application', $packageFile->getPackageName());
     $this->assertEquals(array('/app' => new PathMapping('/app', array('res'))), $packageFile->getPathMappings());
     $this->assertEquals(array(new BindingDescriptor('/app/config*.yml', 'my/type', array(), 'glob', Uuid::fromString(self::BINDING_UUID1))), $packageFile->getBindingDescriptors());
     $this->assertEquals(array(new BindingTypeDescriptor('my/type', 'Description of my type.', array(new BindingParameterDescriptor('param', BindingParameterDescriptor::OPTIONAL, 1234, 'Description of the parameter.')))), $packageFile->getTypeDescriptors());
     $this->assertSame(array('acme/blog'), $packageFile->getOverriddenPackages());
     $this->assertEquals(array('extra1' => 'value', 'extra2' => (object) array('key' => 'value')), $packageFile->getExtraKeys());
 }
示例#4
0
 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;
     }
 }