AggregateResolverServiceFactory::__invoke()   C
last analyzed

Complexity

Conditions 8
Paths 22

Size

Total Lines 38
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 38
rs 5.3846
c 0
b 0
f 0
cc 8
eloc 20
nc 22
nop 1
1
<?php
2
3
namespace AssetManager\Core\Service;
4
5
use AssetManager\Core\Exception;
6
use AssetManager\Core\Resolver\AggregateResolver;
7
use AssetManager\Core\Resolver\AggregateResolverAwareInterface;
8
use AssetManager\Core\Resolver\MimeResolverAwareInterface;
9
use AssetManager\Core\Resolver\ResolverInterface;
10
use Psr\Container\ContainerInterface;
11
12
/**
13
 * Factory class for AssetManagerService
14
 *
15
 * @category   AssetManager
16
 * @package    AssetManager
17
 */
18
class AggregateResolverServiceFactory
19
{
20
    /**
21
     * @inheritDoc
22
     */
23
    public function __invoke(ContainerInterface $container)
24
    {
25
        $config         = $container->get('config');
26
        $config         = isset($config['asset_manager']) ? $config['asset_manager'] : array();
27
        $resolver       = new AggregateResolver();
28
29
        if (empty($config['resolvers'])) {
30
            return $resolver;
31
        }
32
33
        foreach ($config['resolvers'] as $resolverService => $priority) {
34
            $resolverService = $container->get($resolverService);
35
36
            if (!$resolverService instanceof ResolverInterface) {
37
                throw new Exception\RuntimeException(
38
                    'Service does not implement the required interface ResolverInterface.'
39
                );
40
            }
41
42
            if ($resolverService instanceof AggregateResolverAwareInterface) {
43
                $resolverService->setAggregateResolver($resolver);
44
            }
45
46
            if ($resolverService instanceof MimeResolverAwareInterface) {
47
                $resolverService->setMimeResolver($container->get(MimeResolver::class));
48
            }
49
50
            if ($resolverService instanceof AssetFilterManagerAwareInterface) {
51
                $resolverService->setAssetFilterManager(
52
                    $container->get(AssetFilterManager::class)
53
                );
54
            }
55
56
            $resolver->attach($resolverService, $priority);
57
        }
58
59
        return $resolver;
60
    }
61
}
62