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

liip / LiipImagineBundle / 17410509054

02 Sep 2025 04:57PM UTC coverage: 81.741% (+0.07%) from 81.668%
17410509054

Pull #1632

github

web-flow
Merge 676cfd14c into e603ff49d
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%)

2301 of 2815 relevant lines covered (81.74%)

103.08 hits per line

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

98.02
/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';
130✔
26

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

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

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

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

50
        if ($config['proxies']) {
130✔
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']) {
130✔
63
            $cachedResolverId = 'liip_imagine.cache.resolver.'.$resolverName.'.cached';
52✔
64

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

67
            if (false === $config['use_psr_cache']) {
52✔
68
                trigger_deprecation('liip/imagine-bundle', '2.13.4', \sprintf('Setting the "liip_imagine.resolvers.%s.%s.use_psr_cache" config option to "false" is deprecated.', $resolverName, $this->getName()));
39✔
69
            }
70

71
            $cacheResolverDefinition = $this->getChildResolverDefinition($config['use_psr_cache'] ? 'psr_cache' : 'cache');
52✔
72
            $cacheResolverDefinition->replaceArgument(0, new Reference($config['cache']));
52✔
73
            $cacheResolverDefinition->replaceArgument(1, new Reference($cachedResolverId));
52✔
74

75
            $container->setDefinition($resolverId, $cacheResolverDefinition);
52✔
76
        }
77

78
        $container->getDefinition($resolverId)->addTag('liip_imagine.cache.resolver', [
130✔
79
            'resolver' => $resolverName,
130✔
80
        ]);
60✔
81

82
        return $resolverId;
130✔
83
    }
84

85
    public function getName()
86
    {
87
        return 'aws_s3';
143✔
88
    }
89

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

NEW
152
                    return $config;
×
153
                })
91✔
154
            ->end();
91✔
155
    }
49✔
156
}
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