Configuration::defaultProxyAutoRefresh()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 13
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 3

Importance

Changes 1
Bugs 1 Features 0
Metric Value
eloc 6
c 1
b 1
f 0
dl 0
loc 13
ccs 6
cts 6
cp 1
rs 10
cc 3
nc 3
nop 0
crap 3
1
<?php
2
3
namespace Zenstruck\Foundry;
4
5
use Doctrine\Persistence\ManagerRegistry;
6
use Doctrine\Persistence\ObjectManager;
7
use Faker;
8
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
9
10
/**
11
 * @internal
12
 *
13
 * @author Kevin Bond <[email protected]>
14
 */
15
final class Configuration
16
{
17
    /** @var ManagerRegistry|null */
18
    private $managerRegistry;
19
20
    /** @var StoryManager */
21
    private $stories;
22
23
    /** @var ModelFactoryManager */
24
    private $factories;
25
26
    /** @var Faker\Generator */
27
    private $faker;
28
29
    /** @var callable */
30
    private $instantiator;
31
32
    /** @var bool|null */
33
    private $defaultProxyAutoRefresh;
34
35 968
    public function __construct()
36
    {
37 968
        $this->stories = new StoryManager([]);
38 968
        $this->factories = new ModelFactoryManager([]);
39 968
        $this->faker = Faker\Factory::create();
40 968
        $this->instantiator = new Instantiator();
41 968
    }
42
43 405
    public function stories(): StoryManager
44
    {
45 405
        return $this->stories;
46
    }
47
48 607
    public function factories(): ModelFactoryManager
49
    {
50 607
        return $this->factories;
51
    }
52
53 964
    public function faker(): Faker\Generator
54
    {
55 964
        return $this->faker;
56
    }
57
58 793
    public function instantiator(): callable
59
    {
60 793
        return $this->instantiator;
61
    }
62
63 857
    public function defaultProxyAutoRefresh(): bool
64
    {
65 857
        if (!$this->hasManagerRegistry()) {
66
            return false;
67
        }
68 708
69
        if (null === $this->defaultProxyAutoRefresh) {
70 708
            trigger_deprecation('zenstruck\foundry', '1.9', 'Not explicitly configuring the default proxy auto-refresh is deprecated and will default to "true" in 2.0. Use "zenstruck_foundry.auto_refresh_proxies" in the bundle config or TestState::enableDefaultProxyAutoRefresh()/disableDefaultProxyAutoRefresh().');
71
72 708
            $this->defaultProxyAutoRefresh = false;
73
        }
74
75 270
        return $this->defaultProxyAutoRefresh;
76
    }
77 270
78
    public function setManagerRegistry(ManagerRegistry $managerRegistry): self
79 270
    {
80
        $this->managerRegistry = $managerRegistry;
81
82 260
        return $this;
83
    }
84 260
85
    public function setInstantiator(callable $instantiator): self
86 260
    {
87
        $this->instantiator = $instantiator;
88
89 260
        return $this;
90
    }
91 260
92
    public function setStoryManager(StoryManager $manager): self
93 260
    {
94
        $this->stories = $manager;
95
96 270
        return $this;
97
    }
98 270
99
    public function setModelFactoryManager(ModelFactoryManager $manager): self
100 270
    {
101
        $this->factories = $manager;
102
103
        return $this;
104
    }
105
106
    public function setFaker(Faker\Generator $faker): self
107
    {
108
        $this->faker = $faker;
109
110
        return $this;
111
    }
112
113
    public function enableDefaultProxyAutoRefresh(): self
114
    {
115
        $this->defaultProxyAutoRefresh = true;
116
117
        return $this;
118
    }
119 360
120
    public function disableDefaultProxyAutoRefresh(): self
121 360
    {
122
        $this->defaultProxyAutoRefresh = false;
123
124
        return $this;
125 360
    }
126 10
127
    /**
128
     * @param object|string $objectOrClass
129 360
     *
130
     * @psalm-suppress InvalidReturnType
131
     * @psalm-suppress InvalidReturnStatement
132
     * @template TObject of object
133
     * @psalm-param Proxy<TObject>|TObject|class-string<TObject> $objectOrClass
134
     * @psalm-return RepositoryProxy<TObject>
135 645
     */
136
    public function repositoryFor($objectOrClass): RepositoryProxy
137 645
    {
138
        if ($objectOrClass instanceof Proxy) {
139 645
            $objectOrClass = $objectOrClass->object();
140
        }
141
142
        if (!\is_string($objectOrClass)) {
143 635
            $objectOrClass = \get_class($objectOrClass);
144
        }
145
146
        return new RepositoryProxy($this->managerRegistry()->getRepository($objectOrClass));
147 855
    }
148
149 855
    /**
150
     * @param object|string $objectOrClass
151
     */
152 695
    public function objectManagerFor($objectOrClass): ObjectManager
153
    {
154 695
        $class = \is_string($objectOrClass) ? $objectOrClass : \get_class($objectOrClass);
155
156 10
        if (!$objectManager = $this->managerRegistry()->getManagerForClass($class)) {
157
            throw new \RuntimeException(\sprintf('No object manager registered for "%s".', $class));
158
        }
159 685
160
        return $objectManager;
161
    }
162
163
    /** @psalm-assert !null $this->managerRegistry */
164
    public function hasManagerRegistry(): bool
165
    {
166
        return null !== $this->managerRegistry;
167
    }
168
169
    private function managerRegistry(): ManagerRegistry
170
    {
171
        if (!$this->hasManagerRegistry()) {
172
            /** @psalm-suppress MissingDependency */
173
            throw new \RuntimeException('Foundry was booted without doctrine. Ensure your TestCase extends '.KernelTestCase::class);
174
        }
175
176
        return $this->managerRegistry;
177
    }
178
}
179