Completed
Push — develop ( 1f78f5...10fbf8 )
by Alejandro
16s queued 11s
created

ShortUrlEdit::doValidateUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 1
c 0
b 0
f 0
dl 0
loc 3
rs 10
ccs 2
cts 2
cp 1
cc 1
nc 1
nop 0
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Shlinkio\Shlink\Core\Model;
6
7
use Cake\Chronos\Chronos;
8
use Shlinkio\Shlink\Core\Exception\ValidationException;
9
use Shlinkio\Shlink\Core\Validation\ShortUrlMetaInputFilter;
10
11
use function array_key_exists;
12
use function Shlinkio\Shlink\Core\getOptionalBoolFromInputFilter;
13
use function Shlinkio\Shlink\Core\getOptionalIntFromInputFilter;
14
use function Shlinkio\Shlink\Core\parseDateField;
15
16
final class ShortUrlEdit
17
{
18
    private bool $longUrlPropWasProvided = false;
19
    private ?string $longUrl = null;
20
    private bool $validSincePropWasProvided = false;
21
    private ?Chronos $validSince = null;
22
    private bool $validUntilPropWasProvided = false;
23
    private ?Chronos $validUntil = null;
24
    private bool $maxVisitsPropWasProvided = false;
25
    private ?int $maxVisits = null;
26
    private ?bool $validateUrl = null;
27
28
    // Enforce named constructors
29
    private function __construct()
30
    {
31
    }
32
33
    /**
34
     * @throws ValidationException
35
     */
36 2
    public static function fromRawData(array $data): self
37
    {
38 2
        $instance = new self();
39 2
        $instance->validateAndInit($data);
40 1
        return $instance;
41
    }
42
43
    /**
44
     * @throws ValidationException
45
     */
46 2
    private function validateAndInit(array $data): void
47
    {
48 2
        $inputFilter = new ShortUrlMetaInputFilter($data);
49 2
        if (! $inputFilter->isValid()) {
50 1
            throw ValidationException::fromInputFilter($inputFilter);
51
        }
52
53 1
        $this->longUrlPropWasProvided = array_key_exists(ShortUrlMetaInputFilter::LONG_URL, $data);
54 1
        $this->validSincePropWasProvided = array_key_exists(ShortUrlMetaInputFilter::VALID_SINCE, $data);
55 1
        $this->validUntilPropWasProvided = array_key_exists(ShortUrlMetaInputFilter::VALID_UNTIL, $data);
56 1
        $this->maxVisitsPropWasProvided = array_key_exists(ShortUrlMetaInputFilter::MAX_VISITS, $data);
57
58 1
        $this->longUrl = $inputFilter->getValue(ShortUrlMetaInputFilter::LONG_URL);
59 1
        $this->validSince = parseDateField($inputFilter->getValue(ShortUrlMetaInputFilter::VALID_SINCE));
60 1
        $this->validUntil = parseDateField($inputFilter->getValue(ShortUrlMetaInputFilter::VALID_UNTIL));
61 1
        $this->maxVisits = getOptionalIntFromInputFilter($inputFilter, ShortUrlMetaInputFilter::MAX_VISITS);
62 1
        $this->validateUrl = getOptionalBoolFromInputFilter($inputFilter, ShortUrlMetaInputFilter::VALIDATE_URL);
63
    }
64
65 3
    public function longUrl(): ?string
66
    {
67 3
        return $this->longUrl;
68
    }
69
70 3
    public function hasLongUrl(): bool
71
    {
72 3
        return $this->longUrlPropWasProvided && $this->longUrl !== null;
73
    }
74
75 3
    public function validSince(): ?Chronos
76
    {
77 3
        return $this->validSince;
78
    }
79
80 3
    public function hasValidSince(): bool
81
    {
82 3
        return $this->validSincePropWasProvided;
83
    }
84
85 3
    public function validUntil(): ?Chronos
86
    {
87 3
        return $this->validUntil;
88
    }
89
90 3
    public function hasValidUntil(): bool
91
    {
92 3
        return $this->validUntilPropWasProvided;
93
    }
94
95 3
    public function maxVisits(): ?int
96
    {
97 3
        return $this->maxVisits;
98
    }
99
100 3
    public function hasMaxVisits(): bool
101
    {
102 3
        return $this->maxVisitsPropWasProvided;
103
    }
104
105 3
    public function doValidateUrl(): ?bool
106
    {
107 3
        return $this->validateUrl;
108
    }
109
}
110