ar_after_transaction 0.6.1 → 0.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
  SHA256:
3
- metadata.gz: ca30487c699cc7613223724f89d5ab79cf7dc882b529d8864cb62b3fe8a4e236
4
- data.tar.gz: a4e3f03ae30f349acd3193a8f9aedcf23f3c15715d3dc8fc345ed7c43210471e
3
+ metadata.gz: 260f2ee697d717537bd14d2fa30261d9270092be1efce392b10baea6c604f996
4
+ data.tar.gz: 96c6489521d2f4224d5a9544978c106f4ef698340900b20b60112fbda5465236
5
5
  SHA512:
6
- metadata.gz: 88dbdac2ce6163067a3f1b33427fbade19b0ec4d3310ca15a3a37db686a701cc81cf79fc2ffb4f513a5b6de7aca34d75067576df3ebc968a09fbfd885a11a1e7
7
- data.tar.gz: 7e15342f954edfb228ce60991bb15b3227d8e0ed85b5d5241b8301e57da1a70cf82cc9cf8167b39e167b71355bb54331d1f9aeff570979e2330299d98360a696
6
+ metadata.gz: 1a03f6148f86af85473b2f709152234a07e38c04e22f366e79582880411e7455ede71a49f454870cbce1d1ce833f410d925fa29a19effc08e77ceec48c9cf539
7
+ data.tar.gz: 96f2a7bc147a02f58c8b10597bd559dc86574195f465f9a22db136685951fe6f65def1c273bfb759452c1f07339e67aaaf3f5b90b04f1f44a18fd23fa4fbe530
data/Readme.md CHANGED
@@ -1,6 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/ar_after_transaction.png)](http://badge.fury.io/rb/ar_after_transaction)
2
- [![Build Status](https://travis-ci.org/grosser/ar_after_transaction.png)](https://travis-ci.org/grosser/ar_after_transaction)
3
- [![Dependency Status](https://gemnasium.com/grosser/ar_after_transaction.png)](https://gemnasium.com/grosser/ar_after_transaction)
2
+ ![CI](https://github.com/grosser/ar_after_transaction/workflows/CI/badge.svg)
4
3
 
5
4
  Do something only after the currently open transactions have finished.
6
5
 
@@ -9,36 +8,44 @@ Normally everything gets rolled back when a transaction fails, but you cannot ro
9
8
  Install
10
9
  =======
11
10
 
12
- gem install ar_after_transaction
11
+ ```bash
12
+ gem install ar_after_transaction
13
+ ```
13
14
 
14
15
 
15
16
  Usage
16
17
  =====
18
+
17
19
  ### just-in-time callbacks
18
- class User
19
- after_create :do_stuff, :oops
20
-
21
- def do_stuff
22
- after_transaction do
23
- send_an_email # cannot be rolled back
24
- end
25
- comments.create(...) # will be rolled back
26
- end
27
-
28
- def oops
29
- raise "do the rolback!"
30
- end
20
+
21
+ ```ruby
22
+ class User
23
+ after_create :do_stuff, :oops
24
+
25
+ def do_stuff
26
+ after_transaction do
27
+ send_an_email # cannot be rolled back
31
28
  end
29
+ comments.create(...) # will be rolled back
30
+ end
31
+
32
+ def oops
33
+ raise "do the rolback!"
34
+ end
35
+ end
36
+ ```
32
37
 
33
38
  ### General 'this should be rolled back when in a transaction' code like jobs
34
39
 
35
- class Resque
36
- def revertable_enqueue(*args)
37
- ActiveRecord::Base.after_transaction do
38
- enqueue(*args)
39
- end
40
- end
40
+ ```ruby
41
+ class Resque
42
+ def revertable_enqueue(*args)
43
+ ActiveRecord::Base.after_transaction do
44
+ enqueue(*args)
41
45
  end
46
+ end
47
+ end
48
+ ```
42
49
 
43
50
  ### When not in a transaction
44
51
  after_transaction will perform the given block immediately
@@ -47,25 +54,30 @@ after_transaction will perform the given block immediately
47
54
  after_transaction assumes zero open transactions.<br/>
48
55
  If you use transactional fixtures you should change it in test mode.
49
56
 
50
- # config/environments/test.rb
51
- config.after_initialize do
52
- ActiveRecord::Base.normally_open_transactions = 1
53
- end
57
+ ```ruby
58
+ # config/environments/test.rb
59
+ config.after_initialize do
60
+ ActiveRecord::Base.normally_open_transactions = 1
61
+ end
62
+ ```
54
63
 
55
64
  ### Rails 3: after_commit hook can replace the first usage example:
56
65
 
57
- class User
58
- after_commit :send_an_email :on=>:create
59
- after_create :do_stuff, :oops
60
- ...
61
- end
66
+ ```ruby
67
+ class User
68
+ after_commit :send_an_email on: :create
69
+ after_create :do_stuff, :oops
70
+ ...
71
+ end
72
+ ```
62
73
 
63
74
  Alternative
64
75
  ===========
76
+
65
77
  Rails 3+
66
78
  - basic support is built in, use it if you can!
67
79
  - `after_commit :foo`
68
- - `after_commit :bar, :on => :create / :update`
80
+ - `after_commit :bar, on: :create / :update`
69
81
  - [after_commit everywhere](https://dev.to/evilmartians/rails-aftercommit-everywhere--4j9g)
70
82
 
71
83
 
@@ -86,6 +98,7 @@ Authors
86
98
  - [Michael Wu](https://github.com/michaelmwu)
87
99
  - [C.W.](https://github.com/compwron)
88
100
  - [Ben Weintraub](https://github.com/benweint)
101
+ - [Vladimir Temnikov](https://github.com/vladimirtemnikov)
89
102
 
90
103
  [Michael Grosser](http://grosser.it)<br/>
91
104
  michael@grosser.it<br/>
@@ -1,72 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_record'
2
4
  require 'ar_after_transaction/version'
3
5
 
4
6
  module ARAfterTransaction
5
7
  module ClassMethods
6
- def self.extended( base )
7
- base.class_eval do
8
- class << self
9
- alias_method :transaction_without_after, :transaction
10
- alias_method :transaction, :transaction_with_after
11
- end
12
- end
13
- end
14
-
15
- def transaction_with_after(**args)
16
- clean = true
17
- transaction_without_after(**args) do
18
- begin
19
- yield
20
- rescue ActiveRecord::Rollback
21
- clean = false
22
- raise
23
- end
24
- end
25
- rescue Exception
26
- clean = false
27
- raise
28
- ensure
29
- unless transactions_open?
30
- callbacks = delete_after_transaction_callbacks
31
- callbacks.each(&:call) if clean
32
- end
33
- end
34
-
35
8
  def after_transaction(&block)
36
- if transactions_open?
37
- connection.after_transaction_callbacks ||= []
38
- connection.after_transaction_callbacks << block
39
- else
40
- yield
41
- end
9
+ connection.after_transaction(&block)
42
10
  end
43
11
 
44
12
  def normally_open_transactions
45
- @@normally_open_transactions ||= 0
13
+ connection.normally_open_transactions ||= 0
46
14
  end
47
15
 
48
- def normally_open_transactions=(value)
49
- @@normally_open_transactions = value
50
- end
16
+ delegate :normally_open_transactions=, to: :connection
51
17
 
52
18
  private
53
19
 
54
20
  def transactions_open?
55
- pool = connection_pool
56
- return false unless pool && pool.active_connection?
57
- connection.open_transactions > normally_open_transactions
58
- end
59
-
60
- def delete_after_transaction_callbacks
61
- result = connection.after_transaction_callbacks || []
62
- connection.after_transaction_callbacks = []
63
- result
21
+ connection.send :transactions_open?
64
22
  end
65
23
  end
66
24
 
67
25
  module InstanceMethods
68
26
  def after_transaction(&block)
69
- self.class.after_transaction(&block)
27
+ self.class.connection.after_transaction(&block)
70
28
  end
71
29
  end
72
30
  end
@@ -76,10 +34,57 @@ module ARAfterTransactionConnection
76
34
  base.class_eval do
77
35
  attr_accessor :normally_open_transactions
78
36
  attr_accessor :after_transaction_callbacks
37
+
38
+ alias_method :transaction_without_after, :transaction
39
+ alias_method :transaction, :transaction_with_after
79
40
  end
80
41
  end
42
+
43
+ def transaction_with_after(**args)
44
+ clean = true
45
+ transaction_without_after(**args) do
46
+ begin
47
+ yield
48
+ rescue ActiveRecord::Rollback
49
+ clean = false
50
+ raise
51
+ end
52
+ end
53
+ rescue StandardError
54
+ clean = false
55
+ raise
56
+ ensure
57
+ unless transactions_open?
58
+ callbacks = delete_after_transaction_callbacks
59
+ callbacks.each(&:call) if clean
60
+ end
61
+ end
62
+
63
+ def after_transaction(&block)
64
+ if transactions_open?
65
+ self.after_transaction_callbacks ||= []
66
+ self.after_transaction_callbacks << block
67
+ else
68
+ yield
69
+ end
70
+ end
71
+
72
+ private
73
+
74
+ def transactions_open?
75
+ return false unless active?
76
+
77
+ self.normally_open_transactions ||= 0
78
+ open_transactions > normally_open_transactions
79
+ end
80
+
81
+ def delete_after_transaction_callbacks
82
+ result = after_transaction_callbacks || []
83
+ self.after_transaction_callbacks = []
84
+ result
85
+ end
81
86
  end
82
87
 
83
- ActiveRecord::Base.send(:extend, ARAfterTransaction::ClassMethods)
84
- ActiveRecord::Base.send(:include, ARAfterTransaction::InstanceMethods)
85
- ActiveRecord::ConnectionAdapters::AbstractAdapter.send(:include, ARAfterTransactionConnection)
88
+ ActiveRecord::Base.extend ARAfterTransaction::ClassMethods
89
+ ActiveRecord::Base.include ARAfterTransaction::InstanceMethods
90
+ ActiveRecord::ConnectionAdapters::AbstractAdapter.include ARAfterTransactionConnection
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module ARAfterTransaction
2
- VERSION = Version = '0.6.1'
3
- end
3
+ VERSION = Version = '0.7.0'
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ar_after_transaction
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Grosser
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-07-13 00:00:00.000000000 Z
11
+ date: 2020-12-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 4.2.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6.1'
22
+ version: '6.2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,9 +29,9 @@ dependencies:
29
29
  version: 4.2.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6.1'
32
+ version: '6.2'
33
33
  - !ruby/object:Gem::Dependency
34
- name: wwtd
34
+ name: bump
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - ">="
@@ -45,7 +45,7 @@ dependencies:
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: bump
48
+ name: rails
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
@@ -78,14 +78,14 @@ dependencies:
78
78
  requirements:
79
79
  - - "~>"
80
80
  - !ruby/object:Gem::Version
81
- version: '2'
81
+ version: '3'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '2'
88
+ version: '3'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: sqlite3
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +101,7 @@ dependencies:
101
101
  - !ruby/object:Gem::Version
102
102
  version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
- name: rails
104
+ name: wwtd
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - ">="