Passed
Push — master ( 71496d...2fe95c )
by Alec
02:26
created

MessageJuggler   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 8
eloc 25
c 4
b 0
f 0
dl 0
loc 76
ccs 26
cts 28
cp 0.9286
rs 10

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setMessage() 0 3 1
A refineErasingLen() 0 6 2
A __construct() 0 4 1
A getCurrentFrame() 0 3 1
A refineMessage() 0 3 1
A updateMessage() 0 16 2
1
<?php declare(strict_types=1);
2
3
namespace AlecRabbit\Spinner\Core\Jugglers;
4
5
use AlecRabbit\Spinner\Core\Calculator;
6
use AlecRabbit\Spinner\Core\Coloring\Scott;
7
use AlecRabbit\Spinner\Core\Style;
0 ignored issues
show
Bug introduced by
The type AlecRabbit\Spinner\Core\Style was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
8
use AlecRabbit\Spinner\Settings\Contracts\Defaults;
9
10
class MessageJuggler extends AbstractJuggler
11
{
12
    /** @var string */
13
    protected $message;
14
    /** @var int */
15
    protected $erasingLength;
16
    /** @var string */
17
    protected $frameString;
18
    /** @var string */
19
    protected $suffix;
20
21 22
    public function __construct(string $message, ?int $erasingLength, Scott $style)
22
    {
23 22
        $this->init($style);
24 22
        $this->updateMessage($message, $erasingLength);
25 22
    }
26
27
    /**
28
     * @param string $message
29
     * @param null|int $erasingLength
30
     */
31 22
    protected function updateMessage(string $message, ?int $erasingLength): void
32
    {
33 22
        $this->message = $this->refineMessage($message);
34 22
        if (Defaults::EMPTY_STRING === $this->message) {
35
            $this->erasingLength = 0;
36
            $this->suffix = Defaults::EMPTY_STRING;
37
        } else {
38 22
            $erasingLength = $this->refineErasingLen($this->message, $erasingLength);
39 22
            $this->erasingLength = $erasingLength;
40 22
            $this->suffix = Defaults::DOTS_SUFFIX;
41
        }
42 22
        $this->frameString =
43 22
            $this->message . $this->suffix;
44
45 22
        $this->currentFrameErasingLength =
46 22
            strlen($this->suffix . $this->spacer) + $this->erasingLength + $this->formatErasingShift;
47 22
    }
48
49
    /**
50
     * @param string $message
51
     * @return string
52
     */
53 22
    protected function refineMessage(string $message): string
54
    {
55 22
        return ucfirst($message);
56
    }
57
58
    /**
59
     * @param string $message
60
     * @param null|int $erasingLength
61
     * @return int
62
     */
63 22
    protected function refineErasingLen(string $message, ?int $erasingLength): int
64
    {
65 22
        if (null === $erasingLength) {
66 5
            return Calculator::computeErasingLength([$message]);
67
        }
68 21
        return $erasingLength;
69
    }
70
71
    /**
72
     * @param string $message
73
     * @param null|int $erasingLength
74
     */
75 4
    public function setMessage(string $message, ?int $erasingLength = null): void
76
    {
77 4
        $this->updateMessage($message, $erasingLength);
78 4
    }
79
80
    /**
81
     * @return string
82
     */
83 21
    protected function getCurrentFrame(): string
84
    {
85 21
        return $this->frameString;
86
    }
87
}
88