MD5SignatureCalculator   A
last analyzed

Complexity

Total Complexity 2

Size/Duplication

Total Lines 41
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 2
eloc 14
c 1
b 0
f 0
dl 0
loc 41
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A calculate() 0 9 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Skrill\Signature;
6
7
use Money\Money;
8
use Money\MoneyFormatter;
9
use Skrill\ValueObject\Signature;
10
use Skrill\ValueObject\SecretWord;
11
use Skrill\ValueObject\MerchantID;
12
use Skrill\ValueObject\TransactionID;
13
14
/**
15
 * Class MD5SignatureCalculator.
16
 */
17
final class MD5SignatureCalculator implements SignatureCalculator
18
{
19
    /**
20
     * @var SecretWord
21
     */
22
    private $secretWord;
23
24
    /**
25
     * @var
26
     */
27
    private $merchantId;
28
29
    /**
30
     * @var MoneyFormatter
31
     */
32
    private $moneyFormatter;
33
34
    /**
35
     * @param SecretWord     $secretWord
36
     * @param MerchantID     $merchantId
37
     * @param MoneyFormatter $moneyFormatter
38
     */
39
    public function __construct(SecretWord $secretWord, MerchantID $merchantId, MoneyFormatter $moneyFormatter)
40
    {
41
        $this->secretWord = $secretWord;
42
        $this->merchantId = $merchantId;
43
        $this->moneyFormatter = $moneyFormatter;
44
    }
45
46
    /**
47
     * {@inheritdoc}
48
     */
49
    public function calculate(TransactionID $transactionId, Money $amount, int $status): Signature
50
    {
51
        return new Signature(strtoupper(md5(implode([
52
            $this->merchantId->getValue(),
53
            $transactionId,
54
            strtoupper(md5(strval($this->secretWord))),
55
            $this->moneyFormatter->format($amount),
56
            $amount->getCurrency(),
57
            $status,
58
        ]))));
59
    }
60
}
61