Natural   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 50
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 0
Metric Value
wmc 9
lcom 1
cbo 2
dl 0
loc 50
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A setDefaults() 0 7 1
A setMin() 0 4 1
A setMax() 0 4 1
A generateDefaults() 0 10 3
A generateNatural() 0 9 2
A stringify() 0 4 1
1
<?php
2
3
namespace Samshal\Rando\Packages\Basics;
4
5
use Samshal\Rando\Packages\PackageableInterface;
6
use Samshal\Rando\Packages\Packages;
7
use Samshal\Rando\Rando;
8
use Samshal\Rando\Exceptions\UnallowedLessThanZeroException;
9
10
class Natural extends Packages implements PackageableInterface
11
{
12
13
    protected $fixed;
14
    protected $min;
15
    protected $max;
16
17
    public function setDefaults($defaultsArray = [])
18
    {
19
        $defaultsArray['min'] = 1;
20
        $defaultsArray['max'] = mt_getrandmax();
21
22
        return $defaultsArray;
23
    }
24
25
    protected function setMin($min)
26
    {
27
        $this->min = $min;
28
    }
29
30
    protected function setMax($max)
31
    {
32
        $this->max = $max;
33
    }
34
35
    private function generateDefaults()
36
    {
37
        if (empty($this->min)) {
38
            $this->min = $this->setDefaults()['min'];
39
        }
40
41
        if (empty($this->max)) {
42
            $this->max = $this->setDefaults()['max'];
43
        }
44
    }
45
    private function generateNatural()
46
    {
47
        self::generateDefaults();
48
49
        if ($this->min < 0) {
50
            throw new UnallowedLessThanZeroException();
51
        }
52
        return Rando::integer(['min'=>$this->min, 'max'=>$this->max]);
53
    }
54
55
    public function stringify()
56
    {
57
        return self::generateNatural();
58
    }
59
}
60