Completed
Push — master ( 8816da...89d19f )
by Maringa
01:07
created

Converter   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 0 Features 0
Metric Value
wmc 5
c 4
b 0
f 0
lcom 1
cbo 1
dl 0
loc 46
ccs 22
cts 22
cp 1
rs 10
1
<?php
2
3
namespace MaringaDojo\Romanizer;
4
5
use MaringaDojo\Romanizer\Exceptions\MaisDeTresSimbolosIguaisException;
6
use MaringaDojo\Romanizer\Exceptions\SimboloInvalidoException;
7
8
class Converter
9
{
10
    private $romanoParaNumero = [
11
        'M' => 1000,
12
        'D' => 500,
13
        'C' => 100,
14
        'L' => 50,
15
        'X' => 10,
16
        'V' => 5,
17
        'I' => 1,
18
    ];
19 30
20
    public function toDecimal($numeroRomano)
21 30
    {
22 30
        $valor = 0;
23 30
        $valorAnterior = 0;
24
        $repeticoes = 0;
25 30
26 30
        for ($i = strlen($numeroRomano) - 1; $i >= 0; $i--) {
27 30
            $letra = $numeroRomano[$i];
28
29 30
            if (! array_key_exists($letra, $this->romanoParaNumero)) {
30 6
                throw new SimboloInvalidoException(
31
                    $letra . 'É um simbolo invalido'
32 6
                );
33 3
            }
34 2
35 2
            $valorAtual = $this->romanoParaNumero[$letra];
36
37 4
            if ($valorAtual == $valorAnterior) {
38 30
                $repeticoes++;
39
40
                if ($repeticoes >= 3) {
41 30
                    throw new MaisDeTresSimbolosIguaisException(
42 30
                        'Os simbolos só podem ser repitidos até três vezes.'
43 20
                    );
44 3
                }
45
            } else {
46
                $repeticoes = 0;
47 30
            }
48 20
49
            if ($valorAtual >= $valorAnterior) {
50 27
                $valor += $valorAtual;
51
            } else {
52
                $valor -= $valorAtual;
53
            }
54
55
            $valorAnterior = $valorAtual;
56
        }
57
58
        return $valor;
59
    }
60
61
    public function validaRepeticoes($entrada, $proximaEntrada = null)
62
    {
63
        $entrada == $proximaEntrada
64
    }
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Syntax error, unexpected '}'
Loading history...
65
}
66