counter_culture 1.6.2 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -0
- data/VERSION +1 -1
- data/counter_culture.gemspec +53 -50
- data/lib/counter_culture/counter.rb +8 -0
- data/spec/counter_culture_spec.rb +32 -0
- data/spec/models/product.rb +1 -0
- data/spec/models/review.rb +1 -1
- data/spec/models/user.rb +2 -0
- data/spec/rails_app/Gemfile +2 -0
- data/spec/rails_app/Gemfile.lock +8 -3
- data/spec/rails_app/config/initializers/paper_trail.rb +1 -0
- data/spec/schema.rb +11 -0
- data/spec/spec_helper.rb +1 -0
- data/test_rails_versions.sh +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abf23aa3efb1a2f3257bbf6892182ce3ae4ce928
|
4
|
+
data.tar.gz: dba604aa21f0c043169ff3b7f49050450b74f870
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa34f25d6de4af563033c744e84b82a6ba2b45a14115f74245fa73b40e09e51a3882634863b0aa1d94bb6c7b004b73392c5f7b11180f6c55f47825d27af00c6f
|
7
|
+
data.tar.gz: 2a317f9b84e3d1f47b6a686cf3d53360514796905fcba622f19c897569fd17b806f99f7e563434ef4759d0d22212dd15db5134217d116debfc4849e3aef3fddc
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.7.0
|
data/counter_culture.gemspec
CHANGED
@@ -2,20 +2,19 @@
|
|
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 1.
|
5
|
+
# stub: counter_culture 1.7.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
s.name = "counter_culture"
|
9
|
-
s.version = "1.
|
8
|
+
s.name = "counter_culture"
|
9
|
+
s.version = "1.7.0"
|
10
10
|
|
11
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0"
|
12
|
-
s.require_paths = ["lib"
|
13
|
-
s.authors = ["Magnus von Koeller"
|
14
|
-
s.date = "2017-
|
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."
|
16
|
-
s.email = "magnus@vonkoeller.de"
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
13
|
+
s.authors = ["Magnus von Koeller"]
|
14
|
+
s.date = "2017-06-12"
|
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."
|
16
|
+
s.email = "magnus@vonkoeller.de"
|
17
17
|
s.extra_rdoc_files = [
|
18
|
-
"CHANGELOG.md",
|
19
18
|
"LICENSE.txt",
|
20
19
|
"README.md"
|
21
20
|
]
|
@@ -89,6 +88,7 @@ Gem::Specification.new do |s|
|
|
89
88
|
"spec/rails_app/config/initializers/backtrace_silencers.rb",
|
90
89
|
"spec/rails_app/config/initializers/inflections.rb",
|
91
90
|
"spec/rails_app/config/initializers/mime_types.rb",
|
91
|
+
"spec/rails_app/config/initializers/paper_trail.rb",
|
92
92
|
"spec/rails_app/config/initializers/secret_token.rb",
|
93
93
|
"spec/rails_app/config/initializers/session_store.rb",
|
94
94
|
"spec/rails_app/config/initializers/wrap_parameters.rb",
|
@@ -118,54 +118,57 @@ Gem::Specification.new do |s|
|
|
118
118
|
"spec/spec_helper.rb",
|
119
119
|
"test_rails_versions.sh"
|
120
120
|
]
|
121
|
-
s.homepage = "http://github.com/magnusvk/counter_culture"
|
122
|
-
s.licenses = ["MIT"
|
123
|
-
s.rubygems_version = "2.
|
124
|
-
s.summary = "Turbo-charged counter caches for your Rails app."
|
121
|
+
s.homepage = "http://github.com/magnusvk/counter_culture"
|
122
|
+
s.licenses = ["MIT"]
|
123
|
+
s.rubygems_version = "2.5.1"
|
124
|
+
s.summary = "Turbo-charged counter caches for your Rails app."
|
125
125
|
|
126
126
|
if s.respond_to? :specification_version then
|
127
127
|
s.specification_version = 4
|
128
128
|
|
129
129
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
130
|
-
s.add_runtime_dependency(%q<after_commit_action
|
131
|
-
s.add_runtime_dependency(%q<activerecord
|
132
|
-
s.add_runtime_dependency(%q<activesupport
|
133
|
-
s.add_development_dependency(%q<rake
|
134
|
-
s.add_development_dependency(%q<rails
|
135
|
-
s.add_development_dependency(%q<rspec
|
136
|
-
s.add_development_dependency(%q<awesome_print
|
137
|
-
s.add_development_dependency(%q<timecop
|
138
|
-
s.add_development_dependency(%q<paranoia
|
139
|
-
s.add_development_dependency(%q<
|
140
|
-
s.add_development_dependency(%q<
|
141
|
-
s.add_development_dependency(%q<
|
130
|
+
s.add_runtime_dependency(%q<after_commit_action>, ["~> 1.0"])
|
131
|
+
s.add_runtime_dependency(%q<activerecord>, [">= 3.0.0"])
|
132
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 3.0.0"])
|
133
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
134
|
+
s.add_development_dependency(%q<rails>, [">= 3.1.0"])
|
135
|
+
s.add_development_dependency(%q<rspec>, ["~> 3.0"])
|
136
|
+
s.add_development_dependency(%q<awesome_print>, [">= 0"])
|
137
|
+
s.add_development_dependency(%q<timecop>, [">= 0"])
|
138
|
+
s.add_development_dependency(%q<paranoia>, [">= 0"])
|
139
|
+
s.add_development_dependency(%q<paper_trail>, [">= 0"])
|
140
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
141
|
+
s.add_development_dependency(%q<bundler>, [">= 1.2.0"])
|
142
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.1"])
|
142
143
|
else
|
143
|
-
s.add_dependency(%q<after_commit_action
|
144
|
-
s.add_dependency(%q<activerecord
|
145
|
-
s.add_dependency(%q<activesupport
|
146
|
-
s.add_dependency(%q<rake
|
147
|
-
s.add_dependency(%q<rails
|
148
|
-
s.add_dependency(%q<rspec
|
149
|
-
s.add_dependency(%q<awesome_print
|
150
|
-
s.add_dependency(%q<timecop
|
151
|
-
s.add_dependency(%q<paranoia
|
152
|
-
s.add_dependency(%q<
|
153
|
-
s.add_dependency(%q<
|
154
|
-
s.add_dependency(%q<
|
144
|
+
s.add_dependency(%q<after_commit_action>, ["~> 1.0"])
|
145
|
+
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
146
|
+
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
147
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
148
|
+
s.add_dependency(%q<rails>, [">= 3.1.0"])
|
149
|
+
s.add_dependency(%q<rspec>, ["~> 3.0"])
|
150
|
+
s.add_dependency(%q<awesome_print>, [">= 0"])
|
151
|
+
s.add_dependency(%q<timecop>, [">= 0"])
|
152
|
+
s.add_dependency(%q<paranoia>, [">= 0"])
|
153
|
+
s.add_dependency(%q<paper_trail>, [">= 0"])
|
154
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
155
|
+
s.add_dependency(%q<bundler>, [">= 1.2.0"])
|
156
|
+
s.add_dependency(%q<jeweler>, ["~> 2.1"])
|
155
157
|
end
|
156
158
|
else
|
157
|
-
s.add_dependency(%q<after_commit_action
|
158
|
-
s.add_dependency(%q<activerecord
|
159
|
-
s.add_dependency(%q<activesupport
|
160
|
-
s.add_dependency(%q<rake
|
161
|
-
s.add_dependency(%q<rails
|
162
|
-
s.add_dependency(%q<rspec
|
163
|
-
s.add_dependency(%q<awesome_print
|
164
|
-
s.add_dependency(%q<timecop
|
165
|
-
s.add_dependency(%q<paranoia
|
166
|
-
s.add_dependency(%q<
|
167
|
-
s.add_dependency(%q<
|
168
|
-
s.add_dependency(%q<
|
159
|
+
s.add_dependency(%q<after_commit_action>, ["~> 1.0"])
|
160
|
+
s.add_dependency(%q<activerecord>, [">= 3.0.0"])
|
161
|
+
s.add_dependency(%q<activesupport>, [">= 3.0.0"])
|
162
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
163
|
+
s.add_dependency(%q<rails>, [">= 3.1.0"])
|
164
|
+
s.add_dependency(%q<rspec>, ["~> 3.0"])
|
165
|
+
s.add_dependency(%q<awesome_print>, [">= 0"])
|
166
|
+
s.add_dependency(%q<timecop>, [">= 0"])
|
167
|
+
s.add_dependency(%q<paranoia>, [">= 0"])
|
168
|
+
s.add_dependency(%q<paper_trail>, [">= 0"])
|
169
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
170
|
+
s.add_dependency(%q<bundler>, [">= 1.2.0"])
|
171
|
+
s.add_dependency(%q<jeweler>, ["~> 2.1"])
|
169
172
|
end
|
170
173
|
end
|
171
174
|
|
@@ -15,6 +15,7 @@ module CounterCulture
|
|
15
15
|
@touch = options.fetch(:touch, false)
|
16
16
|
@delta_magnitude = options[:delta_magnitude] || 1
|
17
17
|
@execute_after_commit = options.fetch(:execute_after_commit, false)
|
18
|
+
@with_papertrail = options.fetch(:with_papertrail, false)
|
18
19
|
end
|
19
20
|
|
20
21
|
# increments or decrements a counter cache
|
@@ -28,6 +29,7 @@ module CounterCulture
|
|
28
29
|
# :was => whether to get the current value or the old value of the
|
29
30
|
# first part of the relation
|
30
31
|
# :execute_after_commit => execute the column update outside of the transaction to avoid deadlocks
|
32
|
+
# :with_papertrail => update the column via Papertrail touch_with_version method
|
31
33
|
def change_counter_cache(obj, options)
|
32
34
|
change_counter_column = options.fetch(:counter_column) { counter_cache_name_for(obj) }
|
33
35
|
|
@@ -64,6 +66,12 @@ module CounterCulture
|
|
64
66
|
|
65
67
|
klass = relation_klass(relation, source: obj, was: options[:was])
|
66
68
|
primary_key = relation_primary_key(relation, source: obj, was: options[:was])
|
69
|
+
|
70
|
+
if @with_papertrail
|
71
|
+
instance = klass.where(primary_key => id_to_change).first
|
72
|
+
instance.paper_trail.touch_with_version if instance
|
73
|
+
end
|
74
|
+
|
67
75
|
klass.where(primary_key => id_to_change).update_all updates.join(', ')
|
68
76
|
end
|
69
77
|
end
|
@@ -1822,4 +1822,36 @@ describe "CounterCulture" do
|
|
1822
1822
|
end
|
1823
1823
|
end
|
1824
1824
|
end
|
1825
|
+
|
1826
|
+
describe "with papertrail support", versioning: true do
|
1827
|
+
it "creates a papertrail version when changed" do
|
1828
|
+
user = User.create
|
1829
|
+
product = Product.create
|
1830
|
+
|
1831
|
+
expect(product.reviews_count).to eq(0)
|
1832
|
+
expect(product.versions.count).to eq(1)
|
1833
|
+
|
1834
|
+
user.reviews.create :user_id => user.id, :product_id => product.id, :approvals => 13
|
1835
|
+
|
1836
|
+
product.reload
|
1837
|
+
|
1838
|
+
expect(product.reviews_count).to eq(1)
|
1839
|
+
expect(product.versions.count).to eq(2)
|
1840
|
+
end
|
1841
|
+
|
1842
|
+
it "does not create a papertrail version when papertrail flag not set" do
|
1843
|
+
user = User.create
|
1844
|
+
product = Product.create
|
1845
|
+
|
1846
|
+
expect(user.reviews_count).to eq(0)
|
1847
|
+
expect(user.versions.count).to eq(1)
|
1848
|
+
|
1849
|
+
user.reviews.create :user_id => user.id, :product_id => product.id, :approvals => 13
|
1850
|
+
|
1851
|
+
user.reload
|
1852
|
+
|
1853
|
+
expect(user.reviews_count).to eq(1)
|
1854
|
+
expect(user.versions.count).to eq(1)
|
1855
|
+
end
|
1856
|
+
end
|
1825
1857
|
end
|
data/spec/models/product.rb
CHANGED
data/spec/models/review.rb
CHANGED
@@ -2,7 +2,7 @@ class Review < ActiveRecord::Base
|
|
2
2
|
belongs_to :user
|
3
3
|
belongs_to :product
|
4
4
|
|
5
|
-
counter_culture :product, :touch => true
|
5
|
+
counter_culture :product, :touch => true, :with_papertrail => true
|
6
6
|
counter_culture :product, :column_name => 'rexiews_count', touch: :rexiews_updated_at
|
7
7
|
counter_culture :user
|
8
8
|
counter_culture :user, :column_name => proc { |model| model.review_type && model.review_type != 'null' ? "#{model.review_type}_count" : nil }, :column_names => {"reviews.review_type = 'using'" => 'using_count', "reviews.review_type = 'tried'" => 'tried_count', "reviews.review_type = 'null'" => nil}
|
data/spec/models/user.rb
CHANGED
data/spec/rails_app/Gemfile
CHANGED
data/spec/rails_app/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../..
|
3
3
|
specs:
|
4
|
-
counter_culture (
|
4
|
+
counter_culture (1.6.2)
|
5
5
|
activerecord (>= 3.0.0)
|
6
6
|
activesupport (>= 3.0.0)
|
7
|
-
after_commit_action (~> 1.0
|
7
|
+
after_commit_action (~> 1.0)
|
8
8
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
@@ -78,6 +78,9 @@ GEM
|
|
78
78
|
minitest (5.9.1)
|
79
79
|
nokogiri (1.6.8.1)
|
80
80
|
mini_portile2 (~> 2.1.0)
|
81
|
+
paper_trail (7.0.3)
|
82
|
+
activerecord (>= 4.0, < 5.2)
|
83
|
+
request_store (~> 1.1)
|
81
84
|
rack (1.6.5)
|
82
85
|
rack-test (0.6.3)
|
83
86
|
rack (>= 1.0)
|
@@ -106,6 +109,7 @@ GEM
|
|
106
109
|
rake (>= 0.8.7)
|
107
110
|
thor (>= 0.18.1, < 2.0)
|
108
111
|
rake (11.3.0)
|
112
|
+
request_store (1.3.2)
|
109
113
|
sass (3.4.22)
|
110
114
|
sass-rails (5.0.6)
|
111
115
|
railties (>= 4.0.0, < 6)
|
@@ -136,10 +140,11 @@ DEPENDENCIES
|
|
136
140
|
coffee-rails
|
137
141
|
counter_culture!
|
138
142
|
jquery-rails
|
143
|
+
paper_trail
|
139
144
|
rails (~> 4.2.0)
|
140
145
|
sass-rails
|
141
146
|
sqlite3
|
142
147
|
uglifier
|
143
148
|
|
144
149
|
BUNDLED WITH
|
145
|
-
1.
|
150
|
+
1.14.6
|
@@ -0,0 +1 @@
|
|
1
|
+
PaperTrail.config.track_associations = false
|
data/spec/schema.rb
CHANGED
@@ -213,4 +213,15 @@ ActiveRecord::Schema.define(:version => 20120522160158) do
|
|
213
213
|
t.integer "candidate_id"
|
214
214
|
t.integer "conversations_count", :default => 0, :null => false
|
215
215
|
end
|
216
|
+
|
217
|
+
create_table :versions, :force => true do |t|
|
218
|
+
t.string :item_type
|
219
|
+
t.integer :item_id, null: false
|
220
|
+
t.string :event, null: false
|
221
|
+
t.integer :whodunnit
|
222
|
+
t.text :object
|
223
|
+
t.text :object_changes
|
224
|
+
t.datetime :created_at
|
225
|
+
end
|
226
|
+
add_index :versions, [:item_id, :item_type]
|
216
227
|
end
|
data/spec/spec_helper.rb
CHANGED
data/test_rails_versions.sh
CHANGED
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: 1.
|
4
|
+
version: 1.7.0
|
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: 2017-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: after_commit_action
|
@@ -136,6 +136,20 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: paper_trail
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
154
|
name: rdoc
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,7 +200,6 @@ email: magnus@vonkoeller.de
|
|
186
200
|
executables: []
|
187
201
|
extensions: []
|
188
202
|
extra_rdoc_files:
|
189
|
-
- CHANGELOG.md
|
190
203
|
- LICENSE.txt
|
191
204
|
- README.md
|
192
205
|
files:
|
@@ -259,6 +272,7 @@ files:
|
|
259
272
|
- spec/rails_app/config/initializers/backtrace_silencers.rb
|
260
273
|
- spec/rails_app/config/initializers/inflections.rb
|
261
274
|
- spec/rails_app/config/initializers/mime_types.rb
|
275
|
+
- spec/rails_app/config/initializers/paper_trail.rb
|
262
276
|
- spec/rails_app/config/initializers/secret_token.rb
|
263
277
|
- spec/rails_app/config/initializers/session_store.rb
|
264
278
|
- spec/rails_app/config/initializers/wrap_parameters.rb
|
@@ -307,7 +321,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
307
321
|
version: '0'
|
308
322
|
requirements: []
|
309
323
|
rubyforge_project:
|
310
|
-
rubygems_version: 2.
|
324
|
+
rubygems_version: 2.5.1
|
311
325
|
signing_key:
|
312
326
|
specification_version: 4
|
313
327
|
summary: Turbo-charged counter caches for your Rails app.
|