-
Notifications
You must be signed in to change notification settings - Fork 132
/
Copy pathAbstractComposer.php
86 lines (77 loc) · 2.49 KB
/
AbstractComposer.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\FunctionalTestingFramework\Composer;
use Composer\IO\BufferIO;
/**
* Abstract Composer Handler
*/
abstract class AbstractComposer
{
const TEST_MODULE_PACKAGE_TYPE = 'magento2-functional-test-module';
const MAGENTO_MODULE_PACKAGE_TYPE = 'magento2-module';
const MODULE_NAME_IN_SUGGEST_REGEX_INDEX = 'module_name';
const MODULE_NAME_IN_SUGGEST_REGEX = '/type:\s*'
. self::MAGENTO_MODULE_PACKAGE_TYPE
. '\s*,\s*name:\s*(?<'
. self::MODULE_NAME_IN_SUGGEST_REGEX_INDEX
. '>[^,\s]+_[^,\s]+)/';
/**#@+
* Composer package array keys
*/
const PACKAGE_NAME = 'name';
const PACKAGE_TYPE = 'type';
const PACKAGE_VERSION = 'version';
const PACKAGE_DESCRIPTION = 'description';
const PACKAGE_INSTALLEDPATH = 'installedPath';
const PACKAGE_REQUIRES = 'requires';
const PACKAGE_DEVREQUIRES = 'devRequires';
const PACKAGE_SUGGESTS = 'suggests';
const PACKAGE_SUGGESTED_MAGENTO_MODULES = 'suggestedMagentoModules';
/**#@-*/
/**
* @var \Composer\Composer
*/
protected $composer;
/**
* @param string $composerFile
*/
public function __construct($composerFile)
{
$this->composer = \Composer\Factory::create(new BufferIO(), $composerFile);
}
/**
* Get composer
*
* @return \Composer\Composer
*/
protected function getComposer()
{
return $this->composer;
}
/**
* Parse input array and return all suggested magento module names, i.e. an example "suggest" in composer.json
*
* "suggest": {
* "magento/module-backend": "type: magento2-module, name: Magento_Backend, version: ~100.0.0",
* "magento/module-store": "type: magento2-module, name: Magento_Store, version: ~100.0.0"
* }
*
* @param array $suggests
* @return array
*/
protected function parseSuggestsForMagentoModuleNames($suggests)
{
$magentoModuleNames = [];
foreach ($suggests as $suggest) {
// Expecting pattern - type: magento2-module, name: Magento_Store, version: ~100.0.0
preg_match(self::MODULE_NAME_IN_SUGGEST_REGEX, $suggest, $match);
if (isset($match[self::MODULE_NAME_IN_SUGGEST_REGEX_INDEX])) {
$magentoModuleNames[] = $match[self::MODULE_NAME_IN_SUGGEST_REGEX_INDEX];
}
}
return array_unique($magentoModuleNames);
}
}