• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

liip / LiipImagineBundle / 17406338650

02 Sep 2025 02:14PM UTC coverage: 81.708% (+0.07%) from 81.636%
17406338650

Pull #1632

github

web-flow
Merge 10b4df27f into 0f7b8d60c
Pull Request #1632: Add ability to inject a custom S3 client on aws s3 resolver

24 of 26 new or added lines in 1 file covered. (92.31%)

2296 of 2810 relevant lines covered (81.71%)

103.0 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

97.92
/DependencyInjection/Factory/Resolver/AwsS3ResolverFactory.php
1
<?php
2

3
/*
4
 * This file is part of the `liip/LiipImagineBundle` project.
5
 *
6
 * (c) https://github.com/liip/LiipImagineBundle/graphs/contributors
7
 *
8
 * For the full copyright and license information, please view the LICENSE.md
9
 * file that was distributed with this source code.
10
 */
11

12
namespace Liip\ImagineBundle\DependencyInjection\Factory\Resolver;
13

14
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
15
use Symfony\Component\Config\Definition\Exception\InvalidConfigurationException;
16
use Symfony\Component\DependencyInjection\Alias;
17
use Symfony\Component\DependencyInjection\ContainerBuilder;
18
use Symfony\Component\DependencyInjection\Definition;
19
use Symfony\Component\DependencyInjection\Reference;
20

21
class AwsS3ResolverFactory extends AbstractResolverFactory
22
{
23
    public function create(ContainerBuilder $container, $resolverName, array $config)
24
    {
25
        $awsS3ClientId = 'liip_imagine.cache.resolver.'.$resolverName.'.client';
117✔
26

27
        if ($config['client_id']) {
117✔
28
            $container->setAlias($awsS3ClientId, new Alias($config['client_id']));
13✔
29
        } else {
30
            $container->setDefinition($awsS3ClientId, (new Definition('Aws\S3\S3Client'))
104✔
31
                ->setFactory(['Aws\S3\S3Client', 'factory'])
104✔
32
                ->addArgument($config['client_config'])
104✔
33
            );
48✔
34
        }
35

36
        $resolverDefinition = $this->getChildResolverDefinition();
117✔
37
        $resolverDefinition->replaceArgument(0, new Reference($awsS3ClientId));
117✔
38
        $resolverDefinition->replaceArgument(1, $config['bucket']);
117✔
39
        $resolverDefinition->replaceArgument(2, $config['acl']);
117✔
40
        $resolverDefinition->replaceArgument(3, $config['get_options']);
117✔
41
        $resolverDefinition->replaceArgument(4, $config['put_options']);
117✔
42

43
        $resolverId = 'liip_imagine.cache.resolver.'.$resolverName;
117✔
44
        $container->setDefinition($resolverId, $resolverDefinition);
117✔
45

46
        if (isset($config['cache_prefix'])) {
117✔
47
            $resolverDefinition->addMethodCall('setCachePrefix', [$config['cache_prefix']]);
13✔
48
        }
49

50
        if ($config['proxies']) {
117✔
51
            $proxiedResolverId = 'liip_imagine.cache.resolver.'.$resolverName.'.proxied';
39✔
52

53
            $container->setDefinition($proxiedResolverId, $resolverDefinition);
39✔
54

55
            $proxyResolverDefinition = $this->getChildResolverDefinition('proxy');
39✔
56
            $proxyResolverDefinition->replaceArgument(0, new Reference($proxiedResolverId));
39✔
57
            $proxyResolverDefinition->replaceArgument(1, $config['proxies']);
39✔
58

59
            $container->setDefinition($resolverId, $proxyResolverDefinition);
39✔
60
        }
61

62
        if ($config['cache']) {
117✔
63
            $cachedResolverId = 'liip_imagine.cache.resolver.'.$resolverName.'.cached';
39✔
64

65
            $container->setDefinition($cachedResolverId, $container->getDefinition($resolverId));
39✔
66

67
            $cacheResolverDefinition = $this->getChildResolverDefinition('cache');
39✔
68
            $cacheResolverDefinition->replaceArgument(0, new Reference($config['cache']));
39✔
69
            $cacheResolverDefinition->replaceArgument(1, new Reference($cachedResolverId));
39✔
70

71
            $container->setDefinition($resolverId, $cacheResolverDefinition);
39✔
72
        }
73

74
        $container->getDefinition($resolverId)->addTag('liip_imagine.cache.resolver', [
117✔
75
            'resolver' => $resolverName,
117✔
76
        ]);
54✔
77

78
        return $resolverId;
117✔
79
    }
80

81
    public function getName()
82
    {
83
        return 'aws_s3';
130✔
84
    }
85

86
    public function addConfiguration(ArrayNodeDefinition $builder)
87
    {
88
        $builder
42✔
89
            ->children()
91✔
90
                ->scalarNode('bucket')
91✔
91
                    ->isRequired()
91✔
92
                    ->cannotBeEmpty()
91✔
93
                ->end()
91✔
94
                ->scalarNode('cache')
91✔
95
                    ->defaultFalse()
91✔
96
                ->end()
91✔
97
                ->scalarNode('acl')
91✔
98
                    ->defaultValue('public-read')
91✔
99
                    ->cannotBeEmpty()
91✔
100
                ->end()
91✔
101
                ->scalarNode('cache_prefix')
91✔
102
                    ->defaultValue('')
91✔
103
                ->end()
91✔
104
                ->scalarNode('client_id')
91✔
105
                    ->defaultNull()
91✔
106
                ->end()
91✔
107
                ->arrayNode('client_config')
91✔
108
                    ->isRequired()
91✔
109
                    ->prototype('variable')
91✔
110
                        ->treatNullLike([])
91✔
111
                    ->end()
91✔
112
                ->end()
91✔
113
                ->arrayNode('get_options')
91✔
114
                    ->useAttributeAsKey('key')
91✔
115
                        ->prototype('scalar')
91✔
116
                    ->end()
91✔
117
                ->end()
91✔
118
                ->arrayNode('put_options')
91✔
119
                    ->useAttributeAsKey('key')
91✔
120
                        ->prototype('scalar')
91✔
121
                    ->end()
91✔
122
                ->end()
91✔
123
                ->arrayNode('proxies')
91✔
124
                    ->defaultValue([])
91✔
125
                    ->useAttributeAsKey('name')
91✔
126
                        ->prototype('scalar')
91✔
127
                    ->end()
91✔
128
                ->end()
91✔
129
            ->end()
91✔
130
            ->beforeNormalization()
91✔
131
                ->ifTrue(static function ($v) {
42✔
132
                    return isset($v['client_id']) && isset($v['client_config']);
78✔
133
                })
91✔
134
                ->then(static function ($v) {
42✔
135
                    throw new InvalidConfigurationException('Children config "client_id" and "client_config" cannot be configured at the same time.');
13✔
136
                })
91✔
137
            ->end()
91✔
138
            ->beforeNormalization()
91✔
139
                ->ifTrue(static function ($v) {
42✔
140
                    return isset($v['client_id']);
65✔
141
                })
91✔
142
                ->then(function ($config) {
42✔
NEW
143
                    $config['client_config'] = [];
×
144

NEW
145
                    return $config;
×
146
                })
91✔
147
            ->end();
91✔
148
    }
49✔
149
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc