Completed
Pull Request — master (#7)
by ARCANEDEV
07:42
created

UnitsManager::liquidVolume()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php namespace Arcanedev\Units;
2
3
use Arcanedev\Support\Manager;
4
use Arcanedev\Units\Contracts\UnitsManager as UnitsManagerContract;
5
use Illuminate\Support\Arr;
6
use InvalidArgumentException;
7
8
/**
9
 * Class     UnitsManager
10
 *
11
 * @package  Arcanedev\Units
12
 * @author   ARCANEDEV <[email protected]>
13
 */
14
class UnitsManager extends Manager implements UnitsManagerContract
15
{
16
    /* ------------------------------------------------------------------------------------------------
17
     |  Main Functions
18
     | ------------------------------------------------------------------------------------------------
19
     */
20
    /**
21
     * Create the distance unit instance.
22
     *
23
     * @return Bases\UnitMeasure
24
     */
25 160
    public function distance()
26
    {
27 160
        return $this->buildUnit('distance', Measures\Distance::class);
28
    }
29
30
    /**
31
     * Create the liquid volume unit instance.
32
     *
33
     * @return Bases\UnitMeasure
34
     */
35 144
    public function liquidVolume()
36
    {
37 144
        return $this->buildUnit('liquid-volume', Measures\LiquidVolume::class);
38
    }
39
40
    /**
41
     * Create the weight unit instance.
42
     *
43
     * @return Bases\UnitMeasure
44
     */
45 152
    public function weight()
46
    {
47 152
        return $this->buildUnit('weight', Measures\Weight::class);
48
    }
49
50
    /**
51
     * Create the distance unit driver.
52
     *
53
     * @return Bases\UnitMeasure
54
     */
55 8
    protected function createDistanceDriver()
56
    {
57 8
        return $this->distance();
58
    }
59
60
    /**
61
     * Create the liquid volume unit driver.
62
     *
63
     * @return Bases\UnitMeasure
64
     */
65 8
    protected function createLiquidVolumeDriver()
66
    {
67 8
        return $this->liquidVolume();
68
    }
69
70
    /**
71
     * Create the weight unit driver.
72
     *
73
     * @return Bases\UnitMeasure
74
     */
75 8
    protected function createWeightDriver()
76
    {
77 8
        return $this->weight();
78
    }
79
80
    /**
81
     * Get the default driver name.
82
     *
83
     * @return string
84
     */
85 8
    public function getDefaultDriver()
86
    {
87 8
        throw new InvalidArgumentException('No unit of measurement was specified.');
88
    }
89
90
    /* ------------------------------------------------------------------------------------------------
91
     |  Other Functions
92
     | ------------------------------------------------------------------------------------------------
93
     */
94
    /**
95
     * Build the unit of measurement.
96
     *
97
     * @param  string  $key
98
     * @param  string  $unitClass
99
     *
100
     * @return \Arcanedev\Units\Bases\UnitMeasure
101
     */
102 456
    protected function buildUnit($key, $unitClass)
103
    {
104 456
        $configs = $this->app['config']->get("units.$key", []);
105
106 456
        return new $unitClass(
107 456
            0, Arr::get($configs, 'default'), Arr::except($configs, ['default'])
108 342
        );
109
    }
110
}
111