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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c32ed47b22301d4d8c78b84070e31848f83f9400
4
- data.tar.gz: e65f3e880c94317dd98ad5ec7f4f47d06af13653
3
+ metadata.gz: abf23aa3efb1a2f3257bbf6892182ce3ae4ce928
4
+ data.tar.gz: dba604aa21f0c043169ff3b7f49050450b74f870
5
5
  SHA512:
6
- metadata.gz: d6af1fba641af3a199d2e0f9f1a5cfe53e387c585a71dda8395b97f71ff4beccc45c89542dcae6ac9d54c26b1bfa723421c6dd5af1cd25f3a477285862aea908
7
- data.tar.gz: 7d73f3bcd4a5671a4c92d69d4155483b44495d2451cb2bf1299f560a3ff03dab824c3c87b375c4ab82953e0a135614feeb78d144eb669a775576190f668f0443
6
+ metadata.gz: fa34f25d6de4af563033c744e84b82a6ba2b45a14115f74245fa73b40e09e51a3882634863b0aa1d94bb6c7b004b73392c5f7b11180f6c55f47825d27af00c6f
7
+ data.tar.gz: 2a317f9b84e3d1f47b6a686cf3d53360514796905fcba622f19c897569fd17b806f99f7e563434ef4759d0d22212dd15db5134217d116debfc4849e3aef3fddc
@@ -8,7 +8,7 @@ env:
8
8
  - "RAILS_VERSION=4.1.0"
9
9
  - "RAILS_VERSION=4.2.0"
10
10
  - "RAILS_VERSION=5.0.0"
11
- - "RAILS_VERSION=5.1.0.rc1"
11
+ - "RAILS_VERSION=5.1.0"
12
12
  install:
13
13
  - bundle update
14
14
  script: TRAVIS=true bundle exec rake spec
@@ -1,3 +1,8 @@
1
+ ## 1.7.0 (June 12, 2017)
2
+
3
+ Improvements:
4
+ - Support for creating `paper_trail` versions when counters change
5
+
1
6
  ## 1.6.2 (April 26, 2017)
2
7
 
3
8
  Bugfixes;
data/Gemfile CHANGED
@@ -28,6 +28,7 @@ group :development, :test do
28
28
 
29
29
  # to test the integration
30
30
  gem "paranoia"
31
+ gem "paper_trail"
31
32
  end
32
33
 
33
34
  group :development do
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.2
1
+ 1.7.0
@@ -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.6.2 ruby lib
5
+ # stub: counter_culture 1.7.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
- s.name = "counter_culture".freeze
9
- s.version = "1.6.2"
8
+ s.name = "counter_culture"
9
+ s.version = "1.7.0"
10
10
 
11
- s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
- s.require_paths = ["lib".freeze]
13
- s.authors = ["Magnus von Koeller".freeze]
14
- s.date = "2017-04-26"
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
- s.email = "magnus@vonkoeller.de".freeze
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".freeze
122
- s.licenses = ["MIT".freeze]
123
- s.rubygems_version = "2.6.10".freeze
124
- s.summary = "Turbo-charged counter caches for your Rails app.".freeze
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>.freeze, ["~> 1.0"])
131
- s.add_runtime_dependency(%q<activerecord>.freeze, [">= 3.0.0"])
132
- s.add_runtime_dependency(%q<activesupport>.freeze, [">= 3.0.0"])
133
- s.add_development_dependency(%q<rake>.freeze, [">= 0"])
134
- s.add_development_dependency(%q<rails>.freeze, [">= 3.1.0"])
135
- s.add_development_dependency(%q<rspec>.freeze, ["~> 3.0"])
136
- s.add_development_dependency(%q<awesome_print>.freeze, [">= 0"])
137
- s.add_development_dependency(%q<timecop>.freeze, [">= 0"])
138
- s.add_development_dependency(%q<paranoia>.freeze, [">= 0"])
139
- s.add_development_dependency(%q<rdoc>.freeze, ["~> 3.12"])
140
- s.add_development_dependency(%q<bundler>.freeze, [">= 1.2.0"])
141
- s.add_development_dependency(%q<jeweler>.freeze, ["~> 2.1"])
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>.freeze, ["~> 1.0"])
144
- s.add_dependency(%q<activerecord>.freeze, [">= 3.0.0"])
145
- s.add_dependency(%q<activesupport>.freeze, [">= 3.0.0"])
146
- s.add_dependency(%q<rake>.freeze, [">= 0"])
147
- s.add_dependency(%q<rails>.freeze, [">= 3.1.0"])
148
- s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
149
- s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
150
- s.add_dependency(%q<timecop>.freeze, [">= 0"])
151
- s.add_dependency(%q<paranoia>.freeze, [">= 0"])
152
- s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
153
- s.add_dependency(%q<bundler>.freeze, [">= 1.2.0"])
154
- s.add_dependency(%q<jeweler>.freeze, ["~> 2.1"])
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>.freeze, ["~> 1.0"])
158
- s.add_dependency(%q<activerecord>.freeze, [">= 3.0.0"])
159
- s.add_dependency(%q<activesupport>.freeze, [">= 3.0.0"])
160
- s.add_dependency(%q<rake>.freeze, [">= 0"])
161
- s.add_dependency(%q<rails>.freeze, [">= 3.1.0"])
162
- s.add_dependency(%q<rspec>.freeze, ["~> 3.0"])
163
- s.add_dependency(%q<awesome_print>.freeze, [">= 0"])
164
- s.add_dependency(%q<timecop>.freeze, [">= 0"])
165
- s.add_dependency(%q<paranoia>.freeze, [">= 0"])
166
- s.add_dependency(%q<rdoc>.freeze, ["~> 3.12"])
167
- s.add_dependency(%q<bundler>.freeze, [">= 1.2.0"])
168
- s.add_dependency(%q<jeweler>.freeze, ["~> 2.1"])
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
@@ -3,4 +3,5 @@ class Product < ActiveRecord::Base
3
3
 
4
4
  counter_culture :category, :foreign_key_values => proc {|foreign_key_value| Category.pluck(:id) }
5
5
 
6
+ has_paper_trail
6
7
  end
@@ -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}
@@ -9,6 +9,8 @@ class User < ActiveRecord::Base
9
9
  has_many :reviews
10
10
  accepts_nested_attributes_for :reviews, :allow_destroy => true
11
11
 
12
+ has_paper_trail
13
+
12
14
  default_scope do
13
15
  if _default_scope_enabled
14
16
  query = joins("LEFT OUTER JOIN companies")
@@ -23,6 +23,8 @@ gem 'jquery-rails'
23
23
 
24
24
  gem 'counter_culture', path: '../..'
25
25
 
26
+ gem 'paper_trail'
27
+
26
28
  # To use ActiveModel has_secure_password
27
29
  # gem 'bcrypt-ruby', '~> 3.0.0'
28
30
 
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- counter_culture (0.2.3)
4
+ counter_culture (1.6.2)
5
5
  activerecord (>= 3.0.0)
6
6
  activesupport (>= 3.0.0)
7
- after_commit_action (~> 1.0.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.13.6
150
+ 1.14.6
@@ -0,0 +1 @@
1
+ PaperTrail.config.track_associations = false
@@ -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
@@ -7,6 +7,7 @@ require "rails_app/config/environment"
7
7
 
8
8
  require 'rspec'
9
9
  require 'counter_culture'
10
+ require 'paper_trail/frameworks/rspec'
10
11
 
11
12
  CI_TEST_RUN = (ENV['TRAVIS'] && 'TRAVIS') || (ENV['CIRCLECI'] && 'CIRCLE') || ENV["CI"] && 'CI'
12
13
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  set -e
4
4
 
5
- for RAILS_VERSION in "3.2.0" "4.0.0" "4.1.0" "4.2.0" "5.0.0" "5.1.0.rc1"
5
+ for RAILS_VERSION in "3.2.0" "4.0.0" "4.1.0" "4.2.0" "5.0.0" "5.1.0"
6
6
  do
7
7
  export RAILS_VERSION
8
8
  echo "Rails $RAILS_VERSION"
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.6.2
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-04-26 00:00:00.000000000 Z
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.6.10
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.