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

liip / LiipImagineBundle / 17275109574

27 Aug 2025 06:16PM UTC coverage: 81.695% (+0.06%) from 81.636%
17275109574

Pull #1632

github

web-flow
Merge 91817a3ba into c00acc3c3
Pull Request #1632: Add ability to inject a custom S3 client on aws s3 resolver

23 of 25 new or added lines in 1 file covered. (92.0%)

2294 of 2808 relevant lines covered (81.7%)

102.84 hits per line

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

97.87
/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
            $awsS3ClientDefinition = new Definition('Aws\S3\S3Client');
104✔
31
            $awsS3ClientDefinition->setFactory(['Aws\S3\S3Client', 'factory']);
104✔
32
            $awsS3ClientDefinition->addArgument($config['client_config']);
104✔
33
            $container->setDefinition($awsS3ClientId, $awsS3ClientDefinition);
104✔
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
36✔
89
            ->children()
78✔
90
                ->scalarNode('bucket')
78✔
91
                    ->isRequired()
78✔
92
                    ->cannotBeEmpty()
78✔
93
                ->end()
78✔
94
                ->scalarNode('cache')
78✔
95
                    ->defaultFalse()
78✔
96
                ->end()
78✔
97
                ->scalarNode('acl')
78✔
98
                    ->defaultValue('public-read')
78✔
99
                    ->cannotBeEmpty()
78✔
100
                ->end()
78✔
101
                ->scalarNode('cache_prefix')
78✔
102
                    ->defaultValue('')
78✔
103
                ->end()
78✔
104
                ->scalarNode('client_id')
78✔
105
                    ->defaultNull()
78✔
106
                ->end()
78✔
107
                ->arrayNode('client_config')
78✔
108
                    ->isRequired()
78✔
109
                    ->prototype('variable')
78✔
110
                        ->treatNullLike([])
78✔
111
                    ->end()
78✔
112
                ->end()
78✔
113
                ->arrayNode('get_options')
78✔
114
                    ->useAttributeAsKey('key')
78✔
115
                        ->prototype('scalar')
78✔
116
                    ->end()
78✔
117
                ->end()
78✔
118
                ->arrayNode('put_options')
78✔
119
                    ->useAttributeAsKey('key')
78✔
120
                        ->prototype('scalar')
78✔
121
                    ->end()
78✔
122
                ->end()
78✔
123
                ->arrayNode('proxies')
78✔
124
                    ->defaultValue([])
78✔
125
                    ->useAttributeAsKey('name')
78✔
126
                        ->prototype('scalar')
78✔
127
                    ->end()
78✔
128
                ->end()
78✔
129
            ->end()
78✔
130
            ->beforeNormalization()
78✔
131
                ->ifTrue(static function ($v) {
36✔
132
                    return isset($v['client_id']) && isset($v['client_config']);
65✔
133
                })
78✔
134
                ->thenInvalid('Children config "client_id" and "client_config" cannot be configured at the same time.')
78✔
135
            ->end()
78✔
136
            ->beforeNormalization()
78✔
137
                ->ifTrue(static function ($v) {
36✔
138
                    return isset($v['client_id']);
65✔
139
                })
78✔
140
                ->then(function ($config) {
36✔
NEW
141
                    $config['client_config'] = [];
×
142

NEW
143
                    return $config;
×
144
                })
78✔
145
            ->end();
78✔
146
    }
42✔
147
}
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