GvpBuilderFactory::createBuilder()   B
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 45
Code Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 45
rs 8.6897
c 0
b 0
f 0
cc 6
nc 6
nop 1
1
<?php
2
namespace Paranoia\Builder;
3
4
use Paranoia\Builder\Gvp\CancelRequestBuilder;
5
use Paranoia\Builder\Gvp\PostAuthorizationRequestBuilder;
6
use Paranoia\Builder\Gvp\PreAuthorizationRequestBuilder;
7
use Paranoia\Builder\Gvp\RefundRequestBuilder;
8
use Paranoia\Builder\Gvp\SaleRequestBuilder;
9
use Paranoia\Exception\NotImplementedError;
10
use Paranoia\Formatter\Gvp\ExpireDateFormatter;
11
use Paranoia\Formatter\IsoNumericCurrencyCodeFormatter;
12
use Paranoia\Formatter\MoneyFormatter;
13
use Paranoia\Formatter\SingleDigitInstallmentFormatter;
14
use Paranoia\TransactionType;
15
16
class GvpBuilderFactory extends AbstractBuilderFactory
17
{
18
    /**
19
     * @param $transactionType
20
     * @return AbstractRequestBuilder
21
     * @throws NotImplementedError
22
     */
23
    public function createBuilder($transactionType)
24
    {
25
        switch ($transactionType) {
26
            case TransactionType::SALE:
27
                return new SaleRequestBuilder(
28
                    $this->configuration,
29
                    new IsoNumericCurrencyCodeFormatter(),
30
                    new MoneyFormatter(),
31
                    new SingleDigitInstallmentFormatter(),
32
                    new ExpireDateFormatter()
33
                );
34
            case TransactionType::CANCEL:
35
                return new CancelRequestBuilder(
36
                    $this->configuration,
37
                    new IsoNumericCurrencyCodeFormatter(),
38
                    new MoneyFormatter(),
39
                    new SingleDigitInstallmentFormatter(),
40
                    new ExpireDateFormatter()
41
                );
42
            case TransactionType::REFUND:
43
                return new RefundRequestBuilder(
44
                    $this->configuration,
45
                    new IsoNumericCurrencyCodeFormatter(),
46
                    new MoneyFormatter(),
47
                    new SingleDigitInstallmentFormatter(),
48
                    new ExpireDateFormatter()
49
                );
50
            case TransactionType::PRE_AUTHORIZATION:
51
                return new PreAuthorizationRequestBuilder(
52
                    $this->configuration,
53
                    new IsoNumericCurrencyCodeFormatter(),
54
                    new MoneyFormatter(),
55
                    new SingleDigitInstallmentFormatter(),
56
                    new ExpireDateFormatter()
57
                );
58
            case TransactionType::POST_AUTHORIZATION:
59
                return new PostAuthorizationRequestBuilder(
60
                    $this->configuration,
61
                    new IsoNumericCurrencyCodeFormatter(),
62
                    new MoneyFormatter(),
63
                    new SingleDigitInstallmentFormatter(),
64
                    new ExpireDateFormatter()
65
                );
66
            default:
67
                throw new NotImplementedError('Not implemented transaction type: ' . $transactionType);
68
        }
69
    }
70
}
71