Skip to content

Commit 4a8de01

Browse files
committed
Add cache, replica, ftp, sftp
1 parent d73a7d6 commit 4a8de01

8 files changed

Lines changed: 320 additions & 1 deletion

src/Adapter/AdapterDefinitionFactory.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@ public function __construct()
3131
$this->builders = [
3232
new Builder\AwsAdapterDefinitionBuilder($this),
3333
new Builder\AzureAdapterDefinitionBuilder($this),
34+
new Builder\CacheAdapterDefinitionBuilder($this),
3435
new Builder\DropboxAdapterDefinitionBuilder($this),
36+
new Builder\FtpAdapterDefinitionBuilder($this),
3537
new Builder\GcloudAdapterDefinitionBuilder($this),
3638
new Builder\LocalAdapterDefinitionBuilder($this),
3739
new Builder\PhpcrAdapterDefinitionBuilder($this),
3840
new Builder\RackspaceAdapterDefinitionBuilder($this),
41+
new Builder\ReplicateAdapterDefinitionBuilder($this),
42+
new Builder\SftpAdapterDefinitionBuilder($this),
3943
new Builder\WebdavAdapterDefinitionBuilder($this),
4044
new Builder\ZipAdapterDefinitionBuilder($this),
4145
];
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 League\Flysystem\Cached\CachedAdapter;
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+
*/
22+
class CacheAdapterDefinitionBuilder extends AbstractAdapterDefinitionBuilder
23+
{
24+
public function getName(): string
25+
{
26+
return 'cache';
27+
}
28+
29+
protected function configureOptions(OptionsResolver $resolver)
30+
{
31+
$resolver->setRequired('store');
32+
$resolver->setAllowedTypes('store', 'string');
33+
34+
$resolver->setRequired('source');
35+
$resolver->setAllowedTypes('source', 'string');
36+
}
37+
38+
protected function configureDefinition(Definition $definition, array $options)
39+
{
40+
$definition->setClass(CachedAdapter::class);
41+
$definition->setArgument(0, new Reference('flysystem.adapter.'.$options['source']));
42+
$definition->setArgument(1, new Reference($options['store']));
43+
}
44+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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 League\Flysystem\Adapter\Ftp;
15+
use Symfony\Component\DependencyInjection\Definition;
16+
use Symfony\Component\OptionsResolver\OptionsResolver;
17+
18+
/**
19+
* @author Titouan Galopin <galopintitouan@gmail.com>
20+
*/
21+
class FtpAdapterDefinitionBuilder extends AbstractAdapterDefinitionBuilder
22+
{
23+
public function getName(): string
24+
{
25+
return 'ftp';
26+
}
27+
28+
protected function configureOptions(OptionsResolver $resolver)
29+
{
30+
$resolver->setRequired('host');
31+
$resolver->setAllowedTypes('host', 'string');
32+
33+
$resolver->setRequired('username');
34+
$resolver->setAllowedTypes('username', 'string');
35+
36+
$resolver->setRequired('password');
37+
$resolver->setAllowedTypes('password', 'string');
38+
39+
$resolver->setDefault('port', 21);
40+
$resolver->setAllowedTypes('port', 'int');
41+
42+
$resolver->setDefault('root', '');
43+
$resolver->setAllowedTypes('root', 'string');
44+
45+
$resolver->setDefault('passive', true);
46+
$resolver->setAllowedTypes('passive', 'boolean');
47+
48+
$resolver->setDefault('ssl', false);
49+
$resolver->setAllowedTypes('ssl', 'boolean');
50+
51+
$resolver->setDefault('timeout', 90);
52+
$resolver->setAllowedTypes('timeout', 'int');
53+
}
54+
55+
protected function configureDefinition(Definition $definition, array $options)
56+
{
57+
$definition->setClass(Ftp::class);
58+
$definition->setArgument(0, $options);
59+
}
60+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
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 League\Flysystem\Replicate\ReplicateAdapter;
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+
*/
22+
class ReplicateAdapterDefinitionBuilder extends AbstractAdapterDefinitionBuilder
23+
{
24+
public function getName(): string
25+
{
26+
return 'replicate';
27+
}
28+
29+
protected function configureOptions(OptionsResolver $resolver)
30+
{
31+
$resolver->setRequired('source');
32+
$resolver->setAllowedTypes('source', 'string');
33+
34+
$resolver->setRequired('replica');
35+
$resolver->setAllowedTypes('replica', 'string');
36+
}
37+
38+
protected function configureDefinition(Definition $definition, array $options)
39+
{
40+
$definition->setClass(ReplicateAdapter::class);
41+
$definition->setArgument(0, new Reference('flysystem.adapter.'.$options['source']));
42+
$definition->setArgument(1, new Reference('flysystem.adapter.'.$options['replica']));
43+
}
44+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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 League\Flysystem\Adapter\Ftp;
15+
use League\Flysystem\Sftp\SftpAdapter;
16+
use Symfony\Component\DependencyInjection\Definition;
17+
use Symfony\Component\OptionsResolver\OptionsResolver;
18+
19+
/**
20+
* @author Titouan Galopin <galopintitouan@gmail.com>
21+
*/
22+
class SftpAdapterDefinitionBuilder extends AbstractAdapterDefinitionBuilder
23+
{
24+
public function getName(): string
25+
{
26+
return 'sftp';
27+
}
28+
29+
protected function configureOptions(OptionsResolver $resolver)
30+
{
31+
$resolver->setRequired('host');
32+
$resolver->setAllowedTypes('host', 'string');
33+
34+
$resolver->setRequired('username');
35+
$resolver->setAllowedTypes('username', 'string');
36+
37+
$resolver->setRequired('password');
38+
$resolver->setAllowedTypes('password', 'string');
39+
40+
$resolver->setDefault('port', 22);
41+
$resolver->setAllowedTypes('port', 'int');
42+
43+
$resolver->setDefault('root', '');
44+
$resolver->setAllowedTypes('root', 'string');
45+
46+
$resolver->setDefault('private_key', null);
47+
$resolver->setAllowedTypes('private_key', ['string', 'null']);
48+
49+
$resolver->setDefault('timeout', 90);
50+
$resolver->setAllowedTypes('timeout', 'int');
51+
}
52+
53+
protected function configureDefinition(Definition $definition, array $options)
54+
{
55+
$definition->setClass(SftpAdapter::class);
56+
$definition->setArgument(0, $options);
57+
}
58+
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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 League\Flysystem\Cached\CachedAdapter;
15+
use League\FlysystemBundle\Adapter\Builder\CacheAdapterDefinitionBuilder;
16+
use Symfony\Component\DependencyInjection\Reference;
17+
18+
class CacheAdapterDefinitionBuilderTest extends AbstractAdapterDefinitionBuilderTest
19+
{
20+
public function createBuilder()
21+
{
22+
return new CacheAdapterDefinitionBuilder($this->createDefinitionFactory());
23+
}
24+
25+
public function provideValidOptions()
26+
{
27+
yield 'minimal' => [[
28+
'store' => 'my_store',
29+
'source' => 'my_source',
30+
]];
31+
}
32+
33+
/**
34+
* @dataProvider provideValidOptions
35+
*/
36+
public function testCreateDefinition($options)
37+
{
38+
$this->assertSame(CachedAdapter::class, $this->createBuilder()->createDefinition($options)->getClass());
39+
}
40+
41+
public function testOptionsBehavior()
42+
{
43+
$definition = $this->createBuilder()->createDefinition([
44+
'store' => 'my_store',
45+
'source' => 'my_source',
46+
]);
47+
48+
$this->assertSame(CachedAdapter::class, $definition->getClass());
49+
$this->assertInstanceOf(Reference::class, $definition->getArgument(0));
50+
$this->assertSame('flysystem.adapter.my_source', (string) $definition->getArgument(0));
51+
$this->assertInstanceOf(Reference::class, $definition->getArgument(1));
52+
$this->assertSame('my_store', (string) $definition->getArgument(1));
53+
}
54+
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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 League\Flysystem\Cached\CachedAdapter;
15+
use League\Flysystem\Replicate\ReplicateAdapter;
16+
use League\FlysystemBundle\Adapter\Builder\ReplicateAdapterDefinitionBuilder;
17+
use Symfony\Component\DependencyInjection\Reference;
18+
19+
class ReplicateAdapterDefinitionBuilderTest extends AbstractAdapterDefinitionBuilderTest
20+
{
21+
public function createBuilder()
22+
{
23+
return new ReplicateAdapterDefinitionBuilder($this->createDefinitionFactory());
24+
}
25+
26+
public function provideValidOptions()
27+
{
28+
yield 'minimal' => [[
29+
'source' => 'my_source',
30+
'replica' => 'my_replica',
31+
]];
32+
}
33+
34+
/**
35+
* @dataProvider provideValidOptions
36+
*/
37+
public function testCreateDefinition($options)
38+
{
39+
$this->assertSame(ReplicateAdapter::class, $this->createBuilder()->createDefinition($options)->getClass());
40+
}
41+
42+
public function testOptionsBehavior()
43+
{
44+
$definition = $this->createBuilder()->createDefinition([
45+
'source' => 'my_source',
46+
'replica' => 'my_replica',
47+
]);
48+
49+
$this->assertSame(ReplicateAdapter::class, $definition->getClass());
50+
$this->assertInstanceOf(Reference::class, $definition->getArgument(0));
51+
$this->assertSame('flysystem.adapter.my_source', (string) $definition->getArgument(0));
52+
$this->assertInstanceOf(Reference::class, $definition->getArgument(1));
53+
$this->assertSame('flysystem.adapter.my_replica', (string) $definition->getArgument(1));
54+
}
55+
}

tests/Adapter/Fixtures/full_config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ fs_sftp:
8383
port: 22
8484
username: 'username'
8585
password: 'password'
86-
privateKey: 'path/to/or/contents/of/privatekey'
86+
private_key: 'path/to/or/contents/of/privatekey'
8787
root: '/path/to/root'
8888
timeout: 10
8989

0 commit comments

Comments
 (0)