Skip to content

Commit

Permalink
Refactor Orchestra\Canvas\Canvas (#42)
Browse files Browse the repository at this point in the history
* wip

Signed-off-by: Mior Muhammad Zaki <[email protected]>

* wip

Signed-off-by: Mior Muhammad Zaki <[email protected]>

* wip

Signed-off-by: Mior Muhammad Zaki <[email protected]>

* wip

Signed-off-by: Mior Muhammad Zaki <[email protected]>

---------

Signed-off-by: Mior Muhammad Zaki <[email protected]>
  • Loading branch information
crynobone authored Feb 9, 2025
1 parent d7c15e2 commit d3693f2
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 18 deletions.
1 change: 1 addition & 0 deletions .github/workflows/audits.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: audits

on:
push:
pull_request:
workflow_dispatch:

jobs:
Expand Down
27 changes: 9 additions & 18 deletions src/Canvas.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Orchestra\Canvas;

use Illuminate\Support\Arr;
use InvalidArgumentException;

class Canvas
{
Expand All @@ -16,25 +17,15 @@ public static function preset(array $config, string $basePath): Presets\Preset
/** @var array<string, mixed> $configuration */
$configuration = Arr::except($config, 'preset');

$preset = $config['preset'];
/** @var string|class-string<\Orchestra\Canvas\Presets\Preset> $preset */
$preset = $config['preset'] ?? 'laravel';

$resolveDefaultPreset = function ($configuration, $basePath) use ($preset) {
if (class_exists($preset)) {
/**
* @var class-string<\Orchestra\Canvas\Presets\Preset> $preset
*
* @return \Orchestra\Canvas\Presets\Preset
*/
return new $preset($configuration, $basePath);
}

return new Presets\Laravel($configuration, $basePath);
};

return match ($preset) {
'package' => new Presets\Package($configuration, $basePath),
'laravel' => new Presets\Laravel($configuration, $basePath),
default => $resolveDefaultPreset($configuration, $basePath),
/** @phpstan-ignore return.type */
return match (true) {
$preset === 'package' => new Presets\Package($configuration, $basePath),
$preset === 'laravel' => new Presets\Laravel($configuration, $basePath),
class_exists($preset) => new $preset($configuration, $basePath),
default => throw new InvalidArgumentException(\sprintf('Unable to resolve %s preset', $preset)),
};
}
}
23 changes: 23 additions & 0 deletions tests/Unit/CanvasTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,4 +56,27 @@ public function it_can_setup_package_preset()
],
], $preset->config());
}

#[Test]
public function it_can_setup_class_preset()
{
$files = new Filesystem;
$preset = Canvas::preset([
'preset' => Fixtures\CustomPackage::class,
'namespace' => 'Orchestra\Foundation',
'paths' => [
'src' => 'src',
'resources' => 'resources',
],
], __DIR__, $files);

$this->assertInstanceOf(Package::class, $preset);
$this->assertSame([
'namespace' => 'Orchestra\Foundation',
'paths' => [
'src' => 'src',
'resources' => 'resources',
],
], $preset->config());
}
}
10 changes: 10 additions & 0 deletions tests/Unit/Fixtures/CustomPackage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?php

namespace Orchestra\Canvas\Tests\Unit\Fixtures;

use Orchestra\Canvas\Presets\Package;

class CustomPackage extends Package
{
//
}

0 comments on commit d3693f2

Please sign in to comment.