/
ProviderManager.php
89 lines (75 loc) · 2.4 KB
/
ProviderManager.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
87
88
89
<?php
namespace Skeletor\Manager;
use Skeletor\Frameworks\Framework;
use Skeletor\Packages\Package;
class ProviderManager extends Manager
{
const PROVIDER_METHOD = 'getProviderClass';
const FACADE_METHOD = 'getFacadeClass';
/**
* @param Package $package
* @param Framework $activeFramework
*/
public function configure(Package $package, Framework $activeFramework)
{
if ($activeFramework->getName() !== 'Laravel') {
$this->cli->red("Configure {$package->getInstallSlug()} manual for {$activeFramework->getName()}, we currently only support Laravel");
return;
}
$configFile = $activeFramework->getPath('appConfig');
$newContent = $this->getNewConfig($configFile, $package);
$this->projectFilesystem->update($configFile, $newContent);
}
/**
* @param string $configFile
* @param Package $package
* @return array|bool
*/
public function getNewConfig(string $configFile, Package $package)
{
$state = null;
$appConfig = file($configFile);
foreach($appConfig as $key => $line) {
$cleanLine = trim(preg_replace('/[\t\s]+/', '', $line));
switch ($cleanLine) {
case "'providers'=>[":
$state = self::PROVIDER_METHOD;
break;
case "'aliases'=>[":
$state = self::FACADE_METHOD;
break;
}
if ($cleanLine === "]," && $state !== null) {
$previousLine = --$key;
$appConfig[$previousLine] .= $this->$state($package);
$state = null;
}
}
return $appConfig;
}
/**
* @param Package $package
* @return string
*/
public function getFacadeClass(Package $package)
{
$facade = $package->getFacade();
if (isset($facade) === false) {
return;
}
$provider = explode('@', $package->getFacade());
return sprintf("\t\t'%s' => %s::class,", $provider[0], $provider[1]) . PHP_EOL;
}
/**
* @param Package $package
* @return string
*/
public function getProviderClass(Package $package)
{
$provider = $package->getProvider();
if (isset($provider) === false) {
return;
}
return sprintf("\t\t%s::class,", $provider) . PHP_EOL;
}
}