Transformer::load()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 8
c 1
b 0
f 0
dl 0
loc 12
rs 10
cc 2
nc 2
nop 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the composer-link plugin.
7
 *
8
 * Copyright (c) 2021-2022 Sander Visser <[email protected]>.
9
 *
10
 * For the full copyright and license information, please view the LICENSE.md
11
 * file that was distributed with this source code.
12
 *
13
 * @link https://github.com/SanderSander/composer-link
14
 */
15
16
namespace ComposerLink\Repository;
17
18
use Composer\Package\CompletePackage;
19
use Composer\Package\Dumper\ArrayDumper;
20
use Composer\Package\Loader\ArrayLoader;
21
use ComposerLink\LinkedPackage;
22
23
class Transformer
24
{
25
    protected ArrayLoader $composerLoader;
26
27
    protected ArrayDumper $composerDumper;
28
29
    public function __construct()
30
    {
31
        $this->composerLoader = new ArrayLoader();
32
        $this->composerDumper = new ArrayDumper();
33
    }
34
35
    /**
36
     * Load a Linked package from array data.
37
     *
38
     * @param array<string, mixed> $data
39
     */
40
    public function load(array $data): LinkedPackage
41
    {
42
        /** @var CompletePackage $newPackage */
43
        $newPackage = $this->composerLoader->load($data['package']);
44
        $originalPackage = isset($data['originalPackage']) ?
45
            $this->composerLoader->load($data['originalPackage']) : null;
46
47
        return new LinkedPackage(
48
            $data['path'],
49
            $newPackage,
50
            $originalPackage,
51
            $data['installationPath']
52
        );
53
    }
54
55
    /**
56
     * Export LinkedPackage to array data.
57
     *
58
     * @return array<string, mixed>
59
     */
60
    public function export(LinkedPackage $package): array
61
    {
62
        $data = [];
63
        $data['path'] = $package->getPath();
64
        $data['installationPath'] = $package->getInstallationPath();
65
        $data['package'] = $this->composerDumper->dump($package->getPackage());
66
        if (!is_null($package->getOriginalPackage())) {
67
            $data['originalPackage'] = $this->composerDumper->dump($package->getOriginalPackage());
68
        }
69
70
        return $data;
71
    }
72
}
73