Test Failed
Push — master ( e042c7...883f5c )
by Hannes
02:15
created

EngineBuilder   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
dl 0
loc 62
rs 10
c 0
b 0
f 0
wmc 8

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setIgnoreUnknownAnnotations() 0 3 1
A getRunner() 0 7 2
A setRunner() 0 4 1
A getFilter() 0 3 2
A buildEngine() 0 12 1
A setFilter() 0 4 1
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace hanneskod\readmetester;
6
7
use hanneskod\readmetester\Example\ExampleFactory;
8
use hanneskod\readmetester\Example\FilterInterface;
9
use hanneskod\readmetester\Example\NullFilter;
10
use hanneskod\readmetester\Parser\Parser;
11
use hanneskod\readmetester\Expectation\ExpectationEvaluator;
12
use hanneskod\readmetester\Expectation\ExpectationFactory;
13
use hanneskod\readmetester\Runner\RunnerInterface;
14
15
class EngineBuilder
16
{
17
    /**
18
     * @var FilterInterface
19
     */
20
    private $filter;
21
22
    /**
23
     * @var RunnerInterface
24
     */
25
    private $runner;
26
27
    /**
28
     * @var bool
29
     */
30
    private $ignoreUnknownAnnotations = false;
31
32
    public function setIgnoreUnknownAnnotations($flag = true)
33
    {
34
        $this->ignoreUnknownAnnotations = $flag;
35
    }
36
37
    public function setFilter(FilterInterface $filter): self
38
    {
39
        $this->filter = $filter;
40
        return $this;
41
    }
42
43
    public function setRunner(RunnerInterface $runner): self
44
    {
45
        $this->runner = $runner;
46
        return $this;
47
    }
48
49
    public function buildEngine(): Engine
50
    {
51
        return new Engine(
52
            new Parser,
53
            new ExampleFactory(
54
                new ExpectationFactory,
55
                $this->getFilter(),
56
                $this->ignoreUnknownAnnotations
57
            ),
58
            new ExampleTester(
59
                $this->getRunner(),
60
                new ExpectationEvaluator
61
            )
62
        );
63
    }
64
65
    private function getFilter(): FilterInterface
66
    {
67
        return $this->filter ?: new NullFilter;
68
    }
69
70
    private function getRunner(): RunnerInterface
71
    {
72
        if (!isset($this->runner)) {
73
            throw new \LogicException('Unable to create engine, runner not set');
74
        }
75
76
        return $this->runner;
77
    }
78
}
79