diff --git a/composer.json b/composer.json index a5e27970282b9e24f1a96d0df2b87cff60f3cbea..7d7e72e13da7fe99241569092596778f3951b1b6 100644 --- a/composer.json +++ b/composer.json @@ -30,5 +30,10 @@ }, "extra": { "class": "LakeDrops\\DrupalSpoons\\Plugin" + }, + "scripts": { + "post-package-install": [ + "LakeDrops\\DrupalSpoons\\Plugin::postPackageInstall" + ] } } diff --git a/src/CommandProvider.php b/src/CommandProvider.php index bb8fda89bee1aeec3dc8380054e974494272badd..a6d42b4225336590cac0795c829597ea295e11b5 100644 --- a/src/CommandProvider.php +++ b/src/CommandProvider.php @@ -14,7 +14,8 @@ class CommandProvider implements CommandProviderCapability { */ public function getCommands(): array { return [ - new DrupalSpoonsCommand(), + new PrepareComposerCommand(), + new PrepareProjectCommand(), ]; } } diff --git a/src/Handler.php b/src/Handler.php index 06a6f2ac8bfeb4d616a0f7db981cda0f1aba50a2..e49c1e971eabdbabee1616020a591def2be1d6e6 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -50,7 +50,7 @@ class Handler { $projectRoot = getcwd(); // Append DrupalSpoon related components to composer.json. - $jsonFile = new JsonFile($projectRoot . '/composer.json.disabled'); + $jsonFile = new JsonFile($projectRoot . '/composer.disabled.json'); $content = []; if ($jsonFile->exists()) { $content = $jsonFile->read(); @@ -58,7 +58,7 @@ class Handler { $content = array_merge_recursive($content, $options); $jsonFile->write($content); $fs->remove($projectRoot . '/composer.json'); - $fs->rename($projectRoot . '/composer.json.disabled', $projectRoot . '/composer.json'); + $fs->rename($projectRoot . '/composer.disabled.json', $projectRoot . '/composer.json'); } /** diff --git a/src/Plugin.php b/src/Plugin.php index 24979bf97eefb05e3f23f0200f86bc0f0402ab3f..32fd108950cdd5f45db85aa7fc0bbdd45decc873 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -4,6 +4,7 @@ namespace LakeDrops\DrupalSpoons; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; +use Composer\Installer\PackageEvent; use Composer\IO\IOInterface; use Composer\Plugin\Capable; use Composer\Plugin\PluginInterface; @@ -43,19 +44,16 @@ class Plugin implements PluginInterface, EventSubscriberInterface, Capable { */ public static function getSubscribedEvents(): array { return [ - ScriptEvents::POST_INSTALL_CMD => 'configureComposerJson', ScriptEvents::POST_UPDATE_CMD => 'configureProject', ]; } /** - * Post install command event callback. - * - * @param \Composer\Script\Event $event - * The event that triggered the plugin. + * @param \Composer\Installer\PackageEvent $event */ - public function configureComposerJson(Event $event) { - $this->handler->configureComposerJson(); + public static function postPackageInstall(PackageEvent $event) { + $handler = new Handler($event->getComposer(), $event->getIO()); + $handler->configureComposerJson(); } /** diff --git a/src/PrepareComposerCommand.php b/src/PrepareComposerCommand.php new file mode 100644 index 0000000000000000000000000000000000000000..c8594aef2f2f46fb212391d0c79b6b088a53b873 --- /dev/null +++ b/src/PrepareComposerCommand.php @@ -0,0 +1,27 @@ +<?php + +namespace LakeDrops\DrupalSpoons; + +use Composer\Command\BaseCommand; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class PrepareComposerCommand extends BaseCommand { + + /** + * {@inheritdoc} + */ + protected function configure() { + $this->setName('drupalspoons:prepare'); + $this->setDescription('Prepare composer.json for DrupalSpoons.'); + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) { + $handler = new Handler($this->getComposer(), $this->getIO()); + $handler->configureComposerJson(); + } + +} diff --git a/src/DrupalSpoonsCommand.php b/src/PrepareProjectCommand.php similarity index 73% rename from src/DrupalSpoonsCommand.php rename to src/PrepareProjectCommand.php index 0d54b680b70264c0969533cd75cf747d3f69043e..222e152db49c9045f1f33eea2ab3a55b0e2f609e 100644 --- a/src/DrupalSpoonsCommand.php +++ b/src/PrepareProjectCommand.php @@ -6,14 +6,14 @@ use Composer\Command\BaseCommand; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class DrupalSpoonsCommand extends BaseCommand { +class PrepareProjectCommand extends BaseCommand { /** * {@inheritdoc} */ protected function configure() { - $this->setName('lakedrops:drupalspoons'); - $this->setDescription('Prepare Drupal project for CI and/or local tests.'); + $this->setName('drupalspoons:configure'); + $this->setDescription('Configure project for DrupalSpoons.'); } /**