From b8e490f37773ce64738d391e31ba83f082eb815e Mon Sep 17 00:00:00 2001
From: Sam Poyigi <6567634+sampoyigi@users.noreply.github.com>
Date: Thu, 17 Feb 2022 07:59:23 +0000
Subject: [PATCH] Add TastyIgniter module support (#503)
* Add module support
Signed-off-by: Sam Poyigi <6567634+sampoyigi@users.noreply.github.com>
* Add module tests and update readme
Signed-off-by: Sam Poyigi <6567634+sampoyigi@users.noreply.github.com>
---
README.md | 2 +-
.../Installers/TastyIgniterInstaller.php | 68 +++++++++++++++----
.../Test/TastyIgniterInstallerTest.php | 8 ++-
3 files changed, 62 insertions(+), 16 deletions(-)
diff --git a/README.md b/README.md
index c16dd4b7..b4c78e65 100644
--- a/README.md
+++ b/README.md
@@ -117,7 +117,7 @@ all vendor code in the vendor directory, and not requiring custom installer code
| SyDES | `sydes-module`
`sydes-theme`
| Sylius | `sylius-theme`
| TAO | `tao-extension`
-| TastyIgniter | **`tastyigniter-extension`
`tastyigniter-theme`**
+| TastyIgniter | **`tastyigniter-module`
`tastyigniter-extension`
`tastyigniter-theme`**
| Tusk | `tusk-task`
`tusk-command`
`tusk-asset`
| UserFrosting | `userfrosting-sprinkle`
| Vanilla | `vanilla-plugin`
`vanilla-theme`
diff --git a/src/Composer/Installers/TastyIgniterInstaller.php b/src/Composer/Installers/TastyIgniterInstaller.php
index f3a237d4..ec3e69d5 100644
--- a/src/Composer/Installers/TastyIgniterInstaller.php
+++ b/src/Composer/Installers/TastyIgniterInstaller.php
@@ -5,10 +5,11 @@
class TastyIgniterInstaller extends BaseInstaller
{
/** @var array */
- protected $locations = array(
+ protected $locations = [
+ 'module' => 'app/{$name}/',
'extension' => 'extensions/{$vendor}/{$name}/',
'theme' => 'themes/{$name}/',
- );
+ ];
/**
* Format package name.
@@ -21,25 +22,64 @@ public function inflectPackageVars(array $vars): array
{
$extra = $this->composer->getPackage()->getExtra();
+ if ($vars['type'] === 'tastyigniter-module') {
+ return $this->inflectModuleVars($vars);
+ }
+
if ($vars['type'] === 'tastyigniter-extension') {
- if (!empty($extra['tastyigniter-extension']['code'])) {
- $parts = explode('.', $extra['tastyigniter-extension']['code']);
- $vars['vendor'] = $parts[0];
- $vars['name'] = $parts[1] ?? '';
- }
-
- $vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']);
- $vars['name'] = preg_replace('/^ti-ext-/', '', (string)$vars['name']);
+ return $this->inflectExtensionVars($vars, $extra);
}
if ($vars['type'] === 'tastyigniter-theme') {
- if (!empty($extra['tastyigniter-theme']['code'])) {
- $vars['name'] = $extra['tastyigniter-theme']['code'];
- }
+ return $this->inflectThemeVars($vars, $extra);
+ }
+
+ return $vars;
+ }
+
+ /**
+ * @param array $vars
+ * @return array
+ */
+ protected function inflectModuleVars(array $vars): array
+ {
+ $vars['name'] = $this->pregReplace('/^ti-module-/', '', $vars['name']);
+
+ return $vars;
+ }
- $vars['name'] = preg_replace('/^ti-theme-/', '', $vars['name']);
+ /**
+ * @param array $vars
+ * @param array $extra
+ * @return array
+ */
+ protected function inflectExtensionVars(array $vars, array $extra): array
+ {
+ if (!empty($extra['tastyigniter-extension']['code'])) {
+ $parts = explode('.', $extra['tastyigniter-extension']['code']);
+ $vars['vendor'] = (string)$parts[0];
+ $vars['name'] = (string)($parts[1] ?? '');
}
+ $vars['vendor'] = $this->pregReplace('/[^a-z0-9_]/i', '', $vars['vendor']);
+ $vars['name'] = $this->pregReplace('/^ti-ext-/', '', $vars['name']);
+
+ return $vars;
+ }
+
+ /**
+ * @param array $vars
+ * @param array $extra
+ * @return array
+ */
+ protected function inflectThemeVars(array $vars, array $extra): array
+ {
+ if (!empty($extra['tastyigniter-theme']['code'])) {
+ $vars['name'] = $extra['tastyigniter-theme']['code'];
+ }
+
+ $vars['name'] = $this->pregReplace('/^ti-theme-/', '', $vars['name']);
+
return $vars;
}
}
diff --git a/tests/Composer/Installers/Test/TastyIgniterInstallerTest.php b/tests/Composer/Installers/Test/TastyIgniterInstallerTest.php
index 5ced307a..06d56444 100644
--- a/tests/Composer/Installers/Test/TastyIgniterInstallerTest.php
+++ b/tests/Composer/Installers/Test/TastyIgniterInstallerTest.php
@@ -2,7 +2,6 @@
namespace Composer\Installers\Test;
-use Composer\Composer;
use Composer\Installers\TastyIgniterInstaller;
use Composer\Package\Package;
@@ -82,6 +81,13 @@ public function packageNameInflectionProvider(): array
'acme',
'someothertheme',
),
+ array(
+ 'tastyigniter-module',
+ 'tastyigniter',
+ 'ti-module-system',
+ 'tastyigniter',
+ 'system',
+ ),
);
}
}