ReferencesTrait   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 0
cbo 3
dl 0
loc 64
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A mergeReferences() 0 22 3
A extractReferences() 0 14 4
1
<?php namespace Arcanedev\Composer\Entities\PackageTraits;
2
3
use Composer\Package\BasePackage;
4
use Composer\Package\RootPackageInterface;
5
use Composer\Package\Version\VersionParser;
6
7
/**
8
 * Trait     ReferencesTrait
9
 *
10
 * @package  Arcanedev\Composer\Entities\PackageTraits
11
 * @author   ARCANEDEV <[email protected]>
12
 */
13
trait ReferencesTrait
14
{
15
    /* ------------------------------------------------------------------------------------------------
16
     |  Traits
17
     | ------------------------------------------------------------------------------------------------
18
     */
19
    use PackageTrait;
20
21
    /* ------------------------------------------------------------------------------------------------
22
     |  Main Functions
23
     | ------------------------------------------------------------------------------------------------
24
     */
25
    /**
26
     * Update the root packages reference information.
27
     *
28
     * @param  \Composer\Package\RootPackageInterface  $root
29
     */
30 99
    protected function mergeReferences(RootPackageInterface $root)
31
    {
32
        // Merge source reference information for merged packages.
33
        // @see \Composer\Package\Loader\RootPackageLoader::load
34 99
        $references = [];
35 99
        $unwrapped  = static::unwrapIfNeeded($root, 'setReferences');
36
37 99
        foreach (['require', 'require-dev'] as $linkType) {
38 99
            $linkInfo = BasePackage::$supportedLinkTypes[$linkType];
39 99
            $method   = 'get'.ucfirst($linkInfo['method']);
40 99
            $links    = [];
41
42
            /** @var  \Composer\Package\Link  $link */
43 99
            foreach ($unwrapped->$method() as $link) {
44 36
                $links[$link->getTarget()] = $link->getConstraint()->getPrettyString();
45
            }
46
47 99
            $references = $this->extractReferences($links, $references);
48
        }
49
50 99
        $unwrapped->setReferences($references);
51 99
    }
52
53
    /**
54
     * Extract vcs revision from version constraint (dev-master#abc123).
55
     * @see \Composer\Package\Loader\RootPackageLoader::extractReferences()
56
     *
57
     * @param  array  $requires
58
     * @param  array  $references
59
     *
60
     * @return array
61
     */
62 99
    private function extractReferences(array $requires, array $references)
63
    {
64 99
        foreach ($requires as $reqName => $reqVersion) {
65 36
            $reqVersion = preg_replace('{^([^,\s@]+) as .+$}', '$1', $reqVersion);
66
            if (
67 36
                preg_match('{^[^,\s@]+?#([a-f0-9]+)$}', $reqVersion, $match) &&
68 36
                VersionParser::parseStability($reqVersion) === 'dev'
69
            ) {
70 18
                $references[strtolower($reqName)] = $match[1];
71
            }
72
        }
73
74 99
        return $references;
75
    }
76
}
77