activerecord-delay_touching 1.0.1 → 1.1.0

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
- SHA1:
3
- metadata.gz: 731f1b62489c8675bb3df76d2d12ffb90ae5cc58
4
- data.tar.gz: ff36c494301d616c19dd8300d05245eae989e553
2
+ SHA256:
3
+ metadata.gz: 6f6e8902b0825be4680b4fe982948f644dd585fbe075fdfa64e7452afc18274d
4
+ data.tar.gz: b38c413cd1159118323390208b8ff53a98c01f94c0493b43641b275bc4810fb6
5
5
  SHA512:
6
- metadata.gz: 5777ddf6f855fafac79a3866fdd7940986aeb2882f5622ca31930bca8beb86d20213fef6db7957f223828e69aa17f558d4e906218d54087007f2c9408fa8307b
7
- data.tar.gz: d0733fe1dd22034db87c60a3d46acf5a4034be3c7803c6ee3765a345735ba9c73afa563329158e8b6323837a760a434629900b4b9b50248fa5db9b9eb5509368
6
+ metadata.gz: c07d67c08967b9ff4738d8d351e91702c12f9c0af79bbe90802abad098efe38c1d58c5d558ecc097ed5aa645f0b000f07ea2aec86360c0ca6bcd6ab65b73e7cd
7
+ data.tar.gz: 216fd4bb29889f49cb0b964e514751dad55f7d9af0fde877ac46ccebd0f77f6ad7b9aa3336e5830578d7cb0a82be9d655175f4db7588376e2f5ca327c309ec9e
@@ -6,8 +6,8 @@ require 'activerecord/delay_touching/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "activerecord-delay_touching"
8
8
  spec.version = Activerecord::DelayTouching::VERSION
9
- spec.authors = ["Brian Morearty"]
10
- spec.email = ["brian@morearty.org"]
9
+ spec.authors = ["GoDaddy P&C Commerce", "Brian Morearty"]
10
+ spec.email = ["nemo-engg@godaddy.com", "brian@morearty.org"]
11
11
  spec.summary = %q{Batch up your ActiveRecord "touch" operations for better performance.}
12
12
  spec.description = %q{Batch up your ActiveRecord "touch" operations for better performance. ActiveRecord::Base.delay_touching do ... end. When "end" is reached, all accumulated "touch" calls will be consolidated into as few database round trips as possible.}
13
13
  spec.homepage = ""
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "activerecord", ">= 4.2"
21
+ spec.add_dependency "activerecord", "~> 4.2"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.6"
24
24
  spec.add_development_dependency "rake"
25
25
  spec.add_development_dependency "sqlite3"
26
26
  spec.add_development_dependency "timecop"
27
- spec.add_development_dependency "rspec-rails", "~> 2.0"
27
+ spec.add_development_dependency "rspec-rails", "~> 3.0"
28
28
  spec.add_development_dependency "simplecov"
29
29
  spec.add_development_dependency "simplecov-rcov"
30
30
  spec.add_development_dependency "yarjuf"
@@ -86,7 +86,8 @@ module ActiveRecord
86
86
  column = column.to_s
87
87
  changes[column] = current_time
88
88
  records.each do |record|
89
- next if record.destroyed?
89
+ # Don't bother if destroyed or not-saved
90
+ next unless record.persisted?
90
91
  record.instance_eval do
91
92
  write_attribute column, current_time
92
93
  @changed_attributes.except!(*changes.keys)
@@ -33,8 +33,13 @@ module ActiveRecord
33
33
  @records.map { |attrs, records| [attrs, records.group_by(&:class)] }
34
34
  end
35
35
 
36
+ # There are more records as long as there is at least one record that is persisted
36
37
  def more_records?
37
- @records.present?
38
+ @records.each do |_, set|
39
+ set.each { |record| return true if record.persisted? } # will shortcut on first persisted record found
40
+ end
41
+
42
+ false # no persisted records found, so no more records to process
38
43
  end
39
44
 
40
45
  def add_record(record, *columns)
@@ -48,7 +53,6 @@ module ActiveRecord
48
53
  @records.clear
49
54
  @already_updated_records.clear
50
55
  end
51
-
52
56
  end
53
57
  end
54
58
  end
@@ -1,5 +1,5 @@
1
1
  module Activerecord
2
2
  module DelayTouching
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -173,6 +173,30 @@ describe Activerecord::DelayTouching do
173
173
 
174
174
  end
175
175
 
176
+ context 'persistence fails and rolls back transaction' do
177
+
178
+ it 'does not infinitely loop' do
179
+ updates = 0
180
+ allow(ActiveRecord::Base.connection).to receive(:update).and_wrap_original do |m, *args|
181
+ updates = updates + 1
182
+ raise StandardError, 'Too many updates - likely infinite loop detected' if updates > 1
183
+
184
+ m.call(*args)
185
+ end
186
+
187
+ ActiveRecord::Base.delay_touching do
188
+ ActiveRecord::Base.transaction do
189
+ # write and touch any new record
190
+ record = Post.create!
191
+ record.touch
192
+ raise ActiveRecord::Rollback
193
+ end
194
+ end
195
+
196
+ end
197
+
198
+ end
199
+
176
200
  def expect_updates(tables)
177
201
  expected_sql = tables.map do |entry|
178
202
  if entry.kind_of?(Hash)
metadata CHANGED
@@ -1,27 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-delay_touching
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
+ - GoDaddy P&C Commerce
7
8
  - Brian Morearty
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-07-08 00:00:00.000000000 Z
12
+ date: 2018-08-24 00:00:00.000000000 Z
12
13
  dependencies:
13
14
  - !ruby/object:Gem::Dependency
14
15
  name: activerecord
15
16
  requirement: !ruby/object:Gem::Requirement
16
17
  requirements:
17
- - - ">="
18
+ - - "~>"
18
19
  - !ruby/object:Gem::Version
19
20
  version: '4.2'
20
21
  type: :runtime
21
22
  prerelease: false
22
23
  version_requirements: !ruby/object:Gem::Requirement
23
24
  requirements:
24
- - - ">="
25
+ - - "~>"
25
26
  - !ruby/object:Gem::Version
26
27
  version: '4.2'
27
28
  - !ruby/object:Gem::Dependency
@@ -86,14 +87,14 @@ dependencies:
86
87
  requirements:
87
88
  - - "~>"
88
89
  - !ruby/object:Gem::Version
89
- version: '2.0'
90
+ version: '3.0'
90
91
  type: :development
91
92
  prerelease: false
92
93
  version_requirements: !ruby/object:Gem::Requirement
93
94
  requirements:
94
95
  - - "~>"
95
96
  - !ruby/object:Gem::Version
96
- version: '2.0'
97
+ version: '3.0'
97
98
  - !ruby/object:Gem::Dependency
98
99
  name: simplecov
99
100
  requirement: !ruby/object:Gem::Requirement
@@ -140,6 +141,7 @@ description: Batch up your ActiveRecord "touch" operations for better performanc
140
141
  ActiveRecord::Base.delay_touching do ... end. When "end" is reached, all accumulated
141
142
  "touch" calls will be consolidated into as few database round trips as possible.
142
143
  email:
144
+ - nemo-engg@godaddy.com
143
145
  - brian@morearty.org
144
146
  executables: []
145
147
  extensions: []
@@ -180,7 +182,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
182
  version: '0'
181
183
  requirements: []
182
184
  rubyforge_project:
183
- rubygems_version: 2.4.8
185
+ rubygems_version: 2.7.6
184
186
  signing_key:
185
187
  specification_version: 4
186
188
  summary: Batch up your ActiveRecord "touch" operations for better performance.