Completed
Pull Request — master (#8)
by ARCANEDEV
06:34
created

Package::mergeRequires()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 22
Code Lines 13

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 2

Importance

Changes 6
Bugs 1 Features 0
Metric Value
c 6
b 1
f 0
dl 0
loc 22
ccs 15
cts 15
cp 1
rs 9.2
cc 2
eloc 13
nc 2
nop 2
crap 2
1
<?php namespace Arcanedev\Composer\Entities;
2
3
use Arcanedev\Composer\Utilities\Logger;
4
use Composer\Composer;
5
use Composer\Package\RootPackageInterface;
6
use Composer\Package\Version\VersionParser;
7
8
/**
9
 * Class     Package
10
 *
11
 * @package  Arcanedev\Composer\Entities
12
 * @author   ARCANEDEV <[email protected]>
13
 */
14
class Package
15
{
16
    /* ------------------------------------------------------------------------------------------------
17
     |  Traits
18
     | ------------------------------------------------------------------------------------------------
19
     */
20
    use PackageTraits\BaseTrait,
21
        PackageTraits\RepositoriesTrait,
22
        PackageTraits\RequiresTrait,
23
        PackageTraits\AutoloadTrait,
24
        PackageTraits\LinksTrait,
25
        PackageTraits\SuggestsTrait,
26
        PackageTraits\ExtraTrait,
27
        PackageTraits\DevTrait,
28
        PackageTraits\ReferencesTrait;
29
30
    /* ------------------------------------------------------------------------------------------------
31
     |  Properties
32
     | ------------------------------------------------------------------------------------------------
33
     */
34
    /** @var \Composer\Composer $composer */
35
    protected $composer;
36
37
    /** @var \Arcanedev\Composer\Utilities\Logger $logger */
38
    protected $logger;
39
40
    /** @var \Composer\Package\CompletePackage $package */
41
    protected $package;
42
43
    /** @var string $path */
44
    protected $path;
45
46
    /** @var \Composer\Package\Version\VersionParser $versionParser */
47
    protected $versionParser;
48
49
    /** @var array $json */
50
    protected $json;
51
52
    /* ------------------------------------------------------------------------------------------------
53
     |  Constructor
54
     | ------------------------------------------------------------------------------------------------
55 135
     */
56
    /**
57 135
     * Make a Package instance.
58 135
     *
59 135
     * @param  string                                $path
60 135
     * @param  \Composer\Composer                    $composer
61 135
     * @param  \Arcanedev\Composer\Utilities\Logger  $logger
62 135
     */
63 135
    public function __construct($path, Composer $composer, Logger $logger)
64
    {
65
        $this->path          = $path;
66
        $this->composer      = $composer;
67
        $this->logger        = $logger;
68
        $this->json          = PackageJson::read($path);
69
        $this->package       = PackageJson::convert($this->json);
70
        $this->versionParser = new VersionParser;
71
    }
72
73
    /* ------------------------------------------------------------------------------------------------
74 130
     |  Getters & Setters
75
     | ------------------------------------------------------------------------------------------------
76 130
     */
77 104
    /**
78 130
     * Get list of additional packages to require if precessing recursively.
79
     *
80
     * @return array
81
     */
82
    public function getRequires()
83
    {
84
        return isset($this->json['extra']['merge-plugin']['require'])
85
            ? $this->json['extra']['merge-plugin']['require']
86 130
            : [];
87
    }
88 130
89 109
    /**
90 130
     * Get list of additional packages to include if precessing recursively.
91
     *
92
     * @return array
93
     */
94
    public function getIncludes()
95
    {
96
        return isset($this->json['extra']['merge-plugin']['include'])
97
            ? $this->json['extra']['merge-plugin']['include']
98
            : [];
99
    }
100
101
    /* ------------------------------------------------------------------------------------------------
102
     |  Main Functions
103 135
     | ------------------------------------------------------------------------------------------------
104
     */
105 135
    /**
106
     * Merge this package into a RootPackage.
107 135
     *
108 135
     * @param  \Composer\Package\RootPackageInterface    $root
109 135
     * @param  \Arcanedev\Composer\Entities\PluginState  $state
110 135
     */
111 135
    public function mergeInto(RootPackageInterface $root, PluginState $state)
112 135
    {
113 135
        $this->addRepositories($root, $state);
114
115 135
        $this->mergeRequires($root, $state);
116 129
        $this->mergeAutoload($root);
117
        $this->mergePackageLinks('conflict', $root);
118 30
        $this->mergePackageLinks('replace',  $root);
119 135
        $this->mergePackageLinks('provide',  $root);
120
        $this->mergeSuggests($root);
121
        $this->mergeExtra($root, $state);
122
123
        if ($state->isDevMode())
124
            $this->mergeDevInto($root, $state);
125
        else
126
            $this->mergeReferences($root);
127 135
    }
128
}
129