Skip to content

Commit d47e94d

Browse files
committed
Implement functional tests and improve architecture
1 parent 4a8de01 commit d47e94d

23 files changed

Lines changed: 375 additions & 202 deletions

composer.json

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,10 @@
2626
"symfony/options-resolver": "^4.2"
2727
},
2828
"require-dev": {
29-
"jackalope/jackalope-doctrine-dbal": "^1.3",
3029
"league/flysystem-aws-s3-v3": "^1.0",
3130
"league/flysystem-azure-blob-storage": "^0.1.5",
3231
"league/flysystem-cached-adapter": "^1.0",
3332
"league/flysystem-memory": "^1.0",
34-
"league/flysystem-phpcr": "^1.1",
3533
"league/flysystem-rackspace": "^1.0",
3634
"league/flysystem-replicate-adapter": "^1.0",
3735
"league/flysystem-sftp": "^1.0",

docs/1-getting-started.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ use Flysystem in your application as soon as you install the bundle:
2323
# config/packages/flysystem.yaml
2424

2525
flysystem:
26-
default_filesystem: 'app'
26+
default_filesystem: 'default.storage'
2727
filesystems:
28-
app:
28+
default.storage:
2929
adapter: 'flysystem.adapter.local'
3030
```
3131
@@ -41,11 +41,11 @@ use League\Flysystem\FilesystemInterface;
4141
4242
class MyService
4343
{
44-
private $filesystem;
44+
private $storage;
4545
46-
public function __construct(FilesystemInterface $filesystem)
46+
public function __construct(FilesystemInterface $storage)
4747
{
48-
$this->filesystem = $filesystem;
48+
$this->storage = $storage;
4949
}
5050
5151
// ...
@@ -59,7 +59,7 @@ use League\Flysystem\FilesystemInterface;
5959
6060
class MyController
6161
{
62-
public function index(FilesystemInterface $filesystem)
62+
public function index(FilesystemInterface $storage)
6363
{
6464
// ...
6565
}
@@ -87,26 +87,26 @@ name to get this specific filesystem:
8787
flysystem:
8888
default_filesystem: 'app'
8989
filesystems:
90-
app:
91-
adapter: 'flysystem.adapter.local'
90+
upload.storage:
91+
adapter: 'local'
92+
options:
93+
directory: '%kernel.project_dir%/storage'
9294
93-
# Defines an additional filesystem named "myFilesystem"
94-
myFilesystem:
95+
tmp.storage:
9596
adapter: 'flysystem.adapter.local'
97+
options:
98+
directory: '/tmp'
9699
```
97100

98101
```php
99102
use League\Flysystem\FilesystemInterface;
100103
101104
class MyController
102105
{
103-
public function index(FilesystemInterface $fs, FilesystemInterface $myFilesystem)
106+
public function index(FilesystemInterface $fs, FilesystemInterface $tmpStorage)
104107
{
105108
// $fs is referencing the default filesystem ("app") because the variable name is not a filesystem name
106-
// $myFilesystem is referencing the "myFilesystem" filesystem
109+
// $tmpStorage is referencing the "tmp.storage" filesystem
107110
}
108111
}
109112
```
110-
111-
If you are not using autowiring, you can inject the `flysystem.filesystem.<filesystem-name>` service into
112-
your services manually to get a specific filesystem (for instance here: `flysystem.filesystem.myFilesystem`).

src/Adapter/AdapterDefinitionFactory.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ public function __construct()
3636
new Builder\FtpAdapterDefinitionBuilder($this),
3737
new Builder\GcloudAdapterDefinitionBuilder($this),
3838
new Builder\LocalAdapterDefinitionBuilder($this),
39-
new Builder\PhpcrAdapterDefinitionBuilder($this),
4039
new Builder\RackspaceAdapterDefinitionBuilder($this),
4140
new Builder\ReplicateAdapterDefinitionBuilder($this),
4241
new Builder\SftpAdapterDefinitionBuilder($this),

src/Adapter/Builder/CacheAdapterDefinitionBuilder.php

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

1414
use League\Flysystem\Cached\CachedAdapter;
15+
use League\Flysystem\Cached\Storage\Psr6Cache;
1516
use Symfony\Component\DependencyInjection\Definition;
1617
use Symfony\Component\DependencyInjection\Reference;
1718
use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -39,6 +40,6 @@ protected function configureDefinition(Definition $definition, array $options)
3940
{
4041
$definition->setClass(CachedAdapter::class);
4142
$definition->setArgument(0, new Reference('flysystem.adapter.'.$options['source']));
42-
$definition->setArgument(1, new Reference($options['store']));
43+
$definition->setArgument(1, new Definition(Psr6Cache::class, [new Reference($options['store'])]));
4344
}
4445
}

src/Adapter/Builder/PhpcrAdapterDefinitionBuilder.php

Lines changed: 0 additions & 44 deletions
This file was deleted.

src/Adapter/Builder/SftpAdapterDefinitionBuilder.php

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

1212
namespace League\FlysystemBundle\Adapter\Builder;
1313

14-
use League\Flysystem\Adapter\Ftp;
1514
use League\Flysystem\Sftp\SftpAdapter;
1615
use Symfony\Component\DependencyInjection\Definition;
1716
use Symfony\Component\OptionsResolver\OptionsResolver;

src/Adapter/Builder/WebdavAdapterDefinitionBuilder.php

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

1414
use League\Flysystem\WebDAV\WebDAVAdapter;
15-
use Spatie\FlysystemDropbox\DropboxAdapter;
1615
use Symfony\Component\DependencyInjection\Definition;
1716
use Symfony\Component\DependencyInjection\Reference;
1817
use Symfony\Component\OptionsResolver\OptionsResolver;

src/DependencyInjection/Configuration.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,7 @@ public function getConfigTreeBuilder()
3232
->arrayNode('filesystems')
3333
->arrayPrototype()
3434
->children()
35-
->scalarNode('adapter')->defaultNull()->end()
36-
->arrayNode('mounts')
37-
->scalarPrototype()
38-
->end()
39-
->end()
35+
->scalarNode('adapter')->isRequired()->end()
4036
->arrayNode('options')
4137
->variablePrototype()
4238
->end()

src/DependencyInjection/FlysystemExtension.php

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,10 @@
1111

1212
namespace League\FlysystemBundle\DependencyInjection;
1313

14-
use League\Flysystem\Cached\CachedAdapter;
15-
use League\Flysystem\Cached\Storage\Memory;
16-
use League\Flysystem\Cached\Storage\Psr6Cache;
1714
use League\Flysystem\Filesystem;
1815
use League\Flysystem\FilesystemInterface;
1916
use League\FlysystemBundle\Adapter\AdapterDefinitionFactory;
20-
use Symfony\Component\DependencyInjection\Alias;
2117
use Symfony\Component\DependencyInjection\ContainerBuilder;
22-
use Symfony\Component\DependencyInjection\ContainerInterface;
2318
use Symfony\Component\DependencyInjection\Definition;
2419
use Symfony\Component\DependencyInjection\Reference;
2520
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
@@ -36,51 +31,50 @@ public function load(array $configs, ContainerBuilder $container)
3631
$configuration = new Configuration();
3732
$config = $this->processConfiguration($configuration, $configs);
3833

39-
$this->registerCacheProviders($container);
4034
$this->registerFilesystems($container, $config['filesystems']);
4135

4236
// Create default filesystem alias
4337
if (!isset($config['filesystems'][$config['default_filesystem']])) {
4438
throw new \LogicException('Default filesystem "'.$config['default_filesystem'].'" is not defined in the "flysystem.filesystems" configuration key.');
4539
}
4640

47-
$defaultFsName = $config['default_filesystem'];
48-
$container->setAlias(FilesystemInterface::class, 'flysystem.filesystem.'.$defaultFsName)->setPublic(false);
49-
$container->setAlias('flysystem', 'flysystem.filesystem.'.$defaultFsName)->setPublic(false);
50-
}
51-
52-
private function registerCacheProviders(ContainerBuilder $container)
53-
{
54-
$container->setDefinition(
55-
'flysystem.cache.memory',
56-
(new Definition(Memory::class))
57-
->setPrivate(true)
58-
);
59-
60-
$container->setDefinition(
61-
'flysystem.cache.app',
62-
(new Definition(Psr6Cache::class))
63-
->setPrivate(true)
64-
->setArgument(0, new Reference('cache.app', ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE))
65-
);
41+
$container->setAlias(FilesystemInterface::class, $config['default_filesystem'])->setPublic(false);
42+
$container->setAlias('flysystem', $config['default_filesystem'])->setPublic(false);
6643
}
6744

6845
private function registerFilesystems(ContainerBuilder $container, array $filesystems)
6946
{
70-
$definitionFactory = new AdapterDefinitionFactory();
47+
$adapterFactory = new AdapterDefinitionFactory();
7148

7249
foreach ($filesystems as $fsName => $fsConfig) {
73-
if ($fsConfig['adapter'] && $fsConfig['mounts']) {
74-
throw new \LogicException('Definition of the filesystem "'.$fsName.'" is invalid: configuring both "adapter" and "mounts" keys is not allowed.');
75-
}
76-
77-
if ($fsConfig['adapter']) {
78-
$adapterDefinition = $definitionFactory->createDefinition($fsConfig['adapter'], $fsConfig['options']);
79-
} elseif ($fsConfig['mounts']) {
80-
$adapterDefinition = $definitionFactory->createDefinition('mount', $fsConfig['mounts']);
50+
// Create adapter service definition
51+
if ($adapter = $adapterFactory->createDefinition($fsConfig['adapter'], $fsConfig['options'])) {
52+
// Native adapter
53+
$container->setDefinition('flysystem.adapter.'.$fsName, $adapter)->setPublic(false);
8154
} else {
82-
throw new \LogicException('Definition of the filesystem "'.$fsName.'" is invalid: one of the "adapter" and "mounts" keys is required.');
55+
// Custom adapter
56+
$container->setAlias('flysystem.adapter.'.$fsName, $fsConfig['adapter'])->setPublic(false);
8357
}
58+
59+
// Create filesystem service definition
60+
$definition = $this->createFilesystemDefinition(new Reference('flysystem.adapter.'.$fsName), $fsConfig);
61+
62+
$container->setDefinition($fsName, $definition);
63+
$container->registerAliasForArgument($fsName, FilesystemInterface::class, $fsName)->setPublic(false);
8464
}
8565
}
66+
67+
private function createFilesystemDefinition(Reference $adapter, array $config)
68+
{
69+
$definition = new Definition(Filesystem::class);
70+
$definition->setPublic(false);
71+
$definition->setArgument(0, $adapter);
72+
$definition->setArgument(1, [
73+
'visibility' => $config['visibility'],
74+
'case_sensitive' => $config['case_sensitive'],
75+
'disable_asserts' => $config['disable_asserts'],
76+
]);
77+
78+
return $definition;
79+
}
8680
}

tests/Adapter/AdapterDefinitionFactoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class AdapterDefinitionFactoryTest extends TestCase
2020
{
2121
public function provideConfigOptions()
2222
{
23-
$config = Yaml::parseFile(__DIR__.'/Fixtures/full_config.yaml');
23+
$config = Yaml::parseFile(__DIR__.'/options.yaml');
2424

2525
foreach ($config as $fs) {
2626
yield $fs['adapter'] => [$fs['adapter'], $fs['options']];

0 commit comments

Comments
 (0)