Completed
Push — master ( c3fcf1...80946a )
by Pol
13:17 queued 11:29
created

Dependencies   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 28
c 1
b 0
f 0
dl 0
loc 56
ccs 31
cts 31
cp 1
rs 10
wmc 8

3 Methods

Rating   Name   Duplication   Size   Complexity  
A exportToArray() 0 23 2
A getDependenciesOf() 0 12 4
A buildRegex() 0 14 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace drupol\ComposerPackages\Exporter;
6
7
use Composer\Package\Loader\ArrayLoader;
8
use Composer\Package\PackageInterface;
9
10
class Dependencies extends Exporter
11
{
12 2
    public function exportToArray(): array
13
    {
14 2
        $data = $this->getEvent()->getComposer()->getLocker()->getLockData();
15
16 2
        $packagesData = \array_merge(
17 2
            $data['packages'],
18 2
            $data['packages-dev']
19
        );
20
21 2
        $packageDeps = [];
22
23 2
        foreach ($packagesData as $package) {
24 2
            $package = (new ArrayLoader())->load($package);
25 2
            $packageName = $package->getName();
26 2
            $packageDeps += [$packageName => []];
27 2
            $this->getDependenciesOf($packageDeps[$package->getName()], $package);
28
29 2
            $packageDeps[$packageName] = \array_values($packageDeps[$packageName]);
30
        }
31
32 2
        $regex = $this->buildRegex($packageDeps);
33
34 2
        return \compact('packageDeps', 'regex');
35
    }
36
37 2
    protected function getDependenciesOf(array &$carry, PackageInterface $package): void
38
    {
39 2
        foreach (\array_keys($package->getRequires()) as $key) {
40 2
            if ('php' === $key) {
41 1
                continue;
42
            }
43
44 2
            if (0 === \mb_strpos((string) $key, 'ext-')) {
45 1
                continue;
46
            }
47
48 2
            $carry += [$key => $key];
49
        }
50 2
    }
51
52 2
    private function buildRegex($packages): array
53
    {
54 2
        $groups = [];
55
56 2
        foreach ($packages as $package => $dependencies) {
57 2
            [$prefix, $bundle] = \explode('/', $package);
58 2
            $groups[\sprintf('(?i:%s)(?|', $prefix)][] = \sprintf(
59 2
                '/?(?i:%s) (*MARK:%s)|',
60 2
                \str_replace('-', '-?', $bundle),
61 2
                $package
62
            );
63
        }
64
65 2
        return $groups;
66
    }
67
}
68