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

liip / LiipImagineBundle / 17275236800

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

Pull #1632

github

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

22 of 24 new or added lines in 1 file covered. (91.67%)

2294 of 2808 relevant lines covered (81.7%)

102.82 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\DependencyInjection\Alias;
16
use Symfony\Component\DependencyInjection\ContainerBuilder;
17
use Symfony\Component\DependencyInjection\Definition;
18
use Symfony\Component\DependencyInjection\Reference;
19

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

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

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

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

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

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

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

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

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

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

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

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

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

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

77
        return $resolverId;
117✔
78
    }
79

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

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

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