CodeDetector::isCodeLine()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 4
nc 3
nop 1
dl 0
loc 9
rs 9.6666
c 0
b 0
f 0
1
<?php
2
3
namespace PhpEarth\Stats\Util;
4
5
class CodeDetector
6
{
7
    /**
8
     * @var int
9
     */
10
    private $minCodeLines;
11
12
    /**
13
     * @var array
14
     */
15
    private $patterns;
16
17
    /**
18
     * @param int $minCodeLines
19
     */
20
    public function setMinCodeLines($minCodeLines)
21
    {
22
        $this->minCodeLines = $minCodeLines;
23
    }
24
25
    /**
26
     * Set array of regex code patters.
27
     *
28
     * @param array $patterns
29
     */
30
    public function setPatterns($patterns)
31
    {
32
        $this->patterns = $patterns;
33
    }
34
35
    /**
36
     * Determine if message contains code.
37
     *
38
     * @param string $message
39
     * @return bool
40
     */
41
    public function isCode($message)
42
    {
43
        $lines = array_map('trim', explode("\n", $message));
44
        $codeLines = 0;
45
        foreach ($lines as $line) {
46
            if ($line == "") {
47
                continue;
48
            }
49
50
            if ($this->isCodeLine($line)) {
51
                if (++$codeLines >= $this->minCodeLines) {
52
                    return true;
53
                }
54
            }
55
        }
56
57
        return false;
58
    }
59
60
    /**
61
     * Determines whether text line is a code line.
62
     *
63
     * @param string $line The line to check.
64
     *
65
     * @return boolean True if the line is a line of code, otherwise false.
66
     */
67
    private function isCodeLine($line)
68
    {
69
        foreach ($this->patterns as $pattern) {
70
            if (preg_match($pattern, $line) === 1) {
71
                return true;
72
            }
73
        }
74
75
        return false;
76
    }
77
}
78