AggregateResolverServiceFactory   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 3

Importance

Changes 0
Metric Value
wmc 8
lcom 0
cbo 3
dl 0
loc 44
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
C __invoke() 0 38 8
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