Skip to content

Commit 92d2917

Browse files
committed
Add missing package detection
1 parent 60cea0a commit 92d2917

16 files changed

Lines changed: 145 additions & 0 deletions

src/Adapter/Builder/AbstractAdapterDefinitionBuilder.php

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

1414
use League\FlysystemBundle\Adapter\AdapterDefinitionFactory;
15+
use League\FlysystemBundle\Exception\MissingPackageException;
1516
use Symfony\Component\DependencyInjection\Definition;
1617
use Symfony\Component\OptionsResolver\OptionsResolver;
1718

@@ -31,6 +32,8 @@ public function __construct(AdapterDefinitionFactory $definitionFactory)
3132

3233
final public function createDefinition(array $options): Definition
3334
{
35+
$this->ensureRequiredPackagesAvailable();
36+
3437
$resolver = new OptionsResolver();
3538
$this->configureOptions($resolver);
3639

@@ -41,7 +44,30 @@ final public function createDefinition(array $options): Definition
4144
return $definition;
4245
}
4346

47+
abstract protected function getRequiredPackages(): array;
48+
4449
abstract protected function configureOptions(OptionsResolver $resolver);
4550

4651
abstract protected function configureDefinition(Definition $definition, array $options);
52+
53+
private function ensureRequiredPackagesAvailable()
54+
{
55+
$missingPackages = [];
56+
foreach ($this->getRequiredPackages() as $requiredClass => $packageName) {
57+
if (!class_exists($requiredClass)) {
58+
$missingPackages[] = $packageName;
59+
}
60+
}
61+
62+
if (!$missingPackages) {
63+
return;
64+
}
65+
66+
throw new MissingPackageException(sprintf(
67+
"Missing package%s, to use the \"%s\" adapter, run:\n\ncomposer require %s",
68+
\count($missingPackages) > 1 ? 's' : '',
69+
$this->getName(),
70+
implode(' ', $missingPackages)
71+
));
72+
}
4773
}

src/Adapter/Builder/AwsAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public function getName(): string
2828
return 'aws';
2929
}
3030

31+
protected function getRequiredPackages(): array
32+
{
33+
return [
34+
AwsS3Adapter::class => 'league/flysystem-aws-s3-v3',
35+
];
36+
}
37+
3138
protected function configureOptions(OptionsResolver $resolver)
3239
{
3340
$resolver->setRequired('client');

src/Adapter/Builder/AzureAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public function getName(): string
2828
return 'azure';
2929
}
3030

31+
protected function getRequiredPackages(): array
32+
{
33+
return [
34+
AzureBlobStorageAdapter::class => 'league/flysystem-azure-blob-storage',
35+
];
36+
}
37+
3138
protected function configureOptions(OptionsResolver $resolver)
3239
{
3340
$resolver->setRequired('client');

src/Adapter/Builder/CacheAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ public function getName(): string
2929
return 'cache';
3030
}
3131

32+
protected function getRequiredPackages(): array
33+
{
34+
return [
35+
CachedAdapter::class => 'league/flysystem-cached-adapter',
36+
];
37+
}
38+
3239
protected function configureOptions(OptionsResolver $resolver)
3340
{
3441
$resolver->setRequired('store');

src/Adapter/Builder/DropboxAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public function getName(): string
2828
return 'dropbox';
2929
}
3030

31+
protected function getRequiredPackages(): array
32+
{
33+
return [
34+
DropboxAdapter::class => 'spatie/flysystem-dropbox',
35+
];
36+
}
37+
3138
protected function configureOptions(OptionsResolver $resolver)
3239
{
3340
$resolver->setRequired('client');

src/Adapter/Builder/FtpAdapterDefinitionBuilder.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public function getName(): string
2727
return 'ftp';
2828
}
2929

30+
protected function getRequiredPackages(): array
31+
{
32+
return [];
33+
}
34+
3035
protected function configureOptions(OptionsResolver $resolver)
3136
{
3237
$resolver->setRequired('host');

src/Adapter/Builder/GcloudAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@ public function getName(): string
2828
return 'gcloud';
2929
}
3030

31+
protected function getRequiredPackages(): array
32+
{
33+
return [
34+
GoogleStorageAdapter::class => 'superbalist/flysystem-google-storage',
35+
];
36+
}
37+
3138
protected function configureOptions(OptionsResolver $resolver)
3239
{
3340
$resolver->setRequired('client');

src/Adapter/Builder/LocalAdapterDefinitionBuilder.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public function getName(): string
2727
return 'local';
2828
}
2929

30+
protected function getRequiredPackages(): array
31+
{
32+
return [];
33+
}
34+
3035
protected function configureOptions(OptionsResolver $resolver)
3136
{
3237
$resolver->setRequired('directory');

src/Adapter/Builder/MemoryAdapterDefinitionBuilder.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,13 @@ public function getName(): string
2727
return 'memory';
2828
}
2929

30+
protected function getRequiredPackages(): array
31+
{
32+
return [
33+
MemoryAdapter::class => 'league/flysystem-memory',
34+
];
35+
}
36+
3037
protected function configureOptions(OptionsResolver $resolver)
3138
{
3239
}

src/Adapter/Builder/NullAdapterDefinitionBuilder.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ public function getName(): string
2727
return 'null';
2828
}
2929

30+
protected function getRequiredPackages(): array
31+
{
32+
return [];
33+
}
34+
3035
protected function configureOptions(OptionsResolver $resolver)
3136
{
3237
}

0 commit comments

Comments
 (0)