Completed
Push — master ( 4c7b9c...e919dc )
by Kamil
21:11
created

HookableFixtureLoader   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 59
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 2
Bugs 1 Features 0
Metric Value
wmc 8
lcom 1
cbo 3
dl 0
loc 59
rs 10
c 2
b 1
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A load() 0 10 1
A executeBeforeFixtureListeners() 0 10 3
A executeAfterFixtureListeners() 0 10 3
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sylius\Bundle\FixturesBundle\Loader;
13
14
use Sylius\Bundle\FixturesBundle\Fixture\FixtureInterface;
15
use Sylius\Bundle\FixturesBundle\Listener\AfterFixtureListenerInterface;
16
use Sylius\Bundle\FixturesBundle\Listener\BeforeFixtureListenerInterface;
17
use Sylius\Bundle\FixturesBundle\Listener\FixtureEvent;
18
use Sylius\Bundle\FixturesBundle\Suite\SuiteInterface;
19
20
/**
21
 * @author Kamil Kokot <[email protected]>
22
 */
23
final class HookableFixtureLoader implements FixtureLoaderInterface
24
{
25
    /**
26
     * @var FixtureLoaderInterface
27
     */
28
    private $decoratedFixtureLoader;
29
30
    /**
31
     * @param FixtureLoaderInterface $decoratedFixtureLoader
32
     */
33
    public function __construct(FixtureLoaderInterface $decoratedFixtureLoader)
34
    {
35
        $this->decoratedFixtureLoader = $decoratedFixtureLoader;
36
    }
37
38
    /**
39
     * {@inheritdoc}
40
     */
41
    public function load(SuiteInterface $suite, FixtureInterface $fixture, array $options)
42
    {
43
        $fixtureEvent = new FixtureEvent($suite, $fixture, $options);
44
45
        $this->executeBeforeFixtureListeners($suite, $fixtureEvent);
46
47
        $this->decoratedFixtureLoader->load($suite, $fixture, $options);
48
49
        $this->executeAfterFixtureListeners($suite, $fixtureEvent);
50
    }
51
52
    /**
53
     * @param SuiteInterface $suite
54
     * @param FixtureEvent $fixtureEvent
55
     */
56
    private function executeBeforeFixtureListeners(SuiteInterface $suite, FixtureEvent $fixtureEvent)
57
    {
58
        foreach ($suite->getListeners() as $listener => $listenerOptions) {
59
            if (!$listener instanceof BeforeFixtureListenerInterface) {
60
                continue;
61
            }
62
63
            $listener->beforeFixture($fixtureEvent, $listenerOptions);
64
        }
65
    }
66
67
    /**
68
     * @param SuiteInterface $suite
69
     * @param FixtureEvent $fixtureEvent
70
     */
71
    private function executeAfterFixtureListeners(SuiteInterface $suite, FixtureEvent $fixtureEvent)
72
    {
73
        foreach ($suite->getListeners() as $listener => $listenerOptions) {
74
            if (!$listener instanceof AfterFixtureListenerInterface) {
75
                continue;
76
            }
77
78
            $listener->afterFixture($fixtureEvent, $listenerOptions);
79
        }
80
    }
81
}
82