AbstractAnimal   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 100
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Importance

Changes 0
Metric Value
wmc 10
lcom 1
cbo 0
dl 0
loc 100
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A say() 0 10 1
A extendBubble() 0 10 1
A getMessageLines() 0 9 1
A getMaxLineLength() 0 15 4
A getSpeechBubble() 0 22 3
1
<?php
2
namespace Cowsayphp;
3
4
abstract class AbstractAnimal implements AnimalInterface
5
{
6
    protected $character;
7
8
    /**
9
     * Make the animal speak.
10
     * @param $text string A string you want the animal says
11
     * @return string The animal speaks...
12
     */
13
    public function say($text)
14
    {
15
        $message = $this->getSpeechBubble($text);
16
        
17
        return str_replace(
18
          '{{bubble}}',
19
          $message,
20
          $this->character
21
        );
22
    }
23
24
    /**
25
     * Used to pad the bubble to fit at least the size of the animal with empty spaces.
26
     * @param $message
27
     * @return string
28
     */
29
    public function extendBubble($message)
30
    {
31
        $characterLength = $this->getMaxLineLength($this->character);
32
        $exploded_message = explode("\n", $message);
33
        $padded_message = array_map( function ($line) use ($characterLength) {
34
            return str_pad($line, $characterLength, ' ');
35
        },$exploded_message);
36
37
        return implode("\n",$padded_message);
38
    }
39
40
    /**
41
     * Obtain the message as array wrapping the text
42
     * @param $text
43
     * @return array
44
     */
45
    public function getMessageLines($text)
46
    {
47
        $message = $text;
48
        $wrapLength = 40;
49
        // wrap the message to max chars
50
        $message = wordwrap($message, $wrapLength - 2);
51
        // split into array of lines
52
        return explode("\n", $message);
53
    }
54
55
    /**
56
     * Find the longest line and get the line length
57
     * @param array $lines
58
     * @return int
59
     */
60
    public function getMaxLineLength($lines)
61
    {
62
        if (!is_array($lines)) {
63
            $lines = explode("\n", $lines);
64
        }
65
        $lineLength = 0;
66
        // find the longest line
67
        foreach ($lines as $line) {
68
            $currentLineLength = strlen($line);
69
            if ($currentLineLength > $lineLength) {
70
                $lineLength = $currentLineLength;
71
            }
72
        }
73
        return $lineLength;
74
    }
75
76
    /**
77
     * Obtain the speech bubble.
78
     * @param $text
79
     * @return string
80
     */
81
    public function getSpeechBubble($text)
82
    {
83
        $lines = $this->getMessageLines($text);
84
        $lineLength = $this->getMaxLineLength($lines);
85
        $text = '';
0 ignored issues
show
Unused Code introduced by
$text is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
86
        $numberOfLines = count($lines);
87
        $firstLine = str_pad(array_shift($lines), $lineLength);
88
        if ($numberOfLines === 1) {
89
            $text = "< {$firstLine} >";
90
        } else {
91
            $lastLine = str_pad(array_pop($lines), $lineLength);
92
            $text = "/ {$firstLine} \\\n";
93
            foreach ($lines as $line) {
94
                $line = str_pad($line, $lineLength);
95
                $text .= "| {$line} |\n";
96
            }
97
            $text .= "\\ {$lastLine} /";
98
        }
99
100
        $text = $this->extendBubble($text);
101
        return $text;
102
    }
103
}