2
2
3
3
namespace Jenko \Sunscreen ;
4
4
5
+ use Composer \Composer ;
6
+ use Composer \EventDispatcher \EventSubscriberInterface ;
5
7
use Composer \Installer \PackageEvent ;
8
+ use Composer \Installer \PackageEvents ;
9
+ use Composer \IO \IOInterface ;
10
+ use Composer \Plugin \PluginInterface ;
6
11
use Jenko \Sunscreen \Guesser \AbstractClassGuesser ;
7
12
use Jenko \Sunscreen \Guesser \InterfaceGuesser ;
8
13
use Jenko \Sunscreen \Processor \AdapterProcessor ;
9
14
use Jenko \Sunscreen \Processor \ClassProcessor ;
10
15
use Jenko \Sunscreen \Processor \InterfaceProcessor ;
11
16
12
- class Sunscreen implements SunscreenInterface
17
+ class Sunscreen implements PluginInterface, EventSubscriberInterface, SunscreenInterface
13
18
{
14
19
/**
15
20
* @var string
16
21
*/
17
22
const PRECONFIGURED_DIR = 'preconfigured ' ;
18
23
24
+ /**
25
+ * @var Composer
26
+ */
27
+ protected $ composer ;
28
+
29
+ /**
30
+ * @var IOInterface
31
+ */
32
+ protected $ io ;
33
+
34
+ /**
35
+ * @param Composer $composer
36
+ * @param IOInterface $io
37
+ */
38
+ public function activate (Composer $ composer , IOInterface $ io )
39
+ {
40
+ $ this ->composer = $ composer ;
41
+ $ this ->io = $ io ;
42
+ }
43
+
44
+ /**
45
+ * @return array
46
+ */
47
+ public static function getSubscribedEvents ()
48
+ {
49
+ return [
50
+ PackageEvents::POST_PACKAGE_INSTALL => 'onPostPackageInstall '
51
+ ];
52
+ }
53
+
19
54
/**
20
55
* @param PackageEvent $event
21
56
*
22
57
* @return mixed|void
23
58
*/
24
- public static function postPackageInstall (PackageEvent $ event )
59
+ public function onPostPackageInstall (PackageEvent $ event )
25
60
{
26
- $ mainPackage = $ event -> getComposer () ->getPackage ();
61
+ $ mainPackage = $ this -> composer ->getPackage ();
27
62
$ installedPackage = $ event ->getOperation ()->getPackage ();
28
63
$ extra = $ installedPackage ->getExtra ();
29
- $ io = $ event ->getIO ();
30
64
31
65
if ($ installedPackage ->isDev ()) {
32
- if ($ io ->isVeryVerbose ()) {
33
- $ io ->write ('Sunscreen: Ignoring dev dependency. ' . "\n" );
66
+ if ($ this -> io ->isVeryVerbose ()) {
67
+ $ this -> io ->write ('Sunscreen: Ignoring dev dependency. ' . "\n" );
34
68
}
35
69
return ;
36
70
}
37
71
38
- $ vendorDir = $ event -> getComposer () ->getConfig ()->get ('vendor-dir ' );
72
+ $ vendorDir = $ this -> composer ->getConfig ()->get ('vendor-dir ' );
39
73
$ baseDir = $ vendorDir . Util::DS . '.. ' ;
40
74
41
75
$ mainNamespace = Util::extractNamespaceFromPackage ($ mainPackage );
42
76
$ src = Util::extractSourceDirectoryFromPackage ($ mainPackage );
43
77
if (empty ($ mainNamespace )) {
44
- $ io ->writeError ('Sunscreen: Main Namespace not found. ' . "\n" );
78
+ $ this -> io ->writeError ('Sunscreen: Main Namespace not found. ' . "\n" );
45
79
return ;
46
80
}
47
81
48
82
if (isset ($ extra ['sunscreen ' ])) {
49
- $ interfaces = self :: configuredInterfaces ($ extra ['sunscreen ' ]);
50
- $ classes = self :: configuredClasses ($ extra ['sunscreen ' ]);
51
- } elseif ($ preconfiguredExtra = self :: findPreconfiguredExtra ($ installedPackage ->getName ())) {
52
- $ interfaces = self :: configuredInterfaces ($ preconfiguredExtra ['sunscreen ' ]);
53
- $ classes = self :: configuredClasses ($ preconfiguredExtra ['sunscreen ' ]);
83
+ $ interfaces = $ this -> configuredInterfaces ($ extra ['sunscreen ' ]);
84
+ $ classes = $ this -> configuredClasses ($ extra ['sunscreen ' ]);
85
+ } elseif ($ preconfiguredExtra = $ this -> findPreconfiguredExtra ($ installedPackage ->getName ())) {
86
+ $ interfaces = $ this -> configuredInterfaces ($ preconfiguredExtra ['sunscreen ' ]);
87
+ $ classes = $ this -> configuredClasses ($ preconfiguredExtra ['sunscreen ' ]);
54
88
} else {
55
89
$ interfaceGuesser = new InterfaceGuesser ($ vendorDir );
56
90
$ interfaces = $ interfaceGuesser ->guess ($ installedPackage );
@@ -59,26 +93,26 @@ public static function postPackageInstall(PackageEvent $event)
59
93
}
60
94
61
95
if (empty ($ interfaces ) && empty ($ classes )) {
62
- if ($ io ->isVerbose ()) {
63
- $ io ->write ('Sunscreen: No interfaces or classes could be found. ' . "\n" );
96
+ if ($ this -> io ->isVerbose ()) {
97
+ $ this -> io ->write ('Sunscreen: No interfaces or classes could be found. ' . "\n" );
64
98
}
65
99
return ;
66
100
}
67
101
68
102
if (!empty ($ interfaces )) {
69
- self :: processInterfaces ($ interfaces , $ mainNamespace , $ baseDir , $ src, $ io );
103
+ $ this -> processInterfaces ($ interfaces , $ mainNamespace , $ baseDir , $ src );
70
104
}
71
105
72
106
if (!empty ($ classes )) {
73
- self :: processClasses ($ classes , $ mainNamespace , $ baseDir , $ src, $ io );
107
+ $ this -> processClasses ($ classes , $ mainNamespace , $ baseDir , $ src );
74
108
}
75
109
}
76
110
77
111
/**
78
112
* @param $sunscreenConfig
79
113
* @return array ['FQN']
80
114
*/
81
- private static function configuredInterfaces ($ sunscreenConfig )
115
+ private function configuredInterfaces ($ sunscreenConfig )
82
116
{
83
117
if (isset ($ sunscreenConfig ['interfaces ' ])) {
84
118
return $ sunscreenConfig ['interfaces ' ];
@@ -91,7 +125,7 @@ private static function configuredInterfaces($sunscreenConfig)
91
125
* @param $sunscreenConfig
92
126
* @return array ['FQN']
93
127
*/
94
- private static function configuredClasses ($ sunscreenConfig )
128
+ private function configuredClasses ($ sunscreenConfig )
95
129
{
96
130
if (isset ($ sunscreenConfig ['classes ' ])) {
97
131
return $ sunscreenConfig ['classes ' ];
@@ -105,23 +139,22 @@ private static function configuredClasses($sunscreenConfig)
105
139
* @param string $mainNamespace
106
140
* @param string $baseDir
107
141
* @param string $src
108
- * @param IO $io
109
142
*/
110
- private static function processInterfaces (array $ interfaces , $ mainNamespace , $ baseDir , $ src, $ io )
143
+ private function processInterfaces (array $ interfaces , $ mainNamespace , $ baseDir , $ src )
111
144
{
112
145
foreach ($ interfaces as $ interface ) {
113
146
$ interfaceProcessor = new InterfaceProcessor ($ interface , $ mainNamespace , $ baseDir . Util::DS . $ src );
114
147
$ interfaceProcessor ->process ();
115
148
116
- if ($ io ->isVeryVerbose ()) {
117
- $ io ->write ('Sunscreen: Interface created. ' . "\n" );
149
+ if ($ this -> io ->isVeryVerbose ()) {
150
+ $ this -> io ->write ('Sunscreen: Interface created. ' . "\n" );
118
151
}
119
152
120
153
$ adapterProcessor = new AdapterProcessor ($ interface , $ mainNamespace , $ baseDir . Util::DS . $ src );
121
154
$ adapterProcessor ->process ();
122
155
123
- if ($ io ->isVeryVerbose ()) {
124
- $ io ->write ('Sunscreen: Adapter created. ' . "\n" );
156
+ if ($ this -> io ->isVeryVerbose ()) {
157
+ $ this -> io ->write ('Sunscreen: Adapter created. ' . "\n" );
125
158
}
126
159
}
127
160
}
@@ -131,23 +164,22 @@ private static function processInterfaces(array $interfaces, $mainNamespace, $ba
131
164
* @param string $mainNamespace
132
165
* @param string $baseDir
133
166
* @param string $src
134
- * @param IO $io
135
167
*/
136
- private static function processClasses (array $ classes , $ mainNamespace , $ baseDir , $ src, $ io )
168
+ private function processClasses (array $ classes , $ mainNamespace , $ baseDir , $ src )
137
169
{
138
170
foreach ($ classes as $ class ) {
139
171
$ classProcessor = new ClassProcessor ($ class , $ mainNamespace , $ baseDir . Util::DS . $ src );
140
172
$ classProcessor ->process ();
141
173
142
- if ($ io ->isVeryVerbose ()) {
143
- $ io ->write ('Sunscreen: Class created. ' . "\n" );
174
+ if ($ this -> io ->isVeryVerbose ()) {
175
+ $ this -> io ->write ('Sunscreen: Class created. ' . "\n" );
144
176
}
145
177
146
178
$ adapterProcessor = new AdapterProcessor ($ class , $ mainNamespace , $ baseDir . Util::DS . $ src );
147
179
$ adapterProcessor ->process ();
148
180
149
- if ($ io ->isVeryVerbose ()) {
150
- $ io ->write ('Sunscreen: Adapter created. ' . "\n" );
181
+ if ($ this -> io ->isVeryVerbose ()) {
182
+ $ this -> io ->write ('Sunscreen: Adapter created. ' . "\n" );
151
183
}
152
184
}
153
185
}
@@ -156,7 +188,7 @@ private static function processClasses(array $classes, $mainNamespace, $baseDir,
156
188
* @param string $packageName
157
189
* @return null
158
190
*/
159
- private static function findPreconfiguredExtra ($ packageName )
191
+ private function findPreconfiguredExtra ($ packageName )
160
192
{
161
193
list ($ dirName , $ filename ) = explode ('/ ' , $ packageName );
162
194
$ filePath = __DIR__ . Util::DS . '.. ' . Util::DS . self ::PRECONFIGURED_DIR . Util::DS . $ dirName . Util::DS . $ filename . '.json ' ;
0 commit comments