Factory   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 49
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 1
dl 0
loc 49
ccs 7
cts 7
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A makeFromNumber() 0 4 1
A determineCardByNumber() 0 10 3
1
<?php
2
3
namespace LVR\CreditCard;
4
5
use LVR\CreditCard\Cards\AmericanExpress;
6
use LVR\CreditCard\Cards\Dankort;
7
use LVR\CreditCard\Cards\DinersClub;
8
use LVR\CreditCard\Cards\Discovery;
9
use LVR\CreditCard\Cards\Forbrugsforeningen;
10
use LVR\CreditCard\Cards\Hipercard;
11
use LVR\CreditCard\Cards\Jcb;
12
use LVR\CreditCard\Cards\Maestro;
13
use LVR\CreditCard\Cards\Mastercard;
14
use LVR\CreditCard\Cards\Mir;
15
use LVR\CreditCard\Cards\Troy;
16
use LVR\CreditCard\Cards\UnionPay;
17
use LVR\CreditCard\Cards\Visa;
18
use LVR\CreditCard\Cards\VisaElectron;
19
use LVR\CreditCard\Exceptions\CreditCardException;
20
21
class Factory
22
{
23
    protected static $available_cards = [
24
        // Firs debit cards
25
        Dankort::class,
26
        Forbrugsforeningen::class,
27
        Maestro::class,
28
        VisaElectron::class,
29
        // Debit cards
30
        AmericanExpress::class,
31
        DinersClub::class,
32
        Discovery::class,
33
        Jcb::class,
34
        Hipercard::class,
35
        Mastercard::class,
36
        UnionPay::class,
37
        Visa::class,
38
        Mir::class,
39
        Troy::class,
40
    ];
41
42
    /**
43
     * @param string|mixed $card_number
44
     *
45
     * @return \LVR\CreditCard\Cards\Card
46
     * @throws \LVR\CreditCard\Exceptions\CreditCardException
47
     */
48 62
    public static function makeFromNumber($card_number)
49
    {
50 62
        return self::determineCardByNumber($card_number);
51
    }
52
53
    /**
54
     * @param string|mixed $card_number
55
     *
56
     * @return mixed
57
     * @throws \LVR\CreditCard\Exceptions\CreditCardException
58
     */
59 62
    protected static function determineCardByNumber($card_number)
60
    {
61 62
        foreach (self::$available_cards as $card) {
62 62
            if (preg_match($card::$pattern, $card_number)) {
63 48
                return new $card($card_number);
64
            }
65
        }
66
67 15
        throw new CreditCardException('Card not found.');
68
    }
69
}
70