activerecord-transactionable 1.0.0 → 1.0.1

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: 838f13e51d720bccaec065d8c435ff17cfa6464e
4
- data.tar.gz: 02a5eb9919b324c95a7d1cad51661aa7bac9ff87
3
+ metadata.gz: b6440f14017afb9dcd677d1c44f940204353a0f9
4
+ data.tar.gz: 3cbec64961e635a42d253d7eac90204939f5c5f7
5
5
  SHA512:
6
- metadata.gz: 4af2e50720c55e48e3a2859048d219bc4d6284564112fa27cc699a69456fc92f198d5c78bb474441ce41de36499e01a50c2b07b5355a16e2676fb8312e3b1a2b
7
- data.tar.gz: 2e92369926fc990d3ea2edf7c6faab25e6934dd299ad75d7012a2e2d0eb32c4949bb4c56ebcd9221168ea4e7c136c858abbdf1e496f5c07e45d70a15e6d728e6
6
+ metadata.gz: 40b2881b02f0cecefb459904c9f191284569405529f1128da17e6e11eccff08878c2b8523371a1f74f7156523191d5c278324960311f1b466907128a85447dac
7
+ data.tar.gz: bd40bf38a1565891b6dd4522207afab7696e3da2da44b6b2e7ffad71d62ae19488ce2768d5be051cbb9ac1ab70f475e4fb93cabe68536e809d144adcdfaf39a3
@@ -73,11 +73,8 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
73
73
  yield
74
74
  end
75
75
  else
76
- puts "what 1 #{__method__}, transaction_open: #{transaction_open}"
77
76
  error_handler_outside_transaction(object: object, transaction_open: transaction_open, **outside_args) do
78
- puts "what 1.2 #{__method__}, transaction_open: #{transaction_open}"
79
77
  run_inside_transaction_block(transaction_args: transaction_args, inside_args: inside_args, lock: lock, transaction_open: transaction_open, object: object) do
80
- puts "what 1.3 #{__method__}, transaction_open: #{transaction_open}"
81
78
  yield
82
79
  end
83
80
  end
@@ -92,17 +89,13 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
92
89
  # Note: with_lock will reload object!
93
90
  # Note: with_lock does not accept arguments like transaction does.
94
91
  object.with_lock do
95
- puts "what 4.a #{__method__}, transaction_open: #{transaction_open}"
96
92
  error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do
97
- puts "what 4.a.1 #{__method__}, transaction_open: #{transaction_open}"
98
93
  yield
99
94
  end
100
95
  end
101
96
  else
102
97
  object.transaction(**transaction_args) do
103
- puts "what 4.b #{__method__}, transaction_open: #{transaction_open}"
104
98
  error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do
105
- puts "what 4.b.1 #{__method__}, transaction_open: #{transaction_open}"
106
99
  yield
107
100
  end
108
101
  end
@@ -110,9 +103,7 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
110
103
  else
111
104
  raise ArgumentError, "No object to lock!" if lock
112
105
  ActiveRecord::Base.transaction(**transaction_args) do
113
- puts "what 4.c #{__method__}, transaction_open: #{transaction_open}"
114
106
  error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do
115
- puts "what 4.c.1 #{__method__}, transaction_open: #{transaction_open}"
116
107
  yield
117
108
  end
118
109
  end
@@ -127,7 +118,6 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
127
118
  end
128
119
 
129
120
  def error_handler_inside_transaction(object: nil, transaction_open:, **args)
130
- puts "what 5 #{__method__}, transaction_open: #{transaction_open}"
131
121
  rescued_errors = Array(args[:rescued_errors])
132
122
  prepared_errors = Array(args[:prepared_errors])
133
123
  retriable_errors = Array(args[:retriable_errors])
@@ -137,13 +127,11 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
137
127
  already_been_added_to_self, needing_added_to_self = rescued_errors.partition {|error_class| prepared_errors.include?(error_class)}
138
128
  local_context = INSIDE_CONTEXT
139
129
  run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self) do
140
- puts "what 5.1 #{__method__}, transaction_open: #{transaction_open}"
141
130
  yield
142
131
  end
143
132
  end
144
133
 
145
134
  def error_handler_outside_transaction(object: nil, transaction_open:, **args)
146
- puts "what 2.1 #{__method__}, transaction_open: #{transaction_open}"
147
135
  rescued_errors = Array(args[:outside_rescued_errors])
148
136
  prepared_errors = Array(args[:outside_prepared_errors])
149
137
  retriable_errors = Array(args[:outside_retriable_errors])
@@ -153,15 +141,13 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
153
141
  already_been_added_to_self, needing_added_to_self = rescued_errors.partition {|error_class| prepared_errors.include?(error_class)}
154
142
  local_context = OUTSIDE_CONTEXT
155
143
  run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self) do
156
- puts "what 2.2 #{__method__}, transaction_open: #{transaction_open}"
157
144
  yield
158
145
  end
159
146
  end
160
147
 
161
148
  def run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self)
162
- puts "what 3.1 #{__method__}: local_context: #{local_context}, transaction_open: #{transaction_open}"
163
149
  re_try = false
164
- result = begin
150
+ begin
165
151
  # If the block we yield to here raises an error that is not caught below the `true` will not get hit.
166
152
  # If the error is rescued higher up, like where the transaction in active record
167
153
  # rescues ActiveRecord::Rollback without re-raising, then transaction_wrapper will return nil
@@ -171,10 +157,8 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
171
157
  result = yield
172
158
  # When in the outside context we need to preserve the inside result so it bubles up unmolested with the "meaningful" result of the transaction.
173
159
  if transaction_open || local_context == OUTSIDE_CONTEXT
174
- puts "what 3.2.a preserving: #{result.inspect}, local_context: #{local_context}, transaction_open: #{transaction_open}"
175
160
  result # <= preserve the meaningful return value. Meaning: transaction succeeded, no errors raised
176
161
  else
177
- puts "what 3.2.b no errors! local_context: #{local_context}, transaction_open: #{transaction_open}"
178
162
  true # <= make the return value meaningful. Meaning: transaction succeeded, no errors raised
179
163
  end
180
164
  rescue *reraisable_errors => error
@@ -183,7 +167,6 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
183
167
  # the parent can still be caught and added to self.errors
184
168
  # Also adds the error to the object if there is an object.
185
169
  transaction_error_logger(object: object, error: error, add_to: nil, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context} re-raising!]")
186
- puts "what 3.2.c reraisable local_context: #{local_context}, transaction_open: #{transaction_open}"
187
170
  raise error
188
171
  rescue *retriable_errors => error
189
172
  # This will re-run the begin block above
@@ -191,28 +174,22 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
191
174
  # To avoid the infinite recursion, we track the retry state
192
175
  if re_try
193
176
  transaction_error_logger(object: object, error: error, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context} 2nd attempt]")
194
- puts "what 3.2.e post-retry local_context: #{local_context}, transaction_open: #{transaction_open}"
195
177
  false # <= make the return value meaningful. Meaning is: transaction failed after two attempts
196
178
  else
197
179
  re_try = true
198
180
  # Not adding error to base when retrying, because otherwise the added error may
199
181
  # prevent the subsequent save from working, in a catch-22
200
182
  transaction_error_logger(object: object, error: error, add_to: nil, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context} 1st attempt]")
201
- puts "what 3.2.d pre-retry local_context: #{local_context}, transaction_open: #{transaction_open}"
202
183
  retry
203
184
  end
204
185
  rescue *already_been_added_to_self => error
205
186
  # ActiveRecord::RecordInvalid, when done correctly, will have already added the error to object.
206
- puts "what 3.2.f already: local_context: #{local_context}, transaction_open: #{transaction_open}"
207
187
  transaction_error_logger(object: nil, error: error, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
208
188
  false # <= make the return value meaningful. Meaning is: transaction failed
209
189
  rescue *needing_added_to_self => error
210
- puts "what 3.2.g needing: local_context: #{local_context}, transaction_open: #{transaction_open}"
211
190
  transaction_error_logger(object: object, error: error, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
212
191
  false # <= make the return value meaningful. Meaning is: transaction failed
213
192
  end
214
- puts "what 3.3 result: #{result.inspect}"
215
- result
216
193
  end
217
194
 
218
195
  def transaction_error_logger(object:, error:, add_to: :base, additional_message: nil)
@@ -223,10 +200,8 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
223
200
  # the specific record that caused the ActiveRecord::RecordInvalid error may be out of scope
224
201
  # Ideally you would rewrite the caller to call transaction_wrapper on a single record (even if updates happen on other records)
225
202
  logger.error("[#{self}.transaction_wrapper] #{error.class}: #{error.message}#{additional_message}")
226
- puts("[#{self}.transaction_wrapper] #{error.class}: #{error.message}#{additional_message}")
227
203
  else
228
204
  logger.error("[#{self}.transaction_wrapper] On #{object.class} #{error.class}: #{error.message}#{additional_message}")
229
- puts("[#{self}.transaction_wrapper] On #{object.class} #{error.class}: #{error.message}#{additional_message}")
230
205
  object.errors.add(add_to, error.message) unless add_to.nil?
231
206
  end
232
207
  end
@@ -1,5 +1,5 @@
1
1
  module Activerecord
2
2
  module Transactionable
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-transactionable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling