From 596dff2a3ac1a3465c49056e5e9a896068dc50e2 Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Thu, 1 Nov 2018 10:59:31 +0100
Subject: [PATCH] Refactor namespace to extend LakeDrops Composer Components

---
 composer.json   |  2 +-
 src/Handler.php | 89 +++++--------------------------------------------
 src/Plugin.php  | 29 ++++++++--------
 3 files changed, 26 insertions(+), 94 deletions(-)

diff --git a/composer.json b/composer.json
index deb456f..284f023 100644
--- a/composer.json
+++ b/composer.json
@@ -36,7 +36,7 @@
         "drupal/coder": "^8.2",
         "lakedrops/ahoy": "^1.0.0",
         "lakedrops/behat4drupal": "^1.0.0",
-        "lakedrops/composer-scripts": "^1.0.0",
+        "lakedrops/composer-scripts": "^1.1.0",
         "lakedrops/docker4drupal": "^1.0.0",
         "lakedrops/dorgflow": "^1.0.0",
         "mikey179/vfsStream": "^1.6",
diff --git a/src/Handler.php b/src/Handler.php
index df5e598..d3f9e54 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -5,6 +5,8 @@ namespace LakeDrops\Drupal8ScaffoldDeveloper;
 use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Script\Event;
+use LakeDrops\Component\Composer\BaseHandler;
+use LakeDrops\Component\Dotenv\Dotenv;
 use LakeDrops\Docker4Drupal\Handler as D4D;
 use Symfony\Component\Filesystem\Filesystem;
 
@@ -13,76 +15,17 @@ use Symfony\Component\Filesystem\Filesystem;
  *
  * @package LakeDrops\Drupal8ScaffoldDeveloper
  */
-class Handler {
-
-  /**
-   * The composer object running this session.
-   *
-   * @var \Composer\Composer
-   */
-  protected $composer;
-
-  /**
-   * The input-output object for the composer session.
-   *
-   * @var \Composer\IO\IOInterface
-   */
-  protected $io;
-
-  /**
-   * The Drupal core package.
-   *
-   * @var \Composer\Package\PackageInterface
-   */
-  protected $drupalCorePackage;
-
-  /**
-   * Handler constructor.
-   *
-   * @param \Composer\Composer $composer
-   *   The composer object.
-   * @param \Composer\IO\IOInterface $io
-   *   The input-output object.
-   */
-  public function __construct(Composer $composer, IOInterface $io) {
-    $this->composer = $composer;
-    $this->io = $io;
-  }
-
-  /**
-   * Get the Drupal Core package.
-   *
-   * Look up the Drupal core package object, or return it from where we cached
-   * it in the $drupalCorePackage field.
-   *
-   * @return \Composer\Package\PackageInterface
-   *   The Drupal Core package.
-   */
-  protected function getDrupalCorePackage() {
-    if (!isset($this->drupalCorePackage)) {
-      $this->drupalCorePackage = $this->getPackage('drupal/core');
-    }
-    return $this->drupalCorePackage;
-  }
-
-  /**
-   * Retrieve a package from the current composer process.
-   *
-   * @param string $name
-   *   Name of the package to get from the current composer installation.
-   *
-   * @return \Composer\Package\PackageInterface
-   *   The package.
-   */
-  protected function getPackage($name) {
-    return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*');
-  }
+class Handler extends BaseHandler {
 
   /**
    * Post project create event to execute the scaffolding.
    *
    * @param \Composer\Script\Event $event
    *   The event that triggered the plugin.
+   *
+   * @throws \Twig_Error_Loader
+   * @throws \Twig_Error_Runtime
+   * @throws \Twig_Error_Syntax
    */
   public function setupLakeDropsProject(Event $event) {
 
@@ -251,22 +194,8 @@ class Handler {
         'allowedOrigins' => '*',
       ],
     ];
-    return $options;
-  }
-
-  /**
-   * Wrapper for git command in the root directory.
-   *
-   * @param string $command
-   *   Git command name, arguments and/or options.
-   *
-   * @throws \Exception
-   */
-  protected function git($command) {
-    passthru(escapeshellcmd('git -c "user.email=d8-project@lakedrops.com" ' . $command), $exit_code);
-    if ($exit_code !== 0) {
-      throw new \Exception('Git returned a non-zero exit code');
-    }
+    $env = new Dotenv('lakedrops', $this->io);
+    return $env->replaceEnvironmentVariables($options);
   }
 
 }
diff --git a/src/Plugin.php b/src/Plugin.php
index 5d9b076..3de10c6 100644
--- a/src/Plugin.php
+++ b/src/Plugin.php
@@ -3,24 +3,16 @@
 namespace LakeDrops\Drupal8ScaffoldDeveloper;
 
 use Composer\Composer;
-use Composer\EventDispatcher\EventSubscriberInterface;
 use Composer\IO\IOInterface;
-use Composer\Plugin\PluginInterface;
 use Composer\Script\Event;
 use Composer\Script\ScriptEvents;
 use DrupalComposer\DrupalScaffold\Handler as DrupalScaffoldHandler;
+use LakeDrops\Component\Composer\BasePlugin;
 
 /**
  * Composer plugin for handling drupal scaffold.
  */
-class Plugin implements PluginInterface, EventSubscriberInterface {
-
-  /**
-   * The handler object for events.
-   *
-   * @var \LakeDrops\Drupal8ScaffoldDeveloper\Handler
-   */
-  protected $handler;
+class Plugin extends BasePlugin {
 
   /**
    * The scaffold handler object for events.
@@ -33,18 +25,25 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
    * {@inheritdoc}
    */
   public function activate(Composer $composer, IOInterface $io) {
-    $this->handler = new Handler($composer, $io);
+    parent::activate($composer, $io);
     $this->scaffoldHandler = new DrupalScaffoldHandler($composer, $io);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getHandlerClass() {
+    return Handler::class;
+  }
+
   /**
    * {@inheritdoc}
    */
   public static function getSubscribedEvents() {
-    return array(
+    return [
       ScriptEvents::POST_CREATE_PROJECT_CMD => 'postCreateProject',
       ScriptEvents::POST_UPDATE_CMD => 'postUpdate',
-    );
+    ];
   }
 
   /**
@@ -73,6 +72,10 @@ class Plugin implements PluginInterface, EventSubscriberInterface {
    *
    * @param \Composer\Script\Event $event
    *   The event that triggered the plugin.
+   *
+   * @throws \Twig_Error_Loader
+   * @throws \Twig_Error_Runtime
+   * @throws \Twig_Error_Syntax
    */
   public static function scaffold(Event $event) {
     $handler = new Handler($event->getComposer(), $event->getIO());
-- 
GitLab