statisfy 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/statisfy/aggregate.rb +0 -1
- data/lib/statisfy/counter.rb +41 -14
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0232129b80c1b67a7e31c77256fcfea55d199e8bddb41d5acc75738290b54ed
|
4
|
+
data.tar.gz: f9172db49c79f90d71e49907220db46772991bacda7356eac9dea539e900b115
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a7329d1ccd0da87a4eee455a885dc46b8e6bbcc24f1805348b77558114b8d946430ea33a443b432aba59f4e4a60314b4b53336539e1240e4afaffe4b1d33b51
|
7
|
+
data.tar.gz: 5cc4383205544ea34da8bf25b1683237f7f89e241dc393376cc1d4ac0f478ecf2cc2bfc91e885db4d0b89d2337af7adc9eeea30766b253f41949cdbfc4287d41
|
data/lib/statisfy/aggregate.rb
CHANGED
data/lib/statisfy/counter.rb
CHANGED
@@ -39,14 +39,16 @@ module Statisfy
|
|
39
39
|
# but the `count` DSL defines them automatically based on the options provided
|
40
40
|
#
|
41
41
|
def apply_default_counter_options(args)
|
42
|
-
define_method(:identifier, args[:uniq_by] || -> {
|
42
|
+
define_method(:identifier, args[:uniq_by] || -> { nil })
|
43
43
|
define_method(:scopes, args[:scopes] || Statisfy.configuration.default_scopes || -> { [] })
|
44
44
|
define_method(:if_async, args[:if_async] || -> { true })
|
45
45
|
define_method(:decrement?, args[:decrement_if] || -> { false })
|
46
46
|
define_method(:value, args[:value] || -> {})
|
47
47
|
define_method(:should_run?, args[:if] || -> { true })
|
48
48
|
define_method(:on_destroy, args[:on_destroy]) if args[:on_destroy].present?
|
49
|
-
define_method(:decrement_on_destroy?, args[:decrement_on_destroy].is_a?(Proc) ? args[:decrement_on_destroy] :
|
49
|
+
define_method(:decrement_on_destroy?, args[:decrement_on_destroy].is_a?(Proc) ? args[:decrement_on_destroy] : lambda {
|
50
|
+
args[:decrement_on_destroy] || true
|
51
|
+
})
|
50
52
|
end
|
51
53
|
|
52
54
|
#
|
@@ -72,6 +74,10 @@ module Statisfy
|
|
72
74
|
redis_client.scard(key_for(scope:, month:))
|
73
75
|
end
|
74
76
|
|
77
|
+
def members(scope: nil, month: nil)
|
78
|
+
redis_client.smembers(key_for(scope:, month:))
|
79
|
+
end
|
80
|
+
|
75
81
|
#
|
76
82
|
# Returns the list of elements in the set (in case you use .append and not .increment)
|
77
83
|
#
|
@@ -104,12 +110,13 @@ module Statisfy
|
|
104
110
|
#
|
105
111
|
# This is the name of the Redis key that will be used to store the counter
|
106
112
|
#
|
107
|
-
def key_for(scope:, month: nil)
|
113
|
+
def key_for(scope:, month: nil, key_value: nil)
|
108
114
|
{
|
109
115
|
counter: name.demodulize.underscore,
|
110
116
|
month:,
|
111
117
|
scope_type: scope&.class&.name,
|
112
|
-
scope_id: scope&.id
|
118
|
+
scope_id: scope&.id,
|
119
|
+
key_value:
|
113
120
|
}.to_json
|
114
121
|
end
|
115
122
|
|
@@ -181,7 +188,7 @@ module Statisfy
|
|
181
188
|
end
|
182
189
|
|
183
190
|
def destroy_event_handled?
|
184
|
-
return false unless params[:statisfy_trigger] == :destroy
|
191
|
+
return false unless params[:statisfy_trigger] == :destroy && value.blank?
|
185
192
|
|
186
193
|
if decrement_on_destroy?
|
187
194
|
decrement
|
@@ -194,6 +201,14 @@ module Statisfy
|
|
194
201
|
false
|
195
202
|
end
|
196
203
|
|
204
|
+
def key_value
|
205
|
+
value || identifier || params["id"]
|
206
|
+
end
|
207
|
+
|
208
|
+
def custom_key_value?
|
209
|
+
identifier.present? || value.present?
|
210
|
+
end
|
211
|
+
|
197
212
|
#
|
198
213
|
# This allows to iterate over all the counters that need to be updated
|
199
214
|
# (in general the Department(s) and Organisation(s) for both the current month and the global counter)
|
@@ -201,20 +216,15 @@ module Statisfy
|
|
201
216
|
def all_counters
|
202
217
|
[month_to_set, nil].each do |month|
|
203
218
|
scopes_with_global.each do |scope|
|
204
|
-
yield self.class.key_for(scope:, month:)
|
219
|
+
yield self.class.key_for(scope:, month:)
|
205
220
|
end
|
206
221
|
end
|
207
222
|
end
|
208
223
|
|
209
224
|
def increment
|
210
|
-
all_counters do |key
|
211
|
-
self.class.redis_client.sadd?(key,
|
212
|
-
|
213
|
-
end
|
214
|
-
|
215
|
-
def decrement
|
216
|
-
all_counters do |key, id|
|
217
|
-
self.class.redis_client.srem?(key, id)
|
225
|
+
all_counters do |key|
|
226
|
+
self.class.redis_client.sadd?(key, key_value)
|
227
|
+
self.class.redis_client.sadd?(uniq_by_ids(key), params["id"]) if custom_key_value?
|
218
228
|
end
|
219
229
|
end
|
220
230
|
|
@@ -226,6 +236,23 @@ module Statisfy
|
|
226
236
|
self.class.redis_client.rpush(key, value)
|
227
237
|
end
|
228
238
|
end
|
239
|
+
|
240
|
+
# rubocop:disable Metrics/AbcSize
|
241
|
+
def decrement
|
242
|
+
all_counters do |key|
|
243
|
+
if custom_key_value?
|
244
|
+
self.class.redis_client.srem?(uniq_by_ids(key), params["id"])
|
245
|
+
self.class.redis_client.srem?(key, key_value) if self.class.redis_client.scard(uniq_by_ids(key)).zero?
|
246
|
+
else
|
247
|
+
self.class.redis_client.srem?(key, key_value)
|
248
|
+
end
|
249
|
+
end
|
250
|
+
end
|
251
|
+
# rubocop:enable Metrics/AbcSize
|
252
|
+
|
253
|
+
def uniq_by_ids(key)
|
254
|
+
"#{key};#{key_value}"
|
255
|
+
end
|
229
256
|
end
|
230
257
|
end
|
231
258
|
|