Skip to content

Commit

Permalink
feat: option autoMinify
Browse files Browse the repository at this point in the history
  • Loading branch information
ddevsr committed Sep 25, 2023
1 parent 0dbcf01 commit 1383a35
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 70 deletions.
2 changes: 1 addition & 1 deletion phpunit.xml.dist
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@
<arguments>
<array>
<element key="timeLimit">
<double>0.20</double>
<double>0.15</double>
</element>
<element key="reportable">
<integer>30</integer>
Expand Down
43 changes: 7 additions & 36 deletions src/Minifyku.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ public function load(string $filename)
throw MinifykuException::forWrongFileExtension($ext);
}

$this->autoDeployCheckFile($ext, $filename);
if ($this->config->autoMinify) {
$this->autoDeployCheckFile($ext);
}

// load versions
$versions = $this->getVersion($this->config->dirVersion);
Expand Down Expand Up @@ -127,44 +129,13 @@ public function getError(): string
}

/**
* Auto deploy check for CSS files
* Auto deploy
*
* @param string $fileType File type [css, js]
* @param string $filename Filename
* @param string $fileType File type (css/js)
*/
protected function autoDeployCheckFile(string $fileType, string $filename): bool
protected function autoDeployCheckFile(string $fileType = 'all'): bool
{
$dir = 'dir' . strtoupper($fileType);
$dirMin = 'dirMin' . ucfirst(strtolower($fileType));

if ($this->config->{$dirMin} === null) {
$dirMin = $dir;
}

$assets = [$filename => $this->config->{$fileType}[$filename]];
$filePath = $this->config->{$dirMin} . '/' . $filename;

// if file is not deployed
if (! file_exists($filePath)) {
$this->deployFiles($fileType, $assets, $this->config->{$dir}, $this->config->{$dirMin});

return true;
}

// get last deploy time
$lastDeployTime = filemtime($filePath);

// loop though the files and check last update time
foreach ($assets[$filename] as $file) {
$currentFileTime = filemtime($this->config->{$dir} . '/' . $file);
if ($currentFileTime > $lastDeployTime) {
$this->deployFiles($fileType, $assets, $this->config->{$dir}, $this->config->{$dirMin});

return true;
}
}

return false;
return $this->deploy($fileType);
}

/**
Expand Down
103 changes: 70 additions & 33 deletions tests/unit/MinifykuTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,20 +51,31 @@ protected function setUp(): void
'bootstrap.css', 'font-awesome.css', 'main.css',
],
];
$this->config->autoMinify = false;
}

if (file_exists($this->config->dirJS . '/new.js')) {
unlink($this->config->dirJS . '/new.js');
}
protected function tearDown(): void
{
parent::tearDown();

if (file_exists($this->config->dirCSS . '/new.css')) {
unlink($this->config->dirCSS . '/new.css');
}
$this->config = new MinifykuConfig();

/*
if (file_exists($this->config->dirVersion . '/versions.js')) {
unlink($this->config->dirVersion . '/versions.js');
}
*/
$this->config->dirJS = SUPPORTPATH . 'assets/js';
$this->config->dirCSS = SUPPORTPATH . 'assets/css';
$this->config->dirMinJs = SUPPORTPATH . 'assets/js';
$this->config->dirMinCss = SUPPORTPATH . 'assets/css';
$this->config->dirVersion = SUPPORTPATH . 'assets';
$this->config->js = [
'all.min.js' => [
'bootstrap.js', 'jquery.js', 'main.js',
],
];
$this->config->css = [
'all.min.css' => [
'bootstrap.css', 'font-awesome.css', 'main.css',
],
];
$this->config->autoMinify = false;
}

public function testConfig()
Expand Down Expand Up @@ -145,28 +156,6 @@ public function testDeployAll()
$this->assertFileExists($this->config->dirCSS . DIRECTORY_SEPARATOR . array_key_first($this->config->css));
}

public function testLoadJs()
{
$this->minifyku = new Minifyku($this->config);

$this->minifyku->deploy('js');
$result = $this->minifyku->load('all.min.js');

$this->assertStringContainsString('<script defer type="text/javascript"', $result);
$this->assertStringContainsString('assets/js/all.min.js?v=' . $this->ver['js'], $result);
}

public function testLoadCss()
{
$this->minifyku = new Minifyku($this->config);

$this->minifyku->deploy('css');
$result = $this->minifyku->load('all.min.css');

$this->assertStringContainsString('<link rel="stylesheet"', $result);
$this->assertStringContainsString('assets/css/all.min.css?v=' . $this->ver['css'], $result);
}

public function testDeployJsWithDirMinJs()
{
if (file_exists($this->config->dirMinJs . '/all.min.js')) {
Expand Down Expand Up @@ -306,4 +295,52 @@ public function testLoadCssWithBaseCssUrlAndDirMinCss()
$this->assertStringContainsString('<link rel="stylesheet"', $result);
$this->assertStringContainsString('http://css.localhost/all.min.css?v=' . $this->ver['css'], $result);
}

public function testLoadJs()
{
// Set automatically minify
$this->config->autoMinify = true;

$this->minifyku = new Minifyku($this->config);

$result = $this->minifyku->load('all.min.js');

$this->assertStringContainsString('<script defer type="text/javascript"', $result);
$this->assertStringContainsString('assets/js/all.min.js?v=' . $this->ver['js'], $result);
}

public function testLoadCss()
{
// Set automatically minify
$this->config->autoMinify = true;

$this->minifyku = new Minifyku($this->config);

$result = $this->minifyku->load('all.min.css');

$this->assertStringContainsString('<link rel="stylesheet"', $result);
$this->assertStringContainsString('assets/css/all.min.css?v=' . $this->ver['css'], $result);
}

public function testLoadJsWithoutAutoMinify()
{
$this->minifyku = new Minifyku($this->config);

$this->minifyku->deploy('js');
$result = $this->minifyku->load('all.min.js');

$this->assertStringContainsString('<script defer type="text/javascript"', $result);
$this->assertStringContainsString('assets/js/all.min.js?v=' . $this->ver['js'], $result);
}

public function testLoadCssWithoutAutoMinify()
{
$this->minifyku = new Minifyku($this->config);

$this->minifyku->deploy('css');
$result = $this->minifyku->load('all.min.css');

$this->assertStringContainsString('<link rel="stylesheet"', $result);
$this->assertStringContainsString('assets/css/all.min.css?v=' . $this->ver['css'], $result);
}
}

0 comments on commit 1383a35

Please sign in to comment.