Completed
Pull Request — master (#5)
by ARCANEDEV
06:52
created

UnitsManager::buildUnit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 8
rs 9.4285
ccs 5
cts 5
cp 1
cc 1
eloc 4
nc 1
nop 2
crap 1
1
<?php namespace Arcanedev\Units;
2
3
use Arcanedev\Units\Contracts\UnitsManager as UnitsManagerContract;
4
use Illuminate\Support\Arr;
5
use Illuminate\Support\Manager;
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 8
    public function createDistanceDriver()
26
    {
27 8
        return $this->buildUnit('distance', Measures\Distance::class);
28
    }
29
30
    /**
31
     * Create the liquid volume unit instance.
32
     *
33
     * @return Bases\UnitMeasure
34
     */
35 4
    public function createLiquidVolumeDriver()
36
    {
37 4
        return $this->buildUnit('liquid-volume', Measures\LiquidVolume::class);
38
    }
39
40
    /**
41
     * Create the weight unit instance.
42
     *
43
     * @return Bases\UnitMeasure
44
     */
45 8
    public function createWeightDriver()
46
    {
47 8
        return $this->buildUnit('weight', Measures\Weight::class);
48
    }
49
50
    /**
51
     * Get the default driver name.
52
     *
53
     * @return string
54
     */
55 8
    public function getDefaultDriver()
56
    {
57 8
        throw new InvalidArgumentException('No unit of measurement was specified.');
58
    }
59
60
    /* ------------------------------------------------------------------------------------------------
61
     |  Other Functions
62
     | ------------------------------------------------------------------------------------------------
63
     */
64
    /**
65
     * Build the unit of measurement.
66
     *
67
     * @param  string  $key
68
     * @param  string  $unitClass
69
     *
70
     * @return \Arcanedev\Units\Bases\UnitMeasure
71
     */
72 20
    protected function buildUnit($key, $unitClass)
73
    {
74 20
        $configs = $this->app['config']->get("units.$key", []);
75
76 20
        return new $unitClass(
77 20
            0, Arr::get($configs, 'default'), Arr::except($configs, ['default'])
78 15
        );
79
    }
80
}
81