Skip to content

Commit aaea2ec

Browse files
committed
Add installers for Winter CMS (https://github.com/wintercms/)
1 parent 98b34f8 commit aaea2ec

File tree

4 files changed

+139
-1
lines changed

4 files changed

+139
-1
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ is not needed to install packages with these frameworks:
123123
| Vanilla | `vanilla-plugin`<br>`vanilla-theme`
124124
| Vgmcp | `vgmcp-bundle`<br>`vgmcp-theme`
125125
| WHMCS | `whmcs-addons`<br>`whmcs-fraud`<br>`whmcs-gateways`<br>`whmcs-notifications`<br>`whmcs-registrars`<br>`whmcs-reports`<br>`whmcs-security`<br>`whmcs-servers`<br>`whmcs-social`<br>`whmcs-support`<br>`whmcs-templates`<br>`whmcs-includes`
126+
| Winter CMS | **`winter-module`<br>`winter-plugin`<br>`winter-theme`**
126127
| Wolf CMS | `wolfcms-plugin`
127128
| WordPress | <b>`wordpress-plugin`<br>`wordpress-theme`</b><br>`wordpress-muplugin`<br>`wordpress-dropin`
128129
| YAWIK | `yawik-module`

src/Composer/Installers/Installer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class Installer extends LibraryInstaller
7878
'october' => 'OctoberInstaller',
7979
'ontowiki' => 'OntoWikiInstaller',
8080
'oxid' => 'OxidInstaller',
81-
'osclass' => 'OsclassInstaller',
81+
'osclass' => 'OsclassInstaller',
8282
'pxcms' => 'PxcmsInstaller',
8383
'phpbb' => 'PhpBBInstaller',
8484
'pimcore' => 'PimcoreInstaller',
@@ -110,6 +110,7 @@ class Installer extends LibraryInstaller
110110
'userfrosting' => 'UserFrostingInstaller',
111111
'vanilla' => 'VanillaInstaller',
112112
'whmcs' => 'WHMCSInstaller',
113+
'winter' => 'WinterInstaller',
113114
'wolfcms' => 'WolfCMSInstaller',
114115
'wordpress' => 'WordPressInstaller',
115116
'yawik' => 'YawikInstaller',
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<?php
2+
namespace Composer\Installers;
3+
4+
class WinterInstaller extends BaseInstaller
5+
{
6+
protected $locations = array(
7+
'module' => 'modules/{$name}/',
8+
'plugin' => 'plugins/{$vendor}/{$name}/',
9+
'theme' => 'themes/{$name}/'
10+
);
11+
12+
/**
13+
* Format package name.
14+
*
15+
* For package type winter-plugin, cut off a trailing '-plugin' if present.
16+
*
17+
* For package type winter-theme, cut off a trailing '-theme' if present.
18+
*
19+
*/
20+
public function inflectPackageVars($vars)
21+
{
22+
if ($vars['type'] === 'winter-plugin') {
23+
return $this->inflectPluginVars($vars);
24+
}
25+
26+
if ($vars['type'] === 'winter-theme') {
27+
return $this->inflectThemeVars($vars);
28+
}
29+
30+
return $vars;
31+
}
32+
33+
protected function inflectPluginVars($vars)
34+
{
35+
$vars['name'] = preg_replace('/^oc-|-plugin$/', '', $vars['name']);
36+
$vars['vendor'] = preg_replace('/[^a-z0-9_]/i', '', $vars['vendor']);
37+
38+
return $vars;
39+
}
40+
41+
protected function inflectThemeVars($vars)
42+
{
43+
$vars['name'] = preg_replace('/^oc-|-theme$/', '', $vars['name']);
44+
45+
return $vars;
46+
}
47+
}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
<?php
2+
namespace Composer\Installers\Test;
3+
4+
use Composer\Installers\WinterInstaller;
5+
use Composer\Package\Package;
6+
use Composer\Composer;
7+
use PHPUnit\Framework\TestCase as BaseTestCase;
8+
9+
class WinterInstallerTest extends BaseTestCase
10+
{
11+
/**
12+
* @var WinterInstaller
13+
*/
14+
private $installer;
15+
16+
public function setUp()
17+
{
18+
$this->installer = new WinterInstaller(
19+
new Package('NyanCat', '4.2', '4.2'),
20+
new Composer()
21+
);
22+
}
23+
24+
/**
25+
* @dataProvider packageNameInflectionProvider
26+
*/
27+
public function testInflectPackageVars($type, $vendor, $name, $expectedVendor, $expectedName)
28+
{
29+
$this->assertEquals(
30+
$this->installer->inflectPackageVars(array(
31+
'vendor' => $vendor,
32+
'name' => $name,
33+
'type' => $type
34+
)),
35+
array('vendor' => $expectedVendor, 'name' => $expectedName, 'type' => $type)
36+
);
37+
}
38+
39+
public function packageNameInflectionProvider()
40+
{
41+
return array(
42+
array(
43+
'winter-plugin',
44+
'acme',
45+
'subpagelist',
46+
'acme',
47+
'subpagelist',
48+
),
49+
array(
50+
'winter-plugin',
51+
'acme',
52+
'subpagelist-plugin',
53+
'acme',
54+
'subpagelist',
55+
),
56+
array(
57+
'winter-plugin',
58+
'acme',
59+
'semanticwinter',
60+
'acme',
61+
'semanticwinter',
62+
),
63+
// tests vendor name containing a hyphen
64+
array(
65+
'winter-plugin',
66+
'foo-bar-co',
67+
'blog',
68+
'foobarco',
69+
'blog'
70+
),
71+
// tests that exactly one '-theme' is cut off
72+
array(
73+
'winter-theme',
74+
'acme',
75+
'some-theme-theme',
76+
'acme',
77+
'some-theme',
78+
),
79+
// tests that names without '-theme' suffix stay valid
80+
array(
81+
'winter-theme',
82+
'acme',
83+
'someothertheme',
84+
'acme',
85+
'someothertheme',
86+
),
87+
);
88+
}
89+
}

0 commit comments

Comments
 (0)