counter_culture 2.2.0 → 2.2.1
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 +4 -4
- data/CHANGELOG.md +5 -0
- data/README.md +7 -1
- data/VERSION +1 -1
- data/counter_culture.gemspec +4 -4
- data/lib/counter_culture/reconciler.rb +10 -4
- data/spec/counter_culture_spec.rb +7 -3
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ed37e7ce1d391b9fc468d8a1638b78e6afb46bc764dd7fff6935d00e41dbf18b
|
|
4
|
+
data.tar.gz: 1a7d6b777a4065e214ebab7a25d271c4755eca109ca2907f71363450f329ff03
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: '092c9686853ad23dea228cdd32ecef385efeeb3a43f55778372faaf052359512eaf82c7d2f68b1898d419f6911646e2024fde2d75706cefb339b7e98a3c125ce'
|
|
7
|
+
data.tar.gz: cad2c4b3c7546d0a2098f3d738631712aaf80d26cf6244c7b27c53c3358fca7130e4e52c756e29c7b331549875cc063a7b28f1bc810f8556d73bb58ab4fd6cec
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
|
@@ -7,7 +7,13 @@ Turbo-charged counter caches for your Rails app. Huge improvements over the Rail
|
|
|
7
7
|
* Supports dynamic column names, making it possible to split up the counter cache for different types of objects
|
|
8
8
|
* Can keep a running count, or a running total
|
|
9
9
|
|
|
10
|
-
Tested against Ruby 2.
|
|
10
|
+
Tested against Ruby 2.3.8, 2.4.6, 2.5.5 and 2.6.2 and against the latest patch releases of Rails 4.2, 5.0, 5.1 and 5.2.
|
|
11
|
+
|
|
12
|
+
Please note that -- unlike Rails' built-in counter-caches -- counter_culture does not currently change the behavior of the `.size` method on ActiveRecord associations. If you want to avoid a database query and read the cached value, please use the attribute name containing the counter cache directly.
|
|
13
|
+
```
|
|
14
|
+
product.categories.size # => will lead to a SELECT COUNT(*) query
|
|
15
|
+
product.categories_count # => will use counter cache without query
|
|
16
|
+
```
|
|
11
17
|
|
|
12
18
|
## Installation
|
|
13
19
|
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.2.
|
|
1
|
+
2.2.1
|
data/counter_culture.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
|
5
|
-
# stub: counter_culture 2.2.
|
|
5
|
+
# stub: counter_culture 2.2.1 ruby lib
|
|
6
6
|
|
|
7
7
|
Gem::Specification.new do |s|
|
|
8
8
|
s.name = "counter_culture".freeze
|
|
9
|
-
s.version = "2.2.
|
|
9
|
+
s.version = "2.2.1"
|
|
10
10
|
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
|
12
12
|
s.require_paths = ["lib".freeze]
|
|
13
13
|
s.authors = ["Magnus von Koeller".freeze]
|
|
14
|
-
s.date = "2019-04-
|
|
14
|
+
s.date = "2019-04-17"
|
|
15
15
|
s.description = "counter_culture provides turbo-charged counter caches that are kept up-to-date not just on create and destroy, that support multiple levels of indirection through relationships, allow dynamic column names and that avoid deadlocks by updating in the after_commit callback.".freeze
|
|
16
16
|
s.email = "magnus@vonkoeller.de".freeze
|
|
17
17
|
s.extra_rdoc_files = [
|
|
@@ -123,7 +123,7 @@ Gem::Specification.new do |s|
|
|
|
123
123
|
s.homepage = "http://github.com/magnusvk/counter_culture".freeze
|
|
124
124
|
s.licenses = ["MIT".freeze]
|
|
125
125
|
s.required_ruby_version = Gem::Requirement.new(">= 2.3.0".freeze)
|
|
126
|
-
s.rubygems_version = "
|
|
126
|
+
s.rubygems_version = "2.7.6.2".freeze
|
|
127
127
|
s.summary = "Turbo-charged counter caches for your Rails app.".freeze
|
|
128
128
|
|
|
129
129
|
if s.respond_to? :specification_version then
|
|
@@ -67,7 +67,7 @@ module CounterCulture
|
|
|
67
67
|
end
|
|
68
68
|
|
|
69
69
|
def perform
|
|
70
|
-
log "Performing reconciling of #{counter.model}##{counter.relation.to_sentence}
|
|
70
|
+
log "Performing reconciling of #{counter.model}##{counter.relation.to_sentence}."
|
|
71
71
|
# if we're provided a custom set of column names with conditions, use them; just use the
|
|
72
72
|
# column name otherwise
|
|
73
73
|
# which class does this relation ultimately point to? that's where we have to start
|
|
@@ -105,14 +105,14 @@ module CounterCulture
|
|
|
105
105
|
update_count_for_batch(column_name, records)
|
|
106
106
|
end
|
|
107
107
|
end
|
|
108
|
-
|
|
109
|
-
log "Finished reconciling of #{counter.model}##{counter.relation.to_sentence}
|
|
108
|
+
log_without_newline "\n"
|
|
109
|
+
log "Finished reconciling of #{counter.model}##{counter.relation.to_sentence}."
|
|
110
110
|
end
|
|
111
111
|
|
|
112
112
|
private
|
|
113
113
|
|
|
114
114
|
def update_count_for_batch(column_name, records)
|
|
115
|
-
|
|
115
|
+
log_without_newline "."
|
|
116
116
|
|
|
117
117
|
ActiveRecord::Base.transaction do
|
|
118
118
|
records.each do |record|
|
|
@@ -145,6 +145,12 @@ module CounterCulture
|
|
|
145
145
|
Rails.logger.info(message)
|
|
146
146
|
end
|
|
147
147
|
|
|
148
|
+
def log_without_newline(message)
|
|
149
|
+
return unless log?
|
|
150
|
+
|
|
151
|
+
Rails.logger << message if Rails.logger.info?
|
|
152
|
+
end
|
|
153
|
+
|
|
148
154
|
def log?
|
|
149
155
|
options[:verbose] && Rails.logger
|
|
150
156
|
end
|
|
@@ -1367,13 +1367,17 @@ describe "CounterCulture" do
|
|
|
1367
1367
|
SimpleDependent.delete_all
|
|
1368
1368
|
SimpleMain.delete_all
|
|
1369
1369
|
|
|
1370
|
-
|
|
1371
|
-
|
|
1370
|
+
2.times do
|
|
1371
|
+
main = SimpleMain.create
|
|
1372
|
+
3.times { main.simple_dependents.create }
|
|
1373
|
+
end
|
|
1372
1374
|
|
|
1373
|
-
SimpleDependent.counter_culture_fix_counts :batch_size =>
|
|
1375
|
+
SimpleDependent.counter_culture_fix_counts :batch_size => 1, verbose: true
|
|
1374
1376
|
|
|
1375
1377
|
expect(io.string).to include(
|
|
1376
1378
|
"Performing reconciling of SimpleDependent#simple_main.")
|
|
1379
|
+
expect(io.string).to include(
|
|
1380
|
+
"..")
|
|
1377
1381
|
expect(io.string).to include(
|
|
1378
1382
|
"Finished reconciling of SimpleDependent#simple_main.")
|
|
1379
1383
|
Rails.logger = logger
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: counter_culture
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.2.
|
|
4
|
+
version: 2.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Magnus von Koeller
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2019-04-
|
|
11
|
+
date: 2019-04-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: after_commit_action
|
|
@@ -336,7 +336,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
336
336
|
- !ruby/object:Gem::Version
|
|
337
337
|
version: '0'
|
|
338
338
|
requirements: []
|
|
339
|
-
|
|
339
|
+
rubyforge_project:
|
|
340
|
+
rubygems_version: 2.7.6.2
|
|
340
341
|
signing_key:
|
|
341
342
|
specification_version: 4
|
|
342
343
|
summary: Turbo-charged counter caches for your Rails app.
|