Passed
Push — master ( 3a32ec...04e24a )
by Martijn
02:33
created

Definition   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Test Coverage

Coverage 80.77%

Importance

Changes 0
Metric Value
eloc 20
dl 0
loc 83
ccs 21
cts 26
cp 0.8077
rs 10
c 0
b 0
f 0
wmc 9

8 Methods

Rating   Name   Duplication   Size   Complexity  
A clearValidators() 0 5 1
A __construct() 0 7 2
A addValidator() 0 5 1
A build() 0 3 1
A copy() 0 4 1
A __invoke() 0 3 1
A addProcessor() 0 5 1
A setGenerator() 0 5 1
1
<?php
2
3
namespace Vanderlee\Comprehend\Builder;
4
5
use Vanderlee\Comprehend\Parser\Parser;
6
7
/**
8
 * Shorthand for parser definitions
9
 *
10
 * @author Martijn
11
 */
12
class Definition
13
{
14
    /**
15
     * @var callable|Parser
16
     */
17
    public $generator;
18
    public $validators = [];
19
    public $processors = [];
20
21
    /**
22
     * @param Parser|callable $generator Either a parser or a function returning a parser ('generator')
23
     * @param callable[] $validator
24
     */
25 25
    public function __construct($generator = null, $validator = null)
26
    {
27
        //@todo validate parser and validator
28
29 25
        $this->generator = $generator;
30 25
        if (is_callable($validator)) {
31 1
            $this->validators[] = $validator;
32
        }
33 25
    }
34
35
    /**
36
     * Copy the configuration of another definition
37
     *
38
     * @param Definition $definition
39
     */
40
    public function copy(Definition $definition) {
41
        $this->generator = $definition->generator;
42
        $this->validators = $definition->validators;
43
        $this->processors = $definition->processors;
44
    }
45
46 1
    public function setGenerator($parser)
47
    {
48 1
        $this->generator = $parser;
49
50 1
        return $this;
51
    }
52
53 1
    public function clearValidators()
54
    {
55 1
        $this->validators = [];
56
57 1
        return $this;
58
    }
59
60 3
    public function addValidator($validator)
61
    {
62 3
        $this->validators[] = $validator;
63
64 3
        return $this;
65
    }
66
67 1
    public function addProcessor($key, $processor)
68
    {
69 1
        $this->processors[$key] = $processor;
70
71 1
        return $this;
72
    }
73
74
    /**
75
     * Build an instance of this parser definition.
76
     *
77
     * @param Mixed[] $arguments
78
     * @return Implementation
79
     */
80 10
    public function build(...$arguments)
81
    {
82 10
        return new Implementation($this, $arguments);
83
    }
84
85
    /**
86
     * Build an instance of this parser definition.
87
     * Alias of `build()` method.
88
     *
89
     * @param Mixed[] $arguments
90
     * @return Implementation
91
     */
92 9
    public function __invoke(...$arguments)
93
    {
94 9
        return $this->build(...$arguments);
95
    }
96
97
}
98