diff vendor/phar-io/manifest/src/ManifestDocumentMapper.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/phar-io/manifest/src/ManifestDocumentMapper.php	Mon Apr 23 09:46:53 2018 +0100
@@ -0,0 +1,193 @@
+<?php
+/*
+ * This file is part of PharIo\Manifest.
+ *
+ * (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace PharIo\Manifest;
+
+use PharIo\Version\Version;
+use PharIo\Version\Exception as VersionException;
+use PharIo\Version\VersionConstraintParser;
+
+class ManifestDocumentMapper {
+    /**
+     * @param ManifestDocument $document
+     *
+     * @returns Manifest
+     *
+     * @throws ManifestDocumentMapperException
+     */
+    public function map(ManifestDocument $document) {
+        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 (VersionException $e) {
+            throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e);
+        } catch (Exception $e) {
+            throw new ManifestDocumentMapperException($e->getMessage(), $e->getCode(), $e);
+        }
+    }
+
+    /**
+     * @param ContainsElement $contains
+     *
+     * @return Type
+     *
+     * @throws ManifestDocumentMapperException
+     */
+    private function mapType(ContainsElement $contains) {
+        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())
+        );
+    }
+
+    /**
+     * @param CopyrightElement $copyright
+     *
+     * @return CopyrightInformation
+     *
+     * @throws InvalidUrlException
+     * @throws InvalidEmailException
+     */
+    private function mapCopyright(CopyrightElement $copyright) {
+        $authors = new AuthorCollection();
+
+        foreach($copyright->getAuthorElements() as $authorElement) {
+            $authors->add(
+                new Author(
+                    $authorElement->getName(),
+                    new Email($authorElement->getEmail())
+                )
+            );
+        }
+
+        $licenseElement = $copyright->getLicenseElement();
+        $license        = new License(
+            $licenseElement->getType(),
+            new Url($licenseElement->getUrl())
+        );
+
+        return new CopyrightInformation(
+            $authors,
+            $license
+        );
+    }
+
+    /**
+     * @param RequiresElement $requires
+     *
+     * @return RequirementCollection
+     *
+     * @throws ManifestDocumentMapperException
+     */
+    private function mapRequirements(RequiresElement $requires) {
+        $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()),
+                $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;
+    }
+
+    /**
+     * @param ManifestDocument $document
+     *
+     * @return BundledComponentCollection
+     */
+    private function mapBundledComponents(ManifestDocument $document) {
+        $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;
+    }
+
+    /**
+     * @param ExtensionElement $extension
+     *
+     * @return Extension
+     *
+     * @throws ManifestDocumentMapperException
+     */
+    private function mapExtension(ExtensionElement $extension) {
+        try {
+            $parser            = new VersionConstraintParser;
+            $versionConstraint = $parser->parse($extension->getCompatible());
+
+            return Type::extension(
+                new ApplicationName($extension->getFor()),
+                $versionConstraint
+            );
+        } catch (VersionException $e) {
+            throw new ManifestDocumentMapperException(
+                sprintf('Unsupported version constraint - %s', $e->getMessage()),
+                $e->getCode(),
+                $e
+            );
+        }
+    }
+}