test_after_commit 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile.lock +1 -1
- data/Readme.md +23 -1
- data/gemfiles/30.gemfile.lock +1 -1
- data/gemfiles/31.gemfile.lock +1 -1
- data/gemfiles/32.gemfile.lock +1 -1
- data/gemfiles/40.gemfile.lock +1 -1
- data/lib/test_after_commit.rb +4 -4
- data/lib/test_after_commit/version.rb +1 -1
- data/spec/database.rb +43 -0
- data/spec/spec_helper.rb +1 -1
- data/spec/test_after_commit_spec.rb +28 -0
- metadata +7 -15
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0771c33d6db21be88b98458395d484ee9414352a
|
4
|
+
data.tar.gz: 154e46ea5761f401201401913c2af9dc9ebf698e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9188eaac46d1ea76037eebbde65b5ee700d173ab597a9e0e04165fcc689875c3382a84acdc474dbccd7949ed75cfa2958975547552136a548b53670209d783aa
|
7
|
+
data.tar.gz: 0cbf8d71596dfd913df0160e1a5932b7bbc844472cab2e968cb5f075b1ae1597f73e4fcad5837adbbaca6a3a784367a10831b781141b5bcf99415c2bf257ad17
|
data/Gemfile.lock
CHANGED
data/Readme.md
CHANGED
@@ -5,9 +5,31 @@ Install
|
|
5
5
|
|
6
6
|
gem install test_after_commit
|
7
7
|
|
8
|
-
# Gemfile
|
8
|
+
# Gemfile (never include in :development !)
|
9
9
|
gem 'test_after_commit', :group => :test
|
10
10
|
|
11
|
+
Usage
|
12
|
+
=====
|
13
|
+
Test that the methods get called or the side-effect of the methods, something like:
|
14
|
+
|
15
|
+
```Ruby
|
16
|
+
class Car < ActiveRecord::Base
|
17
|
+
after_commit :foo, :on => :update
|
18
|
+
|
19
|
+
def foo
|
20
|
+
$foo = 1
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
...
|
25
|
+
|
26
|
+
it "sets $foo on commit" do
|
27
|
+
$foo.should == nil
|
28
|
+
car.save!
|
29
|
+
$foo.should == 1
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
11
33
|
TIPS
|
12
34
|
====
|
13
35
|
- hooks do not re-raise errors (with or without this gem)
|
data/gemfiles/30.gemfile.lock
CHANGED
data/gemfiles/31.gemfile.lock
CHANGED
data/gemfiles/32.gemfile.lock
CHANGED
data/gemfiles/40.gemfile.lock
CHANGED
data/lib/test_after_commit.rb
CHANGED
@@ -11,14 +11,14 @@ ActiveRecord::ConnectionAdapters::DatabaseStatements.class_eval do
|
|
11
11
|
@test_open_transactions += 1
|
12
12
|
result = yield
|
13
13
|
rescue ActiveRecord::Rollback => e
|
14
|
+
rolled_back = true
|
14
15
|
raise e
|
15
|
-
|
16
|
-
if @test_open_transactions == 1
|
16
|
+
ensure
|
17
|
+
if @test_open_transactions == 1 && !rolled_back
|
17
18
|
test_commit_records
|
18
19
|
end
|
19
|
-
result
|
20
|
-
ensure
|
21
20
|
@test_open_transactions -= 1
|
21
|
+
result
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/spec/database.rb
CHANGED
@@ -18,6 +18,16 @@ ActiveRecord::Schema.define(:version => 1) do
|
|
18
18
|
t.integer :car_id
|
19
19
|
t.timestamps
|
20
20
|
end
|
21
|
+
|
22
|
+
create_table "addresses", :force => true do |t|
|
23
|
+
t.integer :number_of_residents, :default => 0, :null => false
|
24
|
+
t.timestamps
|
25
|
+
end
|
26
|
+
|
27
|
+
create_table "people", :force => true do |t|
|
28
|
+
t.belongs_to :address
|
29
|
+
t.timestamps
|
30
|
+
end
|
21
31
|
end
|
22
32
|
|
23
33
|
class Car < ActiveRecord::Base
|
@@ -46,6 +56,12 @@ class Car < ActiveRecord::Base
|
|
46
56
|
raise ActiveRecord::Rollback if make_rollback
|
47
57
|
end
|
48
58
|
|
59
|
+
def self.returning_method_with_transaction
|
60
|
+
Car.transaction do
|
61
|
+
return Car.create
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
49
65
|
private
|
50
66
|
|
51
67
|
def save_once
|
@@ -91,3 +107,30 @@ class Bar < ActiveRecord::Base
|
|
91
107
|
self.table_name = "cars"
|
92
108
|
has_many :bars, :foreign_key => :car_id
|
93
109
|
end
|
110
|
+
|
111
|
+
class Address < ActiveRecord::Base
|
112
|
+
has_many :people
|
113
|
+
|
114
|
+
after_commit :create_residents, :on => :create
|
115
|
+
|
116
|
+
def create_residents
|
117
|
+
if ActiveRecord::VERSION::MAJOR == 3
|
118
|
+
# stupid hack because nested after_commit is broken on rails 3 and loops
|
119
|
+
return if @create_residents
|
120
|
+
@create_residents = true
|
121
|
+
end
|
122
|
+
|
123
|
+
Person.create!(:address => self)
|
124
|
+
Person.create!(:address => self)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
class Person < ActiveRecord::Base
|
129
|
+
belongs_to :address
|
130
|
+
|
131
|
+
after_commit :update_number_of_residents_on_address, :on => :create
|
132
|
+
|
133
|
+
def update_number_of_residents_on_address
|
134
|
+
address.update_attributes(:number_of_residents => address.number_of_residents + 1)
|
135
|
+
end
|
136
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,7 @@ RSpec.configure do |config|
|
|
13
13
|
# open a transaction without using .transaction as activerecord use_transactional_fixtures does
|
14
14
|
if ActiveRecord::VERSION::MAJOR > 3
|
15
15
|
connection = ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection).first
|
16
|
-
connection.begin_transaction joinable
|
16
|
+
connection.begin_transaction :joinable => false
|
17
17
|
else
|
18
18
|
connection = ActiveRecord::Base.connection_handler.connection_pools.values.map(&:connection).first
|
19
19
|
connection.increment_open_transactions
|
@@ -22,6 +22,13 @@ describe TestAfterCommit do
|
|
22
22
|
Car.called.should == [:update, :always]
|
23
23
|
end
|
24
24
|
|
25
|
+
it "fires on update_attribute" do
|
26
|
+
car = Car.create
|
27
|
+
Car.called.clear
|
28
|
+
car.update_attribute :counter, 123
|
29
|
+
Car.called.should == [:update, :always]
|
30
|
+
end
|
31
|
+
|
25
32
|
it "does not fire on rollback" do
|
26
33
|
car = Car.new
|
27
34
|
car.make_rollback = true
|
@@ -40,6 +47,11 @@ describe TestAfterCommit do
|
|
40
47
|
Car.called.should == [:create, :always]
|
41
48
|
end
|
42
49
|
|
50
|
+
it "fires when transaction block returns from method" do
|
51
|
+
Car.returning_method_with_transaction
|
52
|
+
Car.called.should == [:create, :always]
|
53
|
+
end
|
54
|
+
|
43
55
|
it "does not raises errors" do
|
44
56
|
car = Car.new
|
45
57
|
car.raise_error = true
|
@@ -86,4 +98,20 @@ describe TestAfterCommit do
|
|
86
98
|
Car.called.should == [:observed_after_commit, :create, :always]
|
87
99
|
end
|
88
100
|
end
|
101
|
+
|
102
|
+
context "nested after_commit" do
|
103
|
+
before do
|
104
|
+
@address = Address.create!
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'is executed' do
|
108
|
+
pending unless ENV["REAL"] && ActiveRecord::VERSION::MAJOR == 4
|
109
|
+
lambda { Person.create!(:address => @address) }.should change(@address, :number_of_residents).by(1)
|
110
|
+
|
111
|
+
# one from the line above and two from the after_commit
|
112
|
+
@address.people.count.should == 3
|
113
|
+
|
114
|
+
@address.number_of_residents.should == 3
|
115
|
+
end
|
116
|
+
end
|
89
117
|
end
|
metadata
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: test_after_commit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.1
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Michael Grosser
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-08-22 00:00:00.000000000 Z
|
13
12
|
dependencies: []
|
14
13
|
description:
|
15
14
|
email: michael@grosser.it
|
@@ -40,32 +39,25 @@ files:
|
|
40
39
|
homepage: http://github.com/grosser/test_after_commit
|
41
40
|
licenses:
|
42
41
|
- MIT
|
42
|
+
metadata: {}
|
43
43
|
post_install_message:
|
44
44
|
rdoc_options: []
|
45
45
|
require_paths:
|
46
46
|
- lib
|
47
47
|
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
-
none: false
|
49
48
|
requirements:
|
50
|
-
- -
|
49
|
+
- - '>='
|
51
50
|
- !ruby/object:Gem::Version
|
52
51
|
version: '0'
|
53
|
-
segments:
|
54
|
-
- 0
|
55
|
-
hash: 1962794305227048949
|
56
52
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
53
|
requirements:
|
59
|
-
- -
|
54
|
+
- - '>='
|
60
55
|
- !ruby/object:Gem::Version
|
61
56
|
version: '0'
|
62
|
-
segments:
|
63
|
-
- 0
|
64
|
-
hash: 1962794305227048949
|
65
57
|
requirements: []
|
66
58
|
rubyforge_project:
|
67
|
-
rubygems_version:
|
59
|
+
rubygems_version: 2.0.6
|
68
60
|
signing_key:
|
69
|
-
specification_version:
|
61
|
+
specification_version: 4
|
70
62
|
summary: makes after_commit callbacks testable in Rails 3+ with transactional_fixtures
|
71
63
|
test_files: []
|