PosnetBuilderFactory::createBuilder()   B
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 50
Code Lines 43

Duplication

Lines 0
Ratio 0 %

Importance

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