Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ManifestDocumentMapper.php

class ManifestDocumentMapper

Hierarchy

  • class \PharIo\Manifest\ManifestDocumentMapper

Expanded class hierarchy of ManifestDocumentMapper

File

vendor/phar-io/manifest/src/ManifestDocumentMapper.php, line 19

Namespace

PharIo\Manifest
View source
class ManifestDocumentMapper {
    public function map(ManifestDocument $document) : Manifest {
        try {
            $contains = $document->getContainsElement();
            $type = $this->mapType($contains);
            $copyright = $this->mapCopyright($document->getCopyrightElement());
            $requirements = $this->mapRequirements($document->getRequiresElement());
            $bundledComponents = $this->mapBundledComponents($document);
            return new Manifest(new ApplicationName($contains->getName()), new Version($contains->getVersion()), $type, $copyright, $requirements, $bundledComponents);
        } catch (Throwable $e) {
            throw new ManifestDocumentMapperException($e->getMessage(), (int) $e->getCode(), $e);
        }
    }
    private function mapType(ContainsElement $contains) : Type {
        switch ($contains->getType()) {
            case 'application':
                return Type::application();
            case 'library':
                return Type::library();
            case 'extension':
                return $this->mapExtension($contains->getExtensionElement());
        }
        throw new ManifestDocumentMapperException(sprintf('Unsupported type %s', $contains->getType()));
    }
    private function mapCopyright(CopyrightElement $copyright) : CopyrightInformation {
        $authors = new AuthorCollection();
        foreach ($copyright->getAuthorElements() as $authorElement) {
            $authors->add(new Author($authorElement->getName(), $authorElement->hasEMail() ? new Email($authorElement->getEmail()) : null));
        }
        $licenseElement = $copyright->getLicenseElement();
        $license = new License($licenseElement->getType(), new Url($licenseElement->getUrl()));
        return new CopyrightInformation($authors, $license);
    }
    private function mapRequirements(RequiresElement $requires) : RequirementCollection {
        $collection = new RequirementCollection();
        $phpElement = $requires->getPHPElement();
        $parser = new VersionConstraintParser();
        try {
            $versionConstraint = $parser->parse($phpElement->getVersion());
        } catch (VersionException $e) {
            throw new ManifestDocumentMapperException(sprintf('Unsupported version constraint - %s', $e->getMessage()), (int) $e->getCode(), $e);
        }
        $collection->add(new PhpVersionRequirement($versionConstraint));
        if (!$phpElement->hasExtElements()) {
            return $collection;
        }
        foreach ($phpElement->getExtElements() as $extElement) {
            $collection->add(new PhpExtensionRequirement($extElement->getName()));
        }
        return $collection;
    }
    private function mapBundledComponents(ManifestDocument $document) : BundledComponentCollection {
        $collection = new BundledComponentCollection();
        if (!$document->hasBundlesElement()) {
            return $collection;
        }
        foreach ($document->getBundlesElement()
            ->getComponentElements() as $componentElement) {
            $collection->add(new BundledComponent($componentElement->getName(), new Version($componentElement->getVersion())));
        }
        return $collection;
    }
    private function mapExtension(ExtensionElement $extension) : Extension {
        try {
            $versionConstraint = (new VersionConstraintParser())->parse($extension->getCompatible());
            return Type::extension(new ApplicationName($extension->getFor()), $versionConstraint);
        } catch (VersionException $e) {
            throw new ManifestDocumentMapperException(sprintf('Unsupported version constraint - %s', $e->getMessage()), (int) $e->getCode(), $e);
        }
    }

}

Members

Title Sort descending Modifiers Object type Summary
ManifestDocumentMapper::map public function
ManifestDocumentMapper::mapBundledComponents private function
ManifestDocumentMapper::mapCopyright private function
ManifestDocumentMapper::mapExtension private function
ManifestDocumentMapper::mapRequirements private function
ManifestDocumentMapper::mapType private function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal