counterwise 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f1cdc6acd0972160c280ad8df73b8a97716f7cac8a5f2a8b45149c73426ece5f
4
- data.tar.gz: e64e450d2e6e430db5acdd0042ec796183f7640cddffa6a1d86f8020846b284d
3
+ metadata.gz: 4486834d3cd8109cdc40ecd6cdcb7d9b40b689960550d1c68bbadb564d548726
4
+ data.tar.gz: b839de58dfe853a2b8f45414cc184053104fed3568cdbcb3569bbde060a10c6a
5
5
  SHA512:
6
- metadata.gz: 65ab2e425276794f29b05286566fdf6009833f500d57e521774dcccd99adca0e2068edf894dd9de667aebad8d0a246b819874554855fc678f1ba1e8aa00e522f
7
- data.tar.gz: 40efd582468d6d310bb1487081202fd0912f3d77765656222d5a0f6b14bc5d237e846cbda25d80ebfc0060bbc7a1e1fedad65d91ffca152de437736e0a65117e
6
+ metadata.gz: 76a8089e1a783202ab3401982ea3877e12138fe6ea379478113d6f1ce5daae2ae252255201c4195b1ce12b8507b7494c2dda0c4f1f67445a765c31d74d31338b
7
+ data.tar.gz: c542c109b5431240594f2d9ba22c8c8acd8503fa54231f0932ef67fc7d108cd9e7451310340113ba837967600bb4c7aafbb43a2766a84d821563cc130b56e514
data/README.md CHANGED
@@ -129,10 +129,15 @@ this would use the definition of the counter, including any option to sum a colu
129
129
 
130
130
  ### Reset a counter
131
131
 
132
- You can also reset a counter by calling `reset`. Since counters are ActiveRecord objects, you could also reset them using
132
+ You can also reset a counter by calling `reset`.
133
133
 
134
134
  ```ruby
135
135
  store.order_revenue.reset
136
+ ```
137
+
138
+ Since counters are ActiveRecord objects, you could also reset them using:
139
+
140
+ ```ruby
136
141
  Counter::Value.update value: 0
137
142
  ```
138
143
 
@@ -9,7 +9,15 @@ module Counter::Recalculatable
9
9
  else
10
10
  with_lock do
11
11
  new_value = definition.sum? ? sum_by_sql : count_by_sql
12
- update! value: new_value
12
+
13
+ self.class.upsert(
14
+ attributes.without("id", "created_at", "updated_at").symbolize_keys.merge(value: new_value),
15
+ unique_by: [:parent_type, :parent_id, :name],
16
+ on_duplicate: Arel.sql("value = counter_values.value + EXCLUDED.value"),
17
+ record_timestamps: true
18
+ )
19
+
20
+ reload
13
21
  end
14
22
  end
15
23
  end
@@ -35,11 +35,12 @@ module Counter::Verifyable
35
35
  def sample_and_verify scope: -> { all }, samples: 1000, verbose: true, on_error: :raise
36
36
  incorrect_counters = 0
37
37
 
38
- counter_range = Counter::Value.minimum(:id)..Counter::Value.maximum(:id)
38
+ counters = Counter::Value.merge(scope)
39
+ counter_range = counters.minimum(:id)..counters.maximum(:id)
39
40
 
40
41
  samples.times do
41
42
  random_id = rand(counter_range)
42
- counter = Counter::Value.merge(scope).where("id >= ?", random_id).limit(1).first
43
+ counter = counters.where("id >= ?", random_id).limit(1).first
43
44
  next if counter.nil?
44
45
 
45
46
  if counter.definition.global? || counter.definition.calculated?
@@ -56,7 +57,9 @@ module Counter::Verifyable
56
57
  case on_error
57
58
  when :raise then raise Counter::Error.new(message)
58
59
  when :log then Rails.logger.error message
59
- when :correct then counter.correct!
60
+ when :correct
61
+ counter.correct!
62
+ puts "🔧 Corrected counter #{counter.id}" if verbose
60
63
  end
61
64
  end
62
65
  sleep 0.1
@@ -1,3 +1,3 @@
1
1
  module Counter
2
- VERSION = "0.1.3"
2
+ VERSION = "0.1.4"
3
3
  end
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: counterwise
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Lawrence
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-17 00:00:00.000000000 Z
11
+ date: 2024-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '7'
20
20
  type: :runtime
21
21
  prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '7'
27
- - !ruby/object:Gem::Dependency
28
- name: standard
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '7'
41
27
  description: Counting and aggregation library for Rails.
42
28
  email:
43
29
  - jamie@ideasasylum.com
@@ -101,7 +87,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
87
  - !ruby/object:Gem::Version
102
88
  version: '0'
103
89
  requirements: []
104
- rubygems_version: 3.3.7
90
+ rubygems_version: 3.4.10
105
91
  signing_key:
106
92
  specification_version: 4
107
93
  summary: Counters and the counting counters that count them