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

Definition::setGenerator()   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
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
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