RuleBook   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 51
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
eloc 11
c 0
b 0
f 0
dl 0
loc 51
ccs 12
cts 12
cp 1
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A validate() 0 9 3
A addRule() 0 4 1
A setRules() 0 4 1
1
<?php
2
3
/**
4
 * This file is part of CaptainHook
5
 *
6
 * (c) Sebastian Feldmann <[email protected]>
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 CaptainHook\App\Hook\Message;
13
14
use SebastianFeldmann\Git\CommitMessage;
15
16
/**
17
 * Class RuleBook
18
 *
19
 * @package CaptainHook
20
 * @author  Sebastian Feldmann <[email protected]>
21
 * @link    https://github.com/captainhook-git/captainhook
22
 * @since   Class available since Release 0.9.0
23
 */
24
class RuleBook
25
{
26
    /**
27
     * List of rules to check
28
     *
29
     * @var \CaptainHook\App\Hook\Message\Rule[]
30
     */
31
    private $rules = [];
32
33
    /**
34
     * Set rules to check
35
     *
36
     * @param  \CaptainHook\App\Hook\Message\Rule[] $rules
37
     * @return \CaptainHook\App\Hook\Message\RuleBook
38
     */
39 7
    public function setRules(array $rules): RuleBook
40
    {
41 7
        $this->rules = $rules;
42 7
        return $this;
43
    }
44
45
    /**
46
     * Add a rule to the list
47
     *
48
     * @param  \CaptainHook\App\Hook\Message\Rule $rule
49
     * @return \CaptainHook\App\Hook\Message\RuleBook
50
     */
51 4
    public function addRule(Rule $rule): RuleBook
52
    {
53 4
        $this->rules[] = $rule;
54 4
        return $this;
55
    }
56
57
    /**
58
     * Validates all rules
59
     *
60
     * Returns a list of problems found checking the commit message.
61
     * If the list is empty the message is valid.
62
     *
63
     * @param  \SebastianFeldmann\Git\CommitMessage $msg
64
     * @return array<string>
65
     */
66 12
    public function validate(CommitMessage $msg): array
67
    {
68 12
        $problems = [];
69 12
        foreach ($this->rules as $rule) {
70 10
            if (!$rule->pass($msg)) {
71 6
                $problems[] = $rule->getHint();
72
            }
73
        }
74 12
        return $problems;
75
    }
76
}
77