Distance   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 127
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 2
dl 0
loc 127
ccs 24
cts 24
cp 1
rs 10
c 0
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A make() 0 4 1
A addDistance() 0 4 1
A subDistance() 0 4 1
A defaultNames() 0 12 1
A getRatios() 0 17 1
1
<?php namespace Arcanedev\Units\Measures;
2
3
use Arcanedev\Units\Bases\UnitMeasure;
4
use Arcanedev\Units\Contracts\Measures\Distance as DistanceContract;
5
use Arcanedev\Units\Traits\Calculatable;
6
7
/**
8
 * Class     Distance
9
 *
10
 * @package  Arcanedev\Units\Measures
11
 * @author   ARCANEDEV <[email protected]>
12
 */
13
class Distance extends UnitMeasure implements DistanceContract
14
{
15
    /* -----------------------------------------------------------------
16
     |  Traits
17
     | -----------------------------------------------------------------
18
     */
19
20
    use Calculatable;
21
22
    /* -----------------------------------------------------------------
23
     |  Constructor
24
     | -----------------------------------------------------------------
25
     */
26
27
    /**
28
     * Distance constructor.
29
     *
30
     * @param  float|int  $value
31
     * @param  string     $unit
32
     * @param  array      $options
33
     */
34 69
    public function __construct($value = 0, $unit = self::M, array $options = [])
35
    {
36 69
        parent::__construct($value, $unit, $options);
37 69
    }
38
39
    /* -----------------------------------------------------------------
40
     |  Getters & Setters
41
     | -----------------------------------------------------------------
42
     */
43
44
    /**
45
     * Get the default names.
46
     *
47
     * @return array
48
     */
49 63
    public function defaultNames()
50
    {
51 63
        return array_combine(static::units(), [
52 63
            'kilometer',
53
            'hectometre',
54
            'decametre',
55
            'metre',
56
            'decimetre',
57
            'centimetre',
58
            'millimetre',
59
        ]);
60
    }
61
62
    /* -----------------------------------------------------------------
63
     |  Main Methods
64
     | -----------------------------------------------------------------
65
     */
66
67
    /**
68
     * Make a distance instance.
69
     *
70
     * @param  float|int  $value
71
     * @param  string     $unit
72
     * @param  array      $options
73
     *
74
     * @return \Arcanedev\Units\Contracts\Measures\Distance|\Arcanedev\Units\Contracts\UnitMeasure
75
     */
76 27
    public static function make($value = 0, $unit = self::M, array $options = [])
77
    {
78 27
        return parent::make($value, $unit, $options);
79
    }
80
81
    /* -----------------------------------------------------------------
82
     |  Calculation Methods
83
     | -----------------------------------------------------------------
84
     */
85
86
    /**
87
     * Add the distance.
88
     *
89
     * @param  float|int  $value
90
     * @param  string     $unit
91
     *
92
     * @return \Arcanedev\Units\Contracts\Measures\Distance|\Arcanedev\Units\Contracts\UnitMeasure
93
     */
94 6
    public function addDistance($value, $unit = self::M)
95
    {
96 6
        return $this->add(static::make($value, $unit));
97
    }
98
99
    /**
100
     * Sub the distance.
101
     *
102
     * @param  float|int  $value
103
     * @param  string     $unit
104
     *
105
     * @return \Arcanedev\Units\Contracts\Measures\Distance|\Arcanedev\Units\Contracts\UnitMeasure
106
     */
107 6
    public function subDistance($value, $unit = self::M)
108
    {
109 6
        return $this->sub(static::make($value, $unit));
110
    }
111
112
    /* -----------------------------------------------------------------
113
     |  Other Methods
114
     | -----------------------------------------------------------------
115
     */
116
117
    /**
118
     * Get all the distance ratios.
119
     *
120
     * @return array
121
     */
122 9
    protected static function getRatios()
123
    {
124 9
        $rate   = 10;
125
        $ratios = [
126 9
            static::KM  => 0,
127 9
            static::HM  => 1,
128 9
            static::DAM => 2,
129 9
            static::M   => 3,
130 9
            static::DM  => 4,
131 9
            static::CM  => 5,
132 9
            static::MM  => 6,
133
        ];
134
135 9
        return array_map(function ($ratio) use ($rate) {
136 9
            return static::calculate($rate, '^', $ratio);
137 9
        }, $ratios);
138
    }
139
}
140