Completed
Push — master ( 05ef67...ffb6b0 )
by Саша
10:40 queued 08:12
created

DefaultPipeline::dispatch()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
rs 9.4285
cc 2
eloc 4
nc 2
nop 2
1
<?php
2
3
namespace Extraload\Pipeline;
4
5
use Extraload\Extractor\ExtractorInterface;
6
use Extraload\Transformer\TransformerInterface;
7
use Extraload\Loader\LoaderInterface;
8
use Extraload\Events;
9
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
10
use Symfony\Component\EventDispatcher\GenericEvent;
11
12
class DefaultPipeline implements PipelineInterface
13
{
14
    private $extractor;
15
    private $transformer;
16
    private $loader;
17
    private $eventDispatcher;
18
19
    public function __construct(
20
        ExtractorInterface $extractor,
21
        TransformerInterface $transformer,
22
        LoaderInterface $loader,
23
        EventDispatcherInterface $eventDispatcher = null
24
    ) {
25
        $this->extractor = $extractor;
26
        $this->transformer = $transformer;
27
        $this->loader = $loader;
28
        $this->eventDispatcher = $eventDispatcher;
29
    }
30
31
    public function process()
32
    {
33
        $this->dispatch(Events::PRE_PROCESS);
34
35
        while (null !== $extracted = $this->extractor->extract()) {
36
            $this->dispatch(Events::EXTRACT, $extracted);
37
38
            $transformed = $this->transformer->transform($extracted);
39
            $this->dispatch(Events::TRANSFORM, $transformed);
40
41
            $this->loader->load($transformed);
42
            $this->dispatch(Events::LOAD);
43
        }
44
45
        $this->loader->flush();
46
47
        $this->dispatch(Events::POST_PROCESS);
48
    }
49
50
    private function dispatch($name, $subject = null)
51
    {
52
        if (null === $this->eventDispatcher) {
53
            return;
54
        }
55
56
        $this->eventDispatcher->dispatch($name, new GenericEvent($subject));
57
    }
58
}
59