BankAccountValidator   A
last analyzed

Complexity

Total Complexity 11

Size/Duplication

Total Lines 76
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 0
Metric Value
wmc 11
lcom 1
cbo 3
dl 0
loc 76
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A validate() 0 7 1
A validateAccount() 0 4 1
A validateBank() 0 4 1
A validateDocumentNumber() 0 7 4
A validateName() 0 7 3
1
<?php
2
3
namespace WeDevBr\Bankly\Validators\Pix;
4
5
use WeDevBr\Bankly\Types\Pix\BankAccount;
6
7
/**
8
 * BankAccountValidator class
9
 *
10
 * PHP version 7.3|7.4|8.0
11
 *
12
 * @author    WeDev Brasil Team <[email protected]>
13
 * @author    Rafael Teixeira <[email protected]>
14
 * @copyright 2020 We Dev Tecnologia Ltda
15
 * @link      https://github.com/wedevBr/bankly-laravel/
16
 */
17
class BankAccountValidator
18
{
19
    /** @var BankAccount */
20
    private $bankAccount;
21
22
    /**
23
     * @param BankAccount $bankAccount
24
     */
25
    public function __construct(BankAccount $bankAccount)
26
    {
27
        $this->bankAccount = $bankAccount;
28
    }
29
30
    /**
31
     * Validate the attributes of the bank account class
32
     *
33
     * @return void
34
     */
35
    public function validate(): void
36
    {
37
        $this->validateAccount();
38
        $this->validateBank();
39
        $this->validateDocumentNumber();
40
        $this->validateName();
41
    }
42
43
    /**
44
     * This validates a account
45
     *
46
     * @return void
47
     * @throws \InvalidArgumentException
48
     */
49
    private function validateAccount()
50
    {
51
        $this->bankAccount->account->validate();
52
    }
53
54
    /**
55
     * This validates a bank
56
     *
57
     * @return void
58
     * @throws \InvalidArgumentException
59
     */
60
    private function validateBank()
61
    {
62
        $this->bankAccount->bank->validate();
63
    }
64
65
    /**
66
     * This validates a document number
67
     *
68
     * @return void
69
     * @throws \InvalidArgumentException
70
     */
71
    private function validateDocumentNumber()
72
    {
73
        $documentNumber = $this->bankAccount->documentNumber;
74
        if (empty($documentNumber) || !is_string($documentNumber) || !is_numeric($documentNumber)) {
75
            throw new \InvalidArgumentException('document number should be a numeric string');
76
        }
77
    }
78
79
    /**
80
     * This validates a name
81
     *
82
     * @return void
83
     * @throws \InvalidArgumentException
84
     */
85
    private function validateName()
86
    {
87
        $name = $this->bankAccount->name;
88
        if (empty($name) || !is_string($name)) {
89
            throw new \InvalidArgumentException('name should be a string');
90
        }
91
    }
92
}
93