Skip to content

Commit e583a78

Browse files
committed
feat: refacto required packages by a builder
1 parent 34c25a8 commit e583a78

14 files changed

+37
-16
lines changed

src/Adapter/AdapterDefinitionFactory.php

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace League\FlysystemBundle\Adapter;
1313

1414
use League\FlysystemBundle\Adapter\Builder\AdapterDefinitionBuilderInterface;
15+
use League\FlysystemBundle\Exception\MissingPackageException;
1516
use Symfony\Component\DependencyInjection\Definition;
1617

1718
/**
@@ -46,11 +47,31 @@ public function __construct()
4647
public function createDefinition(string $name, array $options, ?string $defaultVisibilityForDirectories = null): ?Definition
4748
{
4849
foreach ($this->builders as $builder) {
49-
if ($builder->getName() === $name) {
50-
return $builder->createDefinition($options, $defaultVisibilityForDirectories);
50+
if ($builder->getName() !== $name) {
51+
continue;
5152
}
53+
54+
$this->ensureRequiredPackagesBuilderAvailable($builder);
55+
56+
return $builder->createDefinition($options, $defaultVisibilityForDirectories);
5257
}
5358

5459
return null;
5560
}
61+
62+
private function ensureRequiredPackagesBuilderAvailable(AdapterDefinitionBuilderInterface $builder): void
63+
{
64+
$missingPackages = [];
65+
foreach ($builder->getRequiredPackages() as $requiredClass => $packageName) {
66+
if (!class_exists($requiredClass)) {
67+
$missingPackages[] = $packageName;
68+
}
69+
}
70+
71+
if (!$missingPackages) {
72+
return;
73+
}
74+
75+
throw new MissingPackageException(sprintf("Missing package%s, to use the \"%s\" adapter, run:\n\ncomposer require %s", \count($missingPackages) > 1 ? 's' : '', $this->getName(), implode(' ', $missingPackages)));
76+
}
5677
}

src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ abstract class AbstractAdapterDefinitionBuilder implements AdapterDefinitionBuil
2323
{
2424
final public function createDefinition(array $options, ?string $defaultVisibilityForDirectories): Definition
2525
{
26-
$this->ensureRequiredPackagesAvailable();
27-
2826
$resolver = new OptionsResolver();
2927
$this->configureOptions($resolver);
3028

@@ -35,7 +33,7 @@ final public function createDefinition(array $options, ?string $defaultVisibilit
3533
return $definition;
3634
}
3735

38-
abstract protected function getRequiredPackages(): array;
36+
abstract public function getRequiredPackages(): array;
3937

4038
abstract protected function configureOptions(OptionsResolver $resolver);
4139

src/Adapter/Builder/AdapterDefinitionBuilderInterface.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ interface AdapterDefinitionBuilderInterface
2222
{
2323
public function getName(): string;
2424

25+
public function getRequiredPackages(): array;
26+
2527
/**
2628
* Create the definition for this builder's adapter given an array of options.
2729
*/

src/Adapter/Builder/AsyncAwsAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public function getName(): string
3131
return 'asyncaws';
3232
}
3333

34-
protected function getRequiredPackages(): array
34+
public function getRequiredPackages(): array
3535
{
3636
return [
3737
AsyncAwsS3Adapter::class => 'league/flysystem-async-aws-s3',

src/Adapter/Builder/AwsAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function getName(): string
3030
return 'aws';
3131
}
3232

33-
protected function getRequiredPackages(): array
33+
public function getRequiredPackages(): array
3434
{
3535
return [
3636
AwsS3V3Adapter::class => 'league/flysystem-aws-s3-v3',

src/Adapter/Builder/AzureAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function getName(): string
2828
return 'azure';
2929
}
3030

31-
protected function getRequiredPackages(): array
31+
public function getRequiredPackages(): array
3232
{
3333
return [
3434
AzureBlobStorageAdapter::class => 'league/flysystem-azure-blob-storage',

src/Adapter/Builder/BunnyCDNAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function getName(): string
2626
return 'bunnycdn';
2727
}
2828

29-
protected function getRequiredPackages(): array
29+
public function getRequiredPackages(): array
3030
{
3131
return [
3232
BunnyCDNAdapter::class => 'platformcommunity/flysystem-bunnycdn',

src/Adapter/Builder/FtpAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function getName(): string
3232
return 'ftp';
3333
}
3434

35-
protected function getRequiredPackages(): array
35+
public function getRequiredPackages(): array
3636
{
3737
return [
3838
FtpAdapter::class => 'league/flysystem-ftp',

src/Adapter/Builder/GcloudAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public function getName(): string
2828
return 'gcloud';
2929
}
3030

31-
protected function getRequiredPackages(): array
31+
public function getRequiredPackages(): array
3232
{
3333
return [
3434
GoogleCloudStorageAdapter::class => 'league/flysystem-google-cloud-storage',

src/Adapter/Builder/GridFSAdapterDefinitionBuilder.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function getName(): string
3232
return 'gridfs';
3333
}
3434

35-
protected function getRequiredPackages(): array
35+
public function getRequiredPackages(): array
3636
{
3737
return [
3838
GridFSAdapter::class => 'league/flysystem-gridfs',

0 commit comments

Comments
 (0)