Passed
Push — master ( 8994c2...30162a )
by bader
03:20
created

Keys::visitsTotal()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace awssat\Visits;
4
5
use Illuminate\Database\Eloquent\Model;
6
7
class Keys
8
{
9
    public $prefix;
10
    public $testing = '';
11
    public $modelName = false;
12
    public $id;
13
    public $visits;
14
    public $primary = 'id';
15
    public $instanceOfModel = false;
16
    public $tag;
17
18
    /**
19
     * Keys constructor.
20
     * @param $subject
21
     * @param $tag
22
     */
23
    public function __construct($subject, $tag)
24
    {
25
        $this->modelName = $this->pluralModelName($subject);
26
        $this->prefix = config('visits.redis_keys_prefix');
27
        $this->testing = app()->environment('testing') ? 'testing:' : '';
28
        $this->primary = (new $subject)->getKeyName();
29
        $this->tag = $tag;
30
        $this->visits = $this->visits();
31
32
        if ($subject instanceof Model) {
33
            $this->instanceOfModel = true;
34
            $this->modelName = $this->modelName($subject);
35
            $this->id = $subject->{$subject->getKeyName()};
36
        }
37
    }
38
39
    /**
40
     * Get cache key
41
     *
42
     * @return string
43
     */
44
    public function visits()
45
    {
46
        return "{$this->prefix}:$this->testing" . $this->modelName . "_{$this->tag}";
47
    }
48
49
    /**
50
     * Get cache key
51
     *
52
     * @return string
53
     */
54
    public function visitsTotal()
55
    {
56
        return "{$this->visits}_total";
57
    }
58
59
    /**
60
     * @param $ip
61
     * @return string
62
     */
63
    public function ip($ip)
64
    {
65
        return $this->visits . '_' .
66
            snake_case("recorded_ips:" . ($this->instanceOfModel ? "{$this->id}:" : '') . $ip);
67
    }
68
69
70
    /**
71
     * @param $limit
72
     * @param $isLow
73
     * @return string
74
     */
75
    public function cache($limit = '*', $isLow = false)
76
    {
77
        $key = $this->visits . "_lists";
78
79
        if ($limit == '*') {
80
            return "{$key}:*";
81
        }
82
83
        return "{$key}:" . ($isLow ? "low" : "top") . "{$limit}";
84
    }
85
86
    /**
87
     * @param $period
88
     * @return string
89
     */
90
    public function period($period)
91
    {
92
        return "{$this->visits}_{$period}";
93
    }
94
95
    /**
96
     * @param $relation
97
     * @param $id
98
     */
99
    public function append($relation, $id)
100
    {
101
        $this->visits .= "_{$relation}_{$id}";
102
    }
103
104
    /**
105
     * @param $subject
106
     * @return string
107
     */
108
    public function modelName($subject)
109
    {
110
        return strtolower(str_singular(class_basename(get_class($subject))));
111
    }
112
113
    /**
114
     * @param $subject
115
     * @return string
116
     */
117
    public function pluralModelName($subject)
118
    {
119
        return strtolower(str_plural(class_basename(is_string($subject) ? $subject : get_class($subject))));
120
    }
121
}
122