Completed
Push — master ( f76772...1672bb )
by ARCANEDEV
07:47
created

DeviceTracker   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 2
dl 0
loc 64
ccs 14
cts 14
cp 1
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 5 1
A getCurrentDeviceProperties() 0 9 2
A track() 0 7 1
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 implements DeviceTrackerContract
15
{
16
    /* ------------------------------------------------------------------------------------------------
17
     |  Properties
18
     | ------------------------------------------------------------------------------------------------
19
     */
20
    /** @var \Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector */
21
    private $deviceDetector;
22
23
    /** @var \Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser */
24
    private $userAgentParser;
25
26
    /* ------------------------------------------------------------------------------------------------
27
     |  Constructor
28
     | ------------------------------------------------------------------------------------------------
29
     */
30
    /**
31
     * DeviceTracker constructor.
32
     *
33
     * @param  \Arcanedev\LaravelTracker\Contracts\Detectors\DeviceDetector  $deviceDetector
34
     * @param  \Arcanedev\LaravelTracker\Contracts\Parsers\UserAgentParser   $userAgentParser
35
     */
36 24
    public function __construct(DeviceDetector $deviceDetector, UserAgentParser $userAgentParser)
37
    {
38 24
        $this->deviceDetector  = $deviceDetector;
39 24
        $this->userAgentParser = $userAgentParser;
40 24
    }
41
42
    /* ------------------------------------------------------------------------------------------------
43
     |  Main Functions
44
     | ------------------------------------------------------------------------------------------------
45
     */
46
    /**
47
     * Track the device.
48
     *
49
     * @return int
50
     */
51 6
    public function track()
52
    {
53 6
        $data  = $this->getCurrentDeviceProperties();
54 6
        $model = Device::firstOrCreate($data, $data);
55
56 6
        return $model->id;
57
    }
58
59
    /* ------------------------------------------------------------------------------------------------
60
     |  Other Functions
61
     | ------------------------------------------------------------------------------------------------
62
     */
63
    /**
64
     * Get the current device properties.
65
     *
66
     * @return array
67
     */
68 6
    private function getCurrentDeviceProperties()
69
    {
70 6
        if ($properties = $this->deviceDetector->detect()) {
71 6
            $properties['platform']         = $this->userAgentParser->getOperatingSystemFamily();
72 6
            $properties['platform_version'] = $this->userAgentParser->getOperatingSystemVersion();
73 3
        }
74
75 6
        return $properties;
76
    }
77
}
78