Skip to content

Commit

Permalink
gcloud: simplify the injection of visibility_handler
Browse files Browse the repository at this point in the history
  • Loading branch information
syffer authored and maxhelias committed Mar 21, 2024
1 parent ad6ef9c commit f7da754
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/Adapter/Builder/GcloudAdapterDefinitionBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,9 @@ protected function configureOptions(OptionsResolver $resolver): void

$resolver->setDefault('prefix', '');
$resolver->setAllowedTypes('prefix', 'string');

$resolver->setDefault('visibility_handler', null);
$resolver->setAllowedTypes('visibility_handler', ['string', 'null']);
}

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

$visibilityHandlerReference = null;
if ($options['visibility_handler'] !== null) {
$visibilityHandlerReference = new Reference($options['visibility_handler']);
}

$definition->setClass(GoogleCloudStorageAdapter::class);
$definition->setArgument(0, $bucketDefinition);
$definition->setArgument(1, $options['prefix']);
$definition->setArgument(2, $visibilityHandlerReference);
}
}
31 changes: 31 additions & 0 deletions src/DependencyInjection/Compiler/GcloudFactoryPass.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<?php

namespace League\FlysystemBundle\DependencyInjection\Compiler;

use League\Flysystem\GoogleCloudStorage\GoogleCloudStorageAdapter;
use League\Flysystem\GoogleCloudStorage\PortableVisibilityHandler;
use League\Flysystem\GoogleCloudStorage\UniformBucketLevelAccessVisibility;
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;

/**
* @internal
*/
class GcloudFactoryPass implements CompilerPassInterface
{
/**
* {@inheritdoc}
*/
public function process(ContainerBuilder $container): void
{
if (!class_exists(GoogleCloudStorageAdapter::class)) {
return;
}

$container->register(PortableVisibilityHandler::class, PortableVisibilityHandler::class);
$container->setAlias('flysystem.adapter.gcloud.visibility.portable', PortableVisibilityHandler::class);

$container->register(UniformBucketLevelAccessVisibility::class, UniformBucketLevelAccessVisibility::class);
$container->setAlias('flysystem.adapter.gcloud.visibility.uniform', UniformBucketLevelAccessVisibility::class);
}
}
2 changes: 2 additions & 0 deletions src/FlysystemBundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

namespace League\FlysystemBundle;

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

$container->addCompilerPass(new LazyFactoryPass());
$container->addCompilerPass(new GcloudFactoryPass());
}
}
19 changes: 19 additions & 0 deletions tests/Adapter/Builder/GcloudAdapterDefinitionBuilderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
namespace Tests\League\FlysystemBundle\Adapter\Builder;

use League\Flysystem\GoogleCloudStorage\GoogleCloudStorageAdapter;
use League\Flysystem\GoogleCloudStorage\PortableVisibilityHandler;
use League\Flysystem\GoogleCloudStorage\UniformBucketLevelAccessVisibility;
use League\FlysystemBundle\Adapter\Builder\GcloudAdapterDefinitionBuilder;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\Definition;
Expand All @@ -36,6 +38,18 @@ public function provideValidOptions(): \Generator
'bucket' => 'bucket',
'prefix' => 'prefix/path',
]];

yield 'portable visibility handler' => [[
'client' => 'my_client',
'bucket' => 'bucket',
'visibility_handler' => PortableVisibilityHandler::class,
]];

yield 'uniform visibility handler' => [[
'client' => 'my_client',
'bucket' => 'bucket',
'visibility_handler' => UniformBucketLevelAccessVisibility::class,
]];
}

/**
Expand All @@ -52,6 +66,7 @@ public function testOptionsBehavior()
'client' => 'my_client',
'bucket' => 'bucket_name',
'prefix' => 'prefix/path',
'visibility_handler' => UniformBucketLevelAccessVisibility::class
], null);

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

$this->assertSame('prefix/path', $definition->getArgument(1));

/** @var Reference $visibilityHandlerReference */
$visibilityHandlerReference = $definition->getArgument(2);
$this->assertInstanceOf(Reference::class, $visibilityHandlerReference);
}
}

0 comments on commit f7da754

Please sign in to comment.