Skip to content

Commit 9205bc7

Browse files
authored
Merge pull request #43 from Nyholm/async-aws
Add support for AsyncAws
2 parents b0a38b4 + ad7c7b4 commit 9205bc7

7 files changed

Lines changed: 153 additions & 0 deletions

File tree

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ before_script:
2424
- composer self-update
2525
- composer require --no-update symfony/config=$SYMFONY_VERSION symfony/http-kernel=$SYMFONY_VERSION symfony/dependency-injection=$SYMFONY_VERSION symfony/options-resolver=$SYMFONY_VERSION
2626
- composer require --no-update --dev symfony/framework-bundle=$SYMFONY_VERSION symfony/yaml=$SYMFONY_VERSION
27+
- if [[ $TRAVIS_PHP_VERSION == "7.1" ]]; then composer remove async-aws/flysystem-s3 --dev --no-update; fi
2728
- composer update $COMPOSER_FLAGS --prefer-dist
2829

2930
script:

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
"symfony/options-resolver": "^4.2|^5.0"
2929
},
3030
"require-dev": {
31+
"async-aws/flysystem-s3": "^0.3",
3132
"league/flysystem-aws-s3-v3": "^1.0.22",
3233
"league/flysystem-azure-blob-storage": "^0.1.5",
3334
"league/flysystem-cached-adapter": "^1.0.9",

src/Adapter/AdapterDefinitionFactory.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class AdapterDefinitionFactory
2929
public function __construct()
3030
{
3131
$this->builders = [
32+
new Builder\AsyncAwsAdapterDefinitionBuilder(),
3233
new Builder\AwsAdapterDefinitionBuilder(),
3334
new Builder\AzureAdapterDefinitionBuilder(),
3435
new Builder\CacheAdapterDefinitionBuilder(),
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the flysystem-bundle project.
5+
*
6+
* (c) Titouan Galopin <galopintitouan@gmail.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace League\FlysystemBundle\Adapter\Builder;
13+
14+
use AsyncAws\Flysystem\S3\S3FilesystemV1;
15+
use Symfony\Component\DependencyInjection\Definition;
16+
use Symfony\Component\DependencyInjection\Reference;
17+
use Symfony\Component\OptionsResolver\OptionsResolver;
18+
19+
/**
20+
* @author Titouan Galopin <galopintitouan@gmail.com>
21+
* @author Tobias Nyholm <tobias.nyholm@gmail.com>
22+
*
23+
* @internal
24+
*/
25+
class AsyncAwsAdapterDefinitionBuilder extends AbstractAdapterDefinitionBuilder
26+
{
27+
public function getName(): string
28+
{
29+
return 'asyncaws';
30+
}
31+
32+
protected function getRequiredPackages(): array
33+
{
34+
return [
35+
S3FilesystemV1::class => 'async-aws/flysystem-s3',
36+
];
37+
}
38+
39+
protected function configureOptions(OptionsResolver $resolver)
40+
{
41+
$resolver->setRequired('client');
42+
$resolver->setAllowedTypes('client', 'string');
43+
44+
$resolver->setRequired('bucket');
45+
$resolver->setAllowedTypes('bucket', 'string');
46+
47+
$resolver->setDefault('prefix', '');
48+
$resolver->setAllowedTypes('prefix', 'string');
49+
50+
$resolver->setDefault('options', []);
51+
$resolver->setAllowedTypes('options', 'array');
52+
}
53+
54+
protected function configureDefinition(Definition $definition, array $options)
55+
{
56+
$definition->setClass(S3FilesystemV1::class);
57+
$definition->setArgument(0, new Reference($options['client']));
58+
$definition->setArgument(1, $options['bucket']);
59+
$definition->setArgument(2, $options['prefix']);
60+
$definition->setArgument(3, $options['options']);
61+
}
62+
}

tests/Adapter/AdapterDefinitionFactoryTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ public function provideConfigOptions()
2323
$config = Yaml::parseFile(__DIR__.'/options.yaml');
2424

2525
foreach ($config as $fs) {
26+
if (isset($fs['_php_version']) && version_compare(PHP_VERSION, $fs['_php_version'], '<')) {
27+
continue;
28+
}
2629
yield $fs['adapter'] => [$fs['adapter'], $fs['options'] ?? []];
2730
}
2831
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the flysystem-bundle project.
5+
*
6+
* (c) Titouan Galopin <galopintitouan@gmail.com>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Tests\League\FlysystemBundle\Adapter\Builder;
13+
14+
use AsyncAws\Flysystem\S3\S3FilesystemV1;
15+
use League\FlysystemBundle\Adapter\Builder\AsyncAwsAdapterDefinitionBuilder;
16+
use PHPUnit\Framework\TestCase;
17+
use Symfony\Component\DependencyInjection\Reference;
18+
19+
/**
20+
* @requires PHP 7.2
21+
*/
22+
class AsyncAwsAdapterDefinitionBuilderTest extends TestCase
23+
{
24+
public function createBuilder()
25+
{
26+
return new AsyncAwsAdapterDefinitionBuilder();
27+
}
28+
29+
public function provideValidOptions()
30+
{
31+
yield 'minimal' => [[
32+
'client' => 'my_client',
33+
'bucket' => 'bucket',
34+
]];
35+
36+
yield 'prefix' => [[
37+
'client' => 'my_client',
38+
'bucket' => 'bucket',
39+
'prefix' => 'prefix/path',
40+
]];
41+
42+
yield 'options' => [[
43+
'client' => 'my_client',
44+
'bucket' => 'bucket',
45+
'options' => [
46+
'ServerSideEncryption' => 'AES256',
47+
],
48+
]];
49+
}
50+
51+
/**
52+
* @dataProvider provideValidOptions
53+
*/
54+
public function testCreateDefinition($options)
55+
{
56+
$this->assertSame(S3FilesystemV1::class, $this->createBuilder()->createDefinition($options)->getClass());
57+
}
58+
59+
public function testOptionsBehavior()
60+
{
61+
$definition = $this->createBuilder()->createDefinition([
62+
'client' => 'my_client',
63+
'bucket' => 'bucket',
64+
'prefix' => 'prefix/path',
65+
'options' => [
66+
'ServerSideEncryption' => 'AES256',
67+
],
68+
]);
69+
70+
$this->assertSame(S3FilesystemV1::class, $definition->getClass());
71+
$this->assertInstanceOf(Reference::class, $definition->getArgument(0));
72+
$this->assertSame('my_client', (string) $definition->getArgument(0));
73+
$this->assertSame('bucket', $definition->getArgument(1));
74+
$this->assertSame('prefix/path', $definition->getArgument(2));
75+
$this->assertSame(['ServerSideEncryption' => 'AES256'], $definition->getArgument(3));
76+
}
77+
}

tests/Adapter/options.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
fs_async_aws:
2+
_php_version: '7.2.5'
3+
adapter: 'asyncaws'
4+
options:
5+
client: 'aws_client_service'
6+
bucket: 'bucket_name'
7+
prefix: 'optional/path/prefix'
8+
19
fs_aws:
210
adapter: 'aws'
311
options:

0 commit comments

Comments
 (0)