Skip to content

Commit f7da754

Browse files
syffermaxhelias
authored andcommitted
gcloud: simplify the injection of visibility_handler
1 parent ad6ef9c commit f7da754

File tree

4 files changed

+61
-0
lines changed

4 files changed

+61
-0
lines changed

src/Adapter/Builder/GcloudAdapterDefinitionBuilder.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ protected function configureOptions(OptionsResolver $resolver): void
4545

4646
$resolver->setDefault('prefix', '');
4747
$resolver->setAllowedTypes('prefix', 'string');
48+
49+
$resolver->setDefault('visibility_handler', null);
50+
$resolver->setAllowedTypes('visibility_handler', ['string', 'null']);
4851
}
4952

5053
protected function configureDefinition(Definition $definition, array $options, ?string $defaultVisibilityForDirectories): void
@@ -53,8 +56,14 @@ protected function configureDefinition(Definition $definition, array $options, ?
5356
$bucketDefinition->setFactory([new Reference($options['client']), 'bucket']);
5457
$bucketDefinition->setArgument(0, $options['bucket']);
5558

59+
$visibilityHandlerReference = null;
60+
if ($options['visibility_handler'] !== null) {
61+
$visibilityHandlerReference = new Reference($options['visibility_handler']);
62+
}
63+
5664
$definition->setClass(GoogleCloudStorageAdapter::class);
5765
$definition->setArgument(0, $bucketDefinition);
5866
$definition->setArgument(1, $options['prefix']);
67+
$definition->setArgument(2, $visibilityHandlerReference);
5968
}
6069
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace League\FlysystemBundle\DependencyInjection\Compiler;
4+
5+
use League\Flysystem\GoogleCloudStorage\GoogleCloudStorageAdapter;
6+
use League\Flysystem\GoogleCloudStorage\PortableVisibilityHandler;
7+
use League\Flysystem\GoogleCloudStorage\UniformBucketLevelAccessVisibility;
8+
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
9+
use Symfony\Component\DependencyInjection\ContainerBuilder;
10+
11+
/**
12+
* @internal
13+
*/
14+
class GcloudFactoryPass implements CompilerPassInterface
15+
{
16+
/**
17+
* {@inheritdoc}
18+
*/
19+
public function process(ContainerBuilder $container): void
20+
{
21+
if (!class_exists(GoogleCloudStorageAdapter::class)) {
22+
return;
23+
}
24+
25+
$container->register(PortableVisibilityHandler::class, PortableVisibilityHandler::class);
26+
$container->setAlias('flysystem.adapter.gcloud.visibility.portable', PortableVisibilityHandler::class);
27+
28+
$container->register(UniformBucketLevelAccessVisibility::class, UniformBucketLevelAccessVisibility::class);
29+
$container->setAlias('flysystem.adapter.gcloud.visibility.uniform', UniformBucketLevelAccessVisibility::class);
30+
}
31+
}

src/FlysystemBundle.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
namespace League\FlysystemBundle;
1313

14+
use League\FlysystemBundle\DependencyInjection\Compiler\GcloudFactoryPass;
1415
use League\FlysystemBundle\DependencyInjection\Compiler\LazyFactoryPass;
1516
use Symfony\Component\DependencyInjection\ContainerBuilder;
1617
use Symfony\Component\HttpKernel\Bundle\Bundle;
@@ -30,5 +31,6 @@ public function build(ContainerBuilder $container): void
3031
parent::build($container);
3132

3233
$container->addCompilerPass(new LazyFactoryPass());
34+
$container->addCompilerPass(new GcloudFactoryPass());
3335
}
3436
}

tests/Adapter/Builder/GcloudAdapterDefinitionBuilderTest.php

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

1414
use League\Flysystem\GoogleCloudStorage\GoogleCloudStorageAdapter;
15+
use League\Flysystem\GoogleCloudStorage\PortableVisibilityHandler;
16+
use League\Flysystem\GoogleCloudStorage\UniformBucketLevelAccessVisibility;
1517
use League\FlysystemBundle\Adapter\Builder\GcloudAdapterDefinitionBuilder;
1618
use PHPUnit\Framework\TestCase;
1719
use Symfony\Component\DependencyInjection\Definition;
@@ -36,6 +38,18 @@ public function provideValidOptions(): \Generator
3638
'bucket' => 'bucket',
3739
'prefix' => 'prefix/path',
3840
]];
41+
42+
yield 'portable visibility handler' => [[
43+
'client' => 'my_client',
44+
'bucket' => 'bucket',
45+
'visibility_handler' => PortableVisibilityHandler::class,
46+
]];
47+
48+
yield 'uniform visibility handler' => [[
49+
'client' => 'my_client',
50+
'bucket' => 'bucket',
51+
'visibility_handler' => UniformBucketLevelAccessVisibility::class,
52+
]];
3953
}
4054

4155
/**
@@ -52,6 +66,7 @@ public function testOptionsBehavior()
5266
'client' => 'my_client',
5367
'bucket' => 'bucket_name',
5468
'prefix' => 'prefix/path',
69+
'visibility_handler' => UniformBucketLevelAccessVisibility::class
5570
], null);
5671

5772
$this->assertSame(GoogleCloudStorageAdapter::class, $definition->getClass());
@@ -65,5 +80,9 @@ public function testOptionsBehavior()
6580
$this->assertSame('bucket', $bucketDefinition->getFactory()[1]);
6681

6782
$this->assertSame('prefix/path', $definition->getArgument(1));
83+
84+
/** @var Reference $visibilityHandlerReference */
85+
$visibilityHandlerReference = $definition->getArgument(2);
86+
$this->assertInstanceOf(Reference::class, $visibilityHandlerReference);
6887
}
6988
}

0 commit comments

Comments
 (0)