Completed
Push — master ( fb58fa...265b9c )
by ARCANEDEV
08:46
created

LaravelTrackerServiceProvider   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 173
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 10

Test Coverage

Coverage 100%

Importance

Changes 5
Bugs 0 Features 0
Metric Value
wmc 11
lcom 1
cbo 10
dl 0
loc 173
rs 10
c 5
b 0
f 0
ccs 74
cts 74
cp 1

9 Methods

Rating   Name   Duplication   Size   Complexity  
A getBasePath() 0 4 1
A register() 0 14 2
A boot() 0 7 1
A provides() 0 7 1
B registerDetectors() 0 26 1
A registerParsers() 0 15 1
A registerTrackers() 0 9 2
A registerMainTracker() 0 5 1
A getTrackers() 0 19 1
1
<?php namespace Arcanedev\LaravelTracker;
2
3
use Arcanedev\Support\PackageServiceProvider;
4
use Arcanedev\LaravelTracker\Contracts\Trackers as TrackerContracts;
5
6
/**
7
 * Class     LaravelTrackerServiceProvider
8
 *
9
 * @package  Arcanedev\LaravelTracker
10
 * @author   ARCANEDEV <[email protected]>
11
 */
12
class LaravelTrackerServiceProvider extends PackageServiceProvider
13
{
14
    /* ------------------------------------------------------------------------------------------------
15
     |  Properties
16
     | ------------------------------------------------------------------------------------------------
17
     */
18
    /**
19
     * Package name.
20
     *
21
     * @var string
22
     */
23
    protected $package = 'laravel-tracker';
24
25
    /* ------------------------------------------------------------------------------------------------
26
     |  Getters & Setters
27
     | ------------------------------------------------------------------------------------------------
28
     */
29
    /**
30
     * Get the base path of the package.
31
     *
32
     * @return string
33
     */
34 180
    public function getBasePath()
35
    {
36 180
        return dirname(__DIR__);
37
    }
38
39
    /* ------------------------------------------------------------------------------------------------
40
     |  Main Functions
41
     | ------------------------------------------------------------------------------------------------
42
     */
43
    /**
44
     * Register the service provider.
45
     */
46 180
    public function register()
47
    {
48 180
        $this->registerConfig();
49
50 180
        $this->app->register(Providers\PackagesServiceProvider::class);
51
52 180
        if ($this->app->runningInConsole())
53 180
            $this->app->register(Providers\CommandServiceProvider::class);
54
55 180
        $this->registerDetectors();
56 180
        $this->registerParsers();
57 180
        $this->registerTrackers();
58 180
        $this->registerMainTracker();
59 180
    }
60
61
    /**
62
     * Boot the service provider.
63
     */
64 180
    public function boot()
65
    {
66 180
        parent::boot();
67
68 180
        $this->publishConfig();
69 180
        $this->publishMigrations();
70 180
    }
71
72
    /**
73
     * Get the services provided by the provider.
74
     *
75
     * @return array
76
     */
77 6
    public function provides()
78
    {
79
        return [
80 6
            'arcanedev.tracker',
81 3
            Contracts\Tracker::class,
82 3
        ];
83
    }
84
85
    /* ------------------------------------------------------------------------------------------------
86
     |  Other Functions
87
     | ------------------------------------------------------------------------------------------------
88
     */
89
    /**
90
     * Register the detectors.
91
     */
92 180
    private function registerDetectors()
93
    {
94
        $this->singleton(Contracts\Detectors\CrawlerDetector::class, function ($app) {
95
            /** @var \Illuminate\Http\Request $request */
96 6
            $request = $app['request'];
97 6
            $crawler = new \Jaybizzle\CrawlerDetect\CrawlerDetect(
98 6
                $request->headers->all(),
99 6
                $request->server('HTTP_USER_AGENT')
100 3
            );
101
102 6
            return new Detectors\CrawlerDetector($crawler);
103 180
        });
104
105
        $this->singleton(Contracts\Detectors\DeviceDetector::class, function ($app) {
106 18
            return new Detectors\DeviceDetector($app['agent']);
107 180
        });
108
109 180
        $this->singleton(
110 180
            Contracts\Detectors\GeoIpDetector::class,
111 90
            Detectors\GeoIpDetector::class
112 90
        );
113
114
        $this->singleton(Contracts\Detectors\LanguageDetector::class, function ($app) {
115 18
            return new Detectors\LanguageDetector($app['agent']);
116 180
        });
117 180
    }
118
119
    /**
120
     * Register the parsers.
121
     */
122 180
    private function registerParsers()
123
    {
124
        $this->singleton(Contracts\Parsers\RefererParser::class, function () {
125 18
            return new Parsers\RefererParser(
126 9
                new \Snowplow\RefererParser\Parser
127 9
            );
128 180
        });
129
130
        $this->singleton(Contracts\Parsers\UserAgentParser::class, function ($app) {
131 36
            return new Parsers\UserAgentParser(
132 36
                \UAParser\Parser::create(),
133 36
                $app->make('path.base')
134 18
            );
135 180
        });
136 180
    }
137
138
    /**
139
     * Register the trackers.
140
     */
141 180
    private function registerTrackers()
142
    {
143 180
        foreach ($this->getTrackers() as $abstract => $concrete) {
144 180
            $this->singleton($abstract, $concrete);
145 90
        }
146
147
        // Register the trackers manager
148 180
        $this->singleton(Contracts\TrackingManager::class, TrackingManager::class);
149 180
    }
150
151
    /**
152
     * Register the main tracker.
153
     */
154 180
    private function registerMainTracker()
155
    {
156 180
        $this->singleton('arcanedev.tracker', Tracker::class);
157 180
        $this->bind(Contracts\Tracker::class, Tracker::class);
158 180
    }
159
160
    /**
161
     * Get the trackers.
162
     *
163
     * @return array
164
     */
165 180
    private function getTrackers()
166
    {
167
        return [
168 180
            TrackerContracts\CookieTracker::class          => Trackers\CookieTracker::class,
169 90
            TrackerContracts\DeviceTracker::class          => Trackers\DeviceTracker::class,
170 90
            TrackerContracts\GeoIpTracker::class           => Trackers\GeoIpTracker::class,
171 90
            TrackerContracts\LanguageTracker::class        => Trackers\LanguageTracker::class,
172 90
            TrackerContracts\PathTracker::class            => Trackers\PathTracker::class,
173 90
            TrackerContracts\QueryTracker::class           => Trackers\QueryTracker::class,
174 90
            TrackerContracts\RefererTracker::class         => Trackers\RefererTracker::class,
175 180
            TrackerContracts\SessionTracker::class         => function ($app) {
176
                /** @var \Illuminate\Contracts\Foundation\Application $app */
177 18
                return new Trackers\SessionTracker($app['session.store']);
178 180
            },
179 90
            TrackerContracts\SessionActivityTracker::class => Trackers\SessionActivityTracker::class,
180 90
            TrackerContracts\UserAgentTracker::class       => Trackers\UserAgentTracker::class,
181 90
            TrackerContracts\UserTracker::class            => Trackers\UserTracker::class,
182 90
        ];
183
    }
184
}
185