Passed
Push — master ( b80d77...ea8430 )
by Kevin
14:18 queued 12:14
created

Configuration::setStoryManager()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 2
c 0
b 0
f 0
dl 0
loc 5
rs 10
ccs 3
cts 3
cp 1
cc 1
nc 1
nop 1
crap 1
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 */
33
    private $defaultProxyAutoRefresh = false;
34
35 734
    public function __construct()
36
    {
37 734
        $this->stories = new StoryManager([]);
38 734
        $this->factories = new ModelFactoryManager([]);
39 734
        $this->faker = Faker\Factory::create();
40 734
        $this->instantiator = new Instantiator();
41 734
    }
42
43 258
    public function stories(): StoryManager
44
    {
45 258
        return $this->stories;
46
    }
47
48 436
    public function factories(): ModelFactoryManager
49
    {
50 436
        return $this->factories;
51
    }
52
53 731
    public function faker(): Faker\Generator
54
    {
55 731
        return $this->faker;
56
    }
57
58 588
    public function instantiator(): callable
59
    {
60 588
        return $this->instantiator;
61
    }
62
63 640
    public function defaultProxyAutoRefresh(): bool
64
    {
65 640
        return $this->defaultProxyAutoRefresh;
66
    }
67
68 526
    public function setManagerRegistry(ManagerRegistry $managerRegistry): self
69
    {
70 526
        $this->managerRegistry = $managerRegistry;
71
72 526
        return $this;
73
    }
74
75 188
    public function setInstantiator(callable $instantiator): self
76
    {
77 188
        $this->instantiator = $instantiator;
78
79 188
        return $this;
80
    }
81
82 180
    public function setStoryManager(StoryManager $manager): self
83
    {
84 180
        $this->stories = $manager;
85
86 180
        return $this;
87
    }
88
89 180
    public function setModelFactoryManager(ModelFactoryManager $manager): self
90
    {
91 180
        $this->factories = $manager;
92
93 180
        return $this;
94
    }
95
96 188
    public function setFaker(Faker\Generator $faker): self
97
    {
98 188
        $this->faker = $faker;
99
100 188
        return $this;
101
    }
102
103
    public function alwaysAutoRefreshProxies(): self
104
    {
105
        $this->defaultProxyAutoRefresh = true;
106
107
        return $this;
108
    }
109
110
    /**
111
     * @param object|string $objectOrClass
112
     */
113 248
    public function repositoryFor($objectOrClass): RepositoryProxy
114
    {
115 248
        if ($objectOrClass instanceof Proxy) {
116
            $objectOrClass = $objectOrClass->object();
117
        }
118
119 248
        if (!\is_string($objectOrClass)) {
120 8
            $objectOrClass = \get_class($objectOrClass);
121
        }
122
123 248
        return new RepositoryProxy($this->managerRegistry()->getRepository($objectOrClass));
124
    }
125
126
    /**
127
     * @param object|string $objectOrClass
128
     */
129 468
    public function objectManagerFor($objectOrClass): ObjectManager
130
    {
131 468
        $class = \is_string($objectOrClass) ? $objectOrClass : \get_class($objectOrClass);
132
133 468
        if (!$objectManager = $this->managerRegistry()->getManagerForClass($class)) {
134
            throw new \RuntimeException(\sprintf('No object manager registered for "%s".', $class));
135
        }
136
137 460
        return $objectManager;
138
    }
139
140 640
    public function hasManagerRegistry(): bool
141
    {
142 640
        return null !== $this->managerRegistry;
143
    }
144
145 512
    private function managerRegistry(): ManagerRegistry
146
    {
147 512
        if (!$this->hasManagerRegistry()) {
148 8
            throw new \RuntimeException('Foundry was booted without doctrine. Ensure your TestCase extends '.KernelTestCase::class);
149
        }
150
151 504
        return $this->managerRegistry;
152
    }
153
}
154