UnderstandLumenServiceProvider::provides()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
1
<?php namespace Understand\UnderstandLumen;
2
3
use Illuminate\Support\ServiceProvider;
4
use UnderstandMonolog\Handler\UnderstandAsyncHandler;
5
use UnderstandMonolog\Handler\UnderstandSyncHandler;
6
use Understand\UnderstandLumen\TokenProvider;
7
use Understand\UnderstandLumen\FieldProvider;
8
use Understand\Processor\UnderstandProcessor;
9
10
class UnderstandLumenServiceProvider extends ServiceProvider
11
{
12
13
    /**
14
     * Register bindings in the container.
15
     *
16
     * @return void
17
     */
18
    public function register()
19
    {
20
        $this->registerConfig();
21
        $this->registerTokenProvider();
22
        $this->registerFieldProvider();
23
        $this->registerMonologHandler();
24
    }
25
26
    /**
27
     * Register configuration file
28
     *
29
     * @return void
30
     */
31
    protected function registerConfig()
32
    {
33
        $this->app->configure('understand_lumen');
34
35
        $configPath = __DIR__ . '/../config/understand_lumen.php';
36
        $this->mergeConfigFrom($configPath, 'understand_lumen');
37
    }
38
39
    /**
40
     * Register monolog handler
41
     *
42
     * @return void
43
     */
44
    protected function registerMonologHandler()
45
    {
46
        $handlerType = $this->app['config']->get('understand_lumen.handler', 'sync');
47
        $inputToken = $this->app['config']->get('understand_lumen.token');
48
        $apiUrl = $this->app['config']->get('understand_lumen.url' ,'https://api.understand.io');
49
        $silent = $this->app['config']->get('understand_lumen.silent', true);
50
        $sslBundlePath = $this->app['config']->get('understand_lumen.ssl_bundle_path', false);
51
        $metaFields = $this->app['config']->get('understand_lumen.meta', []);
52
53
        if ($handlerType == 'async')
54
        {
55
            $handler = new UnderstandAsyncHandler($inputToken, $apiUrl, $silent, $sslBundlePath);
56
        }
57
        else
58
        {
59
            $handler = new UnderstandSyncHandler($inputToken, $apiUrl, $silent, $sslBundlePath);
60
        }
61
62
        $handler->pushProcessor(new UnderstandProcessor($metaFields));
63
64
        $this->app['Psr\Log\LoggerInterface']->pushHandler($handler);
65
    }
66
67
    /**
68
     * Register field provider
69
     *
70
     * @return void
71
     */
72
    protected function registerFieldProvider()
73
    {
74
        $this->app->bind('understand-lumen.field-provider', function($app)
75
        {
76
            $fieldProvider = new FieldProvider();
77
78
            if ($app->bound('session.store'))
79
            {
80
                $fieldProvider->setSessionStore($app['session.store']);
81
            }
82
83
            $fieldProvider->setRequest($app['request']);
84
            $fieldProvider->setEnvironment($app->environment());
85
            $fieldProvider->setTokenProvider($app['understand-lumen.token-provider']);
86
87
            return $fieldProvider;
88
        });
89
    }
90
91
    /**
92
     * Register token provider
93
     *
94
     * @return void
95
     */
96
    protected function registerTokenProvider()
97
    {
98
        $this->app->singleton('understand-lumen.token-provider', function()
99
        {
100
            return new TokenProvider();
101
        });
102
    }
103
104
    /**
105
     * Get the services provided by the provider.
106
     *
107
     * @return array
108
     */
109
    public function provides()
110
    {
111
        return ['understand-lumen.token-provider', 'understand-lumen.field-provider'];
112
    }
113
}