activerecord-slotted_counters 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ff9187e867bfb86509d8303890fd3cdc1c93d0dc68463100bb43aafe2e15194d
4
- data.tar.gz: 72aabf239bfb85122e3691e80ef8e6cef238b0630b6b2355416f75482b571725
3
+ metadata.gz: 94aead1f1be073e3dbf7548257d6db2b8eda15be09f2c199b6b3cdbf9b6ba0f3
4
+ data.tar.gz: ac2e1b977ab04501cd1139bd1d410b9f58b0b9395add905b1034eebb54fe4c86
5
5
  SHA512:
6
- metadata.gz: 4bb48bae9e3567472423d670e9966c146f6004893cba795582a3e6f321ce8ce37c544d660b2b60480496dada50f04306a496fecfc454037ee6d013ca502d94ae
7
- data.tar.gz: 59907136fb20a46b843e6944243def5fbcca00ccbed312ba687ff880edb2adfdadbaca8dc3c0f399abe385ed4d8748864c3dbad5fefd804861ea88fd25e44630
6
+ metadata.gz: ba74654e981dbc83043dc295296939e85053b2c7c8543ca3472d2f659523b9a3ea5be60ac15a87a492f7fa3758defac451382ff518a96f4feee573eb0f68ed26
7
+ data.tar.gz: 857ec7de346c584b1fcdd79bcb81becb7ecec9bb86b2087a8acf83d25ed13b55d25883439b6242b3f26bd726cc592897930ff9f1755c720b7aca41ed55d91503
data/CHANGELOG.md CHANGED
@@ -2,9 +2,18 @@
2
2
 
3
3
  ## master
4
4
 
5
+ ## 0.1.2 (2023-03-28)
6
+
7
+ - Fix preloading counters for multiple records [#12](https://github.com/evilmartians/activerecord-slotted_counters/pull/12) ([@LukinEgor][])
8
+
9
+ ## 0.1.1 (2023-01-17)
10
+
11
+ - Fix prevent double increment/decrement of native counter caches [#10](https://github.com/evilmartians/activerecord-slotted_counters/pull/10) ([@danielwestendorf][])
12
+
5
13
  ## 0.1.0 (2022-11-29)
6
14
 
7
15
  - Initial release.
8
16
 
9
17
  [@palkan]: https://github.com/palkan
10
18
  [@LukinEgor]: https://github.com/LukinEgor
19
+ [@danielwestendorf]: https://github.com/danielwestendorf
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Active Record slotted counters
4
4
 
5
- This gem adds **slotted counters** support to [Active Record counter cache][counter-cache]. Slotted counters help to reduce contention on a single row update in case you many concurrent operations (like updating a page views counter during traffic spikes).
5
+ This gem adds **slotted counters** support to [Active Record counter cache][counter-cache]. Slotted counters help to reduce contention on a single row update in case you have many concurrent operations (like updating a page views counter during traffic spikes).
6
6
 
7
7
  Read more about slotted counters in [this post](https://planetscale.com/blog/the-slotted-counter-pattern).
8
8
 
@@ -5,15 +5,15 @@ require "activerecord_slotted_counters/utils"
5
5
 
6
6
  module ActiveRecordSlottedCounters
7
7
  class SlottedCounter < ::ActiveRecord::Base
8
- scope :associated_records, ->(counter_name, id, klass) do
9
- where(counter_name: counter_name, associated_record_id: id, associated_record_type: klass)
8
+ scope :associated_records, ->(counter_name, klass) do
9
+ where(counter_name: counter_name, associated_record_type: klass)
10
10
  end
11
11
  end
12
12
 
13
13
  module BelongsToAssociation
14
14
  def update_counters_via_scope(klass, foreign_key, by)
15
15
  counter_name = reflection.counter_cache_column
16
- super unless klass.registered_slotted_counter? counter_name
16
+ return super unless klass.registered_slotted_counter? counter_name
17
17
 
18
18
  klass.update_counters(foreign_key, counter_name => by, :touch => reflection.options[:touch])
19
19
  end
@@ -38,7 +38,7 @@ module ActiveRecordSlottedCounters
38
38
  counter_name = slotted_counter_name(counter_type)
39
39
  association_name = slotted_counter_association_name(counter_type)
40
40
 
41
- has_many association_name, ->(model) { associated_records(counter_name, model.id, model.class.to_s) }, **SLOTTED_COUNTERS_ASSOCIATION_OPTIONS
41
+ has_many association_name, ->(model) { associated_records(counter_name, model.class.to_s) }, **SLOTTED_COUNTERS_ASSOCIATION_OPTIONS
42
42
 
43
43
  scope :with_slotted_counters, ->(counter_type) do
44
44
  association_name = slotted_counter_association_name(counter_type)
@@ -182,7 +182,7 @@ module ActiveRecordSlottedCounters
182
182
  end
183
183
 
184
184
  def increment!(attribute, by = 1, touch: nil)
185
- super unless self.class.registered_slotted_counter? attribute
185
+ return super unless self.class.registered_slotted_counter? attribute
186
186
 
187
187
  self.class.update_counters(id, attribute => by, :touch => touch)
188
188
  end
@@ -191,16 +191,8 @@ module ActiveRecordSlottedCounters
191
191
 
192
192
  def read_slotted_counter(counter_type)
193
193
  association_name = slotted_counter_association_name(counter_type)
194
-
195
- if association_cached?(association_name)
196
- scope = association(association_name).scope
197
- counter = scope.sum(&:count)
198
-
199
- return counter
200
- end
201
-
202
- scope = send(association_name)
203
- scope.sum(:count)
194
+ scope = association(association_name).load_target
195
+ scope.sum(&:count)
204
196
  end
205
197
  end
206
198
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveRecordSlottedCounters # :nodoc:
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.2"
5
5
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-slotted_counters
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Egor Lukin
8
8
  - Vladimir Dementyev
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-11-29 00:00:00.000000000 Z
12
+ date: 2023-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -95,6 +95,20 @@ dependencies:
95
95
  - - ">="
96
96
  - !ruby/object:Gem::Version
97
97
  version: '0'
98
+ - !ruby/object:Gem::Dependency
99
+ name: rspec-sqlimit
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
98
112
  description: Active Record slotted counters support
99
113
  email:
100
114
  - dementiev.vm@gmail.com
@@ -121,7 +135,7 @@ metadata:
121
135
  documentation_uri: http://github.com/evilmartians/activerecord-slotted_counters
122
136
  homepage_uri: http://github.com/evilmartians/activerecord-slotted_counters
123
137
  source_code_uri: http://github.com/evilmartians/activerecord-slotted_counters
124
- post_install_message:
138
+ post_install_message:
125
139
  rdoc_options: []
126
140
  require_paths:
127
141
  - lib
@@ -136,8 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
150
  - !ruby/object:Gem::Version
137
151
  version: '0'
138
152
  requirements: []
139
- rubygems_version: 3.3.11
140
- signing_key:
153
+ rubygems_version: 3.3.3
154
+ signing_key:
141
155
  specification_version: 4
142
156
  summary: Active Record slotted counters support
143
157
  test_files: []