Completed
Pull Request — master (#10)
by ARCANEDEV
08:13
created

ConverterManager   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 90
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 4
Bugs 0 Features 0
Metric Value
c 4
b 0
f 0
dl 0
loc 90
rs 10
ccs 23
cts 23
cp 1
wmc 6
lcom 1
cbo 2

6 Methods

Rating   Name   Duplication   Size   Complexity  
A createOpenexchangeratesDriver() 0 7 1
A createCurrencylayerDriver() 0 7 1
A getDefaultDriver() 0 4 1
A config() 0 4 1
A getProviderConfigs() 0 7 1
A buildProvider() 0 8 1
1
<?php namespace Arcanedev\Currencies;
2
3
use Arcanedev\Currencies\Contracts\ConverterManager as ConverterManagerContract;
4
use Illuminate\Support\Manager;
5
6
/**
7
 * Class     ConverterManager
8
 *
9
 * @package  Arcanedev\Currencies
10
 * @author   ARCANEDEV <[email protected]>
11
 */
12
class ConverterManager extends Manager implements ConverterManagerContract
13
{
14
    /* ------------------------------------------------------------------------------------------------
15
     |  Main Functions
16
     | ------------------------------------------------------------------------------------------------
17
     */
18
    /**
19
     * Create an instance of Openexchangerates service.
20
     *
21
     * @return \Arcanedev\Currencies\Contracts\Services\CurrencyService
22
     */
23 24
    protected function createOpenexchangeratesDriver()
24
    {
25 24
        return $this->buildProvider(
26 24
            Services\OpenExchangeRatesService::class,
27 24
            $this->getProviderConfigs('openexchangerates')
28 18
        );
29
    }
30
31
    /**
32
     * Create an instance of Currencylayer service.
33
     *
34
     * @return \Arcanedev\Currencies\Contracts\Services\CurrencyService
35
     */
36 12
    protected function createCurrencylayerDriver()
37
    {
38 12
        return $this->buildProvider(
39 12
            Services\CurrencyLayerService::class,
40 12
            $this->getProviderConfigs('currencylayer')
41 9
        );
42
    }
43
44
    /**
45
     * Get the default driver name.
46
     *
47
     * @throws \InvalidArgumentException
48
     *
49
     * @return string
50
     */
51 12
    public function getDefaultDriver()
52
    {
53 12
        return $this->config()->get('currencies.converters.default');
54
    }
55
56
    /* ------------------------------------------------------------------------------------------------
57
     |  Other Functions
58
     | ------------------------------------------------------------------------------------------------
59
     */
60
    /**
61
     * Get the config repository instance.
62
     *
63
     * @return \Illuminate\Contracts\Config\Repository
64
     */
65 24
    protected function config()
66
    {
67 24
        return $this->app['config'];
68
    }
69
70
    /**
71
     * Get the provider configs.
72
     *
73
     * @param  string  $provider
74
     *
75
     * @return array
76
     */
77 24
    protected function getProviderConfigs($provider)
78
    {
79 24
        $configs          = $this->config()->get("currencies.converters.providers.$provider");
80 24
        $configs['cache'] = $this->config()->get("currencies.converters.cache");
81
82 24
        return $configs;
83
    }
84
85
    /**
86
     * Build the converter provider.
87
     *
88
     * @param  string  $provider
89
     * @param  array   $configs
90
     *
91
     * @return \Arcanedev\Currencies\Contracts\Services\CurrencyService
92
     */
93 24
    protected function buildProvider($provider, array $configs)
94
    {
95 24
        return new $provider(
96 24
            $this->app[Contracts\Http\Client::class],
97 24
            $this->app['cache']->driver(),
98
            $configs
99 18
        );
100
    }
101
}
102