Skip to content

Commit aa3a2a8

Browse files
rbaylissjmolivas
authored andcommitted
Use composer API instead of checking explicit paths (#3)
* Use composer to find installed packages, and determine the directory to write config and service files to * Add an explicit require_once for ExtenderManager * Move require for ExtenderManager * Fix variable name * Fix CS * Fix duplicate call to addConfigFile
1 parent df23967 commit aa3a2a8

File tree

1 file changed

+28
-10
lines changed

1 file changed

+28
-10
lines changed

src/Extender.php

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
use Composer\EventDispatcher\EventSubscriberInterface;
1111
use Symfony\Component\Yaml\Yaml;
1212

13+
// Explicitly require ExtenderManager here.
14+
// When this package is uninstalled, ExtenderManager needs to be available any
15+
// time this class is available.
16+
require_once 'ExtenderManager.php';
17+
1318
class Extender implements PluginInterface, EventSubscriberInterface
1419
{
1520
/**
@@ -53,16 +58,29 @@ public static function getSubscribedEvents()
5358
public function processPackages(PackageEvent $event)
5459
{
5560
$extenderManager = new ExtenderManager();
56-
$directory = realpath(__DIR__.'/../../../../');
57-
$extenderManager->processProjectPackages($directory);
58-
59-
if (is_dir($directory.'/vendor/drupal/console')) {
60-
$directory = $directory.'/vendor/drupal/console';
61-
} else {
62-
$configFile = $directory.'/console.config.yml';
63-
$servicesFile = $directory.'/console.services.yml';
64-
$extenderManager->addConfigFile($configFile);
65-
$extenderManager->addServicesFile($servicesFile);
61+
62+
$composer = $event->getComposer();
63+
$installationManager = $composer->getInstallationManager();
64+
$repositoryManager = $composer->getRepositoryManager();
65+
$localRepository = $repositoryManager->getLocalRepository();
66+
67+
foreach ($localRepository->getPackages() as $package) {
68+
if ($installationManager->isPackageInstalled($localRepository, $package)) {
69+
if ($package->getType() === 'drupal-console-library') {
70+
$extenderManager->addServicesFile($installationManager->getInstallPath($package) . '/console.services.yml');
71+
$extenderManager->addConfigFile($installationManager->getInstallPath($package) . '/console.config.yml');
72+
}
73+
}
74+
}
75+
76+
if ($consolePackage = $localRepository->findPackage('drupal/console', '*')) {
77+
if ($localRepository->hasPackage($consolePackage)) {
78+
$directory = $installationManager->getInstallPath($consolePackage);
79+
}
80+
}
81+
if (empty($directory)) {
82+
// cwd should be the project root. This is the same logic Symfony uses.
83+
$directory = getcwd();
6684
}
6785

6886
$configFile = $directory . '/extend.console.config.yml';

0 commit comments

Comments
 (0)