Completed
Push — master ( ec2990...7a5f39 )
by ARCANEDEV
07:59
created

DeviceTracker   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 5
c 0
b 0
f 0
lcom 1
cbo 5
dl 0
loc 60
ccs 15
cts 15
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDeviceDetector() 0 4 1
A getUserAgentParser() 0 4 1
A track() 0 7 1
A getCurrentDeviceProperties() 0 11 2
1
<?php namespace Arcanedev\LaravelTracker\Trackers;
2
3
use Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector;
4
use Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser;
5
use Arcanedev\LaravelTracker\Contracts\Trackers\DeviceTracker as DeviceTrackerContract;
6
use Arcanedev\LaravelTracker\Models\Device;
7
8
/**
9
 * Class     DeviceTracker
10
 *
11
 * @package  Arcanedev\LaravelTracker\Trackers
12
 * @author   ARCANEDEV <[email protected]>
13
 */
14
class DeviceTracker extends AbstractTracker implements DeviceTrackerContract
15
{
16
    /* ------------------------------------------------------------------------------------------------
17
     |  Getters & Setters
18
     | ------------------------------------------------------------------------------------------------
19
     */
20
    /**
21
     * @return \Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector
22
     */
23 12
    private function getDeviceDetector()
24
    {
25 12
        return $this->make(DeviceDetector::class);
26
    }
27
28
    /**
29
     * @return \Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser
30
     */
31 12
    private function getUserAgentParser()
32
    {
33 12
        return $this->make(UserAgentParser::class);
34
    }
35
36
    /* ------------------------------------------------------------------------------------------------
37
     |  Main Functions
38
     | ------------------------------------------------------------------------------------------------
39
     */
40
    /**
41
     * Track the device.
42
     *
43
     * @return int
44
     */
45 12
    public function track()
46
    {
47 12
        $data  = $this->getCurrentDeviceProperties();
48 12
        $model = Device::firstOrCreate($data, $data);
49
50 12
        return $model->id;
51
    }
52
53
    /* ------------------------------------------------------------------------------------------------
54
     |  Other Functions
55
     | ------------------------------------------------------------------------------------------------
56
     */
57
    /**
58
     * Get the current device properties.
59
     *
60
     * @return array
61
     */
62 12
    private function getCurrentDeviceProperties()
63
    {
64 12
        if ($properties = $this->getDeviceDetector()->detect()) {
65 12
            $parser = $this->getUserAgentParser();
66
67 12
            $properties['platform']         = $parser->getOperatingSystemFamily();
68 12
            $properties['platform_version'] = $parser->getOperatingSystemVersion();
69 6
        }
70
71 12
        return $properties;
72
    }
73
}
74