diff options
author | Sam Light <sam@lightscale.co.uk> | 2025-03-31 22:08:20 +0100 |
---|---|---|
committer | Sam Light <samlight1994@gmail.com> | 2025-03-31 22:08:20 +0100 |
commit | d700b3b5772022902948430d076fc3c0a00f20ef (patch) | |
tree | 781311f48a250474fb8f5a5034370678245bd3cd | |
parent | 41605e2ab4b8de04cd1c05a4cfe95b822ba46ae1 (diff) |
Changes to Assets class manifest function
-rw-r--r-- | src/Assets.php | 49 | ||||
-rw-r--r-- | tests/Feature/AssetsTest.php | 62 |
2 files changed, 85 insertions, 26 deletions
diff --git a/src/Assets.php b/src/Assets.php index a431ffb..352bb2b 100644 --- a/src/Assets.php +++ b/src/Assets.php @@ -2,9 +2,11 @@ namespace Lightscale\LaralightAssets; +use InvalidArgumentException; + class Assets { - private string $defaultManifest; + private ?string $defaultManifest = null; private array $manifests = []; private array $manifestsParsers = []; private array $files = []; @@ -49,9 +51,50 @@ class Assets return $this->getManifests()[$name]; } - public function getDefaultManifest(): Manifest + public function setDefaultManifest(?string $name): void + { + if ($name !== null && ($this->manifests[$name] ?? false) === false) { + throw new InvalidArgumentException( + "No manifest with name {$name} exists" + ); + } + + $this->defaultManifest = $name; + } + + public function getDefaultManifest(): ?Manifest + { + return ( + $this->defaultManifest === null ? + null : + $this->getManifest($this->defaultManifest) + ); + } + + public function getFileManifest(FileString $file): ?Manifest + { + if ($file->manifestName !== null) { + return $this->getManifest($file->manifestName); + } + else { + return $this->getDefaultManifest(); + } + } + + public function queueFile(string $file, string $fileClass, bool $footer): void + { + $file = new FileString($file); + $manifest = $this->getFileManifest($file); + } + + public function queueScript(string $file, bool $footer = true): void + { + $this->queueFile($file, ScriptFile::class, $footer); + } + + public function queueStyle(string $file): void { - return $this->getManifest($this->defaultManifest); + $this->queueFile($file, StyleFile::class, false); } } diff --git a/tests/Feature/AssetsTest.php b/tests/Feature/AssetsTest.php index 7850081..f618d46 100644 --- a/tests/Feature/AssetsTest.php +++ b/tests/Feature/AssetsTest.php @@ -2,6 +2,7 @@ use Lightscale\LaralightAssets\Assets; use Lightscale\LaralightAssets\Manifest; +use Lightscale\LaralightAssets\FileString; describe('instance', function() { it('instantiates', function() { @@ -17,16 +18,14 @@ describe('instance', function() { }); }); -describe('manages manifests', function() { - it('adds manifests', function() { - app(Assets::class)->addManifest( - 'main', - new Manifest( - public_path('dist/manifest.json'), - '/dist', - ), - isDefault: true, - ); +$newManifest = fn() => new Manifest( + public_path('dist/manifest.json'), + '/dist', +); + +describe('manages manifests', function() use ($newManifest) { + it('adds manifests', function() use ($newManifest) { + app(Assets::class)->addManifest('main', $newManifest(), isDefault: true); })->throwsNoExceptions(); it('registers manifests', function() { @@ -46,24 +45,18 @@ describe('manages manifests', function() { ->toContainOnlyInstancesOf(Manifest::class); }); - it('gets manifest', function() { + it('gets manifest', function() use ($newManifest){ $assets = app(Assets::class); - $manifest = new Manifest( - public_path('dist/manifest.json'), - '/dist', - ); + $manifest = $newManifest(); $name = 'main'; $assets->addManifest($name, $manifest, true); expect($assets->getManifest($name))->toBe($manifest); }); - it('gets default manifest', function() { + it('gets default manifest', function() use ($newManifest) { $assets = app(Assets::class); - $manifest = new Manifest( - public_path('dist/manifest.json'), - '/dist', - ); + $manifest = $newManifest(); $name = 'main'; $assets->addManifest($name, $manifest, true); @@ -75,8 +68,31 @@ describe('manages manifests', function() { $assets->getManifest('main'); })->throws(Exception::class); - it('throws exception without default', function() { + it('has null default manifest') + ->expect(fn() => app(Assets::class)->getDefaultManifest()) + ->toBeNull(); + + it('throws exception setting default to missing manifest', function() { $assets = app(Assets::class); - $assets->getDefaultManifest(); - })->throws(Error::class); + $assets->setDefaultManifest('testing'); + })->throws(Exception::class); + + test('get manifest from FileString', function() use($newManifest) { + $assets = app(Assets::class); + $manifest = $newManifest(); + $assets->addManifest('main', $manifest, true); + $file = new FileString('main::test.css'); + $result = $assets->getFileManifest($file); + expect($result)->toBe($manifest); + }); + + test('default manifest from FileString', function() use($newManifest) { + $assets = app(Assets::class); + $manifest = $newManifest(); + $assets->addManifest('main', $manifest, true); + $file = new FileString('test.css'); + $result = $assets->getFileManifest($file); + expect($result)->toBe($manifest); + }); + }); |