activerecord-transactionable 2.0.4 → 3.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,17 @@
1
- require 'active_model'
2
- require 'active_record'
1
+ # frozen_string_literal: true
2
+
3
+ require "active_model"
4
+ require "active_record"
3
5
  # apparently needed for Rails 4.0 compatibility with rspec, when
4
6
  # this gem is loaded before the rails gem by bundler, as will happen when you
5
7
  # keep your Gemfile sorted alphabetically.
6
- require 'active_record/validations'
8
+ require "active_record/validations"
7
9
 
8
- require 'activerecord/transactionable/version'
9
- require 'activerecord/transactionable/result'
10
+ require "activerecord/transactionable/version"
11
+ require "activerecord/transactionable/result"
10
12
 
11
- module Activerecord # Note lowercase "r" in Activerecord (different namespace than rails' module)
13
+ # Note lowercase "r" in Activerecord (different namespace than rails' module)
14
+ module Activerecord
12
15
  # SRP: Provides an example of correct behavior for wrapping transactions.
13
16
  # NOTE: Rails' transactions are per-database connection, not per-model, nor per-instance,
14
17
  # see: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html
@@ -48,13 +51,11 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
48
51
  outside_reraisable_errors
49
52
  outside_num_retry_attempts
50
53
  ].freeze
51
- INSIDE_CONTEXT = 'inside'.freeze
52
- OUTSIDE_CONTEXT = 'outside'.freeze
54
+ INSIDE_CONTEXT = "inside"
55
+ OUTSIDE_CONTEXT = "outside"
53
56
 
54
- def transaction_wrapper(**args)
55
- self.class.transaction_wrapper(object: self, **args) do |is_retry|
56
- yield is_retry
57
- end
57
+ def transaction_wrapper(**args, &block)
58
+ self.class.transaction_wrapper(object: self, **args, &block)
58
59
  end
59
60
 
60
61
  module ClassMethods
@@ -62,23 +63,31 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
62
63
  lock = args.delete(:lock)
63
64
  inside_args = extract_args(args, INSIDE_TRANSACTION_ERROR_HANDLERS)
64
65
  outside_args = extract_args(args, OUTSIDE_TRANSACTION_ERROR_HANDLERS)
66
+ transaction_args = extract_args(args, TRANSACTION_METHOD_ARG_NAMES)
65
67
  transaction_open = ActiveRecord::Base.connection.transaction_open?
66
- raise ArgumentError, "#{self} does not know how to handle arguments: #{args.keys.inspect}" unless args.keys.empty?
67
- if ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.detect { |error| inside_args.values.flatten.uniq.include?(error) }
68
- raise ArgumentError, "#{self} should not rescue #{ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.inspect} inside a transaction: #{inside_args.keys.inspect}"
68
+ unless args.keys.empty?
69
+ raise ArgumentError,
70
+ "#{self} does not know how to handle arguments: #{args.keys.inspect}"
71
+ end
72
+ if ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.detect do |error|
73
+ inside_args.values.flatten.uniq.include?(error)
74
+ end
75
+ raise ArgumentError,
76
+ "#{self} should not rescue #{ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.inspect} inside a transaction: #{inside_args.keys.inspect}"
69
77
  end
70
78
 
71
- transaction_args = extract_args(args, TRANSACTION_METHOD_ARG_NAMES)
72
79
  if transaction_open
73
80
  if transaction_args[REQUIRES_NEW]
74
81
  logger.debug("[#{self}.transaction_wrapper] Will start a nested transaction.")
75
82
  else
76
83
  transaction_args[REQUIRES_NEW] = true
77
- logger.warn("[#{self}.transaction_wrapper] Opening a nested transaction. Setting require_new: true")
84
+ logger.warn("[#{self}.transaction_wrapper] Opening a nested transaction. Setting #{REQUIRES_NEW}: true")
78
85
  end
79
86
  end
80
- error_handler_outside_transaction(object: object, transaction_open: transaction_open, **outside_args) do |outside_is_retry|
81
- run_inside_transaction_block(transaction_args: transaction_args, inside_args: inside_args, lock: lock, transaction_open: transaction_open, object: object) do |is_retry|
87
+ error_handler_outside_transaction(object: object, transaction_open: transaction_open,
88
+ **outside_args) do |outside_is_retry|
89
+ run_inside_transaction_block(transaction_args: transaction_args, inside_args: inside_args, lock: lock,
90
+ transaction_open: transaction_open, object: object) do |is_retry|
82
91
  # regardless of the retry being inside or outside the transaction, it is still a retry.
83
92
  yield outside_is_retry || is_retry
84
93
  end
@@ -87,30 +96,26 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
87
96
 
88
97
  private
89
98
 
90
- def run_inside_transaction_block(transaction_args:, inside_args:, lock:, transaction_open:, object: nil)
99
+ def run_inside_transaction_block(transaction_args:, inside_args:, lock:, transaction_open:, object: nil, &block)
91
100
  if object
92
101
  if lock
93
- # Note: with_lock will reload object!
102
+ # NOTE: with_lock will reload object!
94
103
  # Note: with_lock does not accept arguments like transaction does.
95
104
  object.with_lock do
96
- error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do |is_retry|
97
- yield is_retry
98
- end
105
+ error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args,
106
+ &block)
99
107
  end
100
108
  else
101
109
  object.transaction(**transaction_args) do
102
- error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do |is_retry|
103
- yield is_retry
104
- end
110
+ error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args,
111
+ &block)
105
112
  end
106
113
  end
107
114
  else
108
- raise ArgumentError, 'No object to lock!' if lock
115
+ raise ArgumentError, "No object to lock!" if lock
109
116
 
110
117
  ActiveRecord::Base.transaction(**transaction_args) do
111
- error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args) do |is_retry|
112
- yield is_retry
113
- end
118
+ error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args, &block)
114
119
  end
115
120
  end
116
121
  end
@@ -122,7 +127,7 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
122
127
  end
123
128
  end
124
129
 
125
- def error_handler_inside_transaction(object: nil, transaction_open:, **args)
130
+ def error_handler_inside_transaction(transaction_open:, object: nil, **args, &block)
126
131
  rescued_errors = Array(args[:rescued_errors])
127
132
  prepared_errors = Array(args[:prepared_errors])
128
133
  retriable_errors = Array(args[:retriable_errors])
@@ -130,14 +135,15 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
130
135
  num_retry_attempts = args[:num_retry_attempts] ? args[:num_retry_attempts].to_i : DEFAULT_NUM_RETRY_ATTEMPTS
131
136
  rescued_errors.concat(DEFAULT_ERRORS_TO_HANDLE_INSIDE_TRANSACTION)
132
137
  prepared_errors.concat(DEFAULT_ERRORS_PREPARE_ON_SELF_INSIDE)
133
- already_been_added_to_self, needing_added_to_self = rescued_errors.partition { |error_class| prepared_errors.include?(error_class) }
134
- local_context = INSIDE_CONTEXT
135
- run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self, num_retry_attempts) do |is_retry|
136
- yield is_retry
138
+ already_been_added_to_self, needing_added_to_self = rescued_errors.partition do |error_class|
139
+ prepared_errors.include?(error_class)
137
140
  end
141
+ local_context = INSIDE_CONTEXT
142
+ run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors,
143
+ already_been_added_to_self, needing_added_to_self, num_retry_attempts, &block)
138
144
  end
139
145
 
140
- def error_handler_outside_transaction(object: nil, transaction_open:, **args)
146
+ def error_handler_outside_transaction(transaction_open:, object: nil, **args, &block)
141
147
  rescued_errors = Array(args[:outside_rescued_errors])
142
148
  prepared_errors = Array(args[:outside_prepared_errors])
143
149
  retriable_errors = Array(args[:outside_retriable_errors])
@@ -145,11 +151,12 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
145
151
  num_retry_attempts = args[:outside_num_retry_attempts] ? args[:outside_num_retry_attempts].to_i : DEFAULT_NUM_RETRY_ATTEMPTS
146
152
  rescued_errors.concat(DEFAULT_ERRORS_TO_HANDLE_OUTSIDE_TRANSACTION)
147
153
  prepared_errors.concat(DEFAULT_ERRORS_PREPARE_ON_SELF_OUTSIDE)
148
- already_been_added_to_self, needing_added_to_self = rescued_errors.partition { |error_class| prepared_errors.include?(error_class) }
149
- local_context = OUTSIDE_CONTEXT
150
- run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self, num_retry_attempts) do |is_retry|
151
- yield is_retry
154
+ already_been_added_to_self, needing_added_to_self = rescued_errors.partition do |error_class|
155
+ prepared_errors.include?(error_class)
152
156
  end
157
+ local_context = OUTSIDE_CONTEXT
158
+ run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors,
159
+ already_been_added_to_self, needing_added_to_self, num_retry_attempts, &block)
153
160
  end
154
161
 
155
162
  def run_block_with_retry(object, local_context, transaction_open, retriable_errors, reraisable_errors, already_been_added_to_self, needing_added_to_self, num_retry_attempts)
@@ -173,41 +180,46 @@ module Activerecord # Note lowercase "r" in Activerecord (different namespace th
173
180
  else
174
181
  Activerecord::Transactionable::Result.new(true, context: local_context, attempt: attempt, transaction_open: transaction_open) # <= make the return value meaningful. Meaning: transaction succeeded, no errors raised
175
182
  end
176
- rescue *reraisable_errors => error
183
+ rescue *reraisable_errors => e
177
184
  # This has highest precedence because raising is the most critical functionality of a raised error to keep
178
185
  # if that is in the intended behavior, and this way a specific child of StandardError can be reraised while
179
186
  # the parent can still be caught and added to self.errors
180
187
  # Also adds the error to the object if there is an object.
181
- transaction_error_logger(object: object, error: error, result: nil, attempt: attempt, add_to: nil, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context} re-raising!]")
182
- raise error
183
- rescue *retriable_errors => error
188
+ transaction_error_logger(object: object, error: e, result: nil, attempt: attempt, add_to: nil,
189
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context} re-raising!]")
190
+ raise e
191
+ rescue *retriable_errors => e
184
192
  # This will re-run the begin block above
185
193
  # WARNING: If the same error keeps getting thrown this would infinitely recurse!
186
194
  # To avoid the infinite recursion, we track the retry state
187
195
  if attempt >= num_retry_attempts
188
- result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: error, attempt: attempt, type: 'retriable') # <= make the return value meaningful. Meaning is: transaction failed after <attempt> attempts
189
- transaction_error_logger(object: object, error: error, result: result, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
196
+ result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: e, attempt: attempt, type: "retriable") # <= make the return value meaningful. Meaning is: transaction failed after <attempt> attempts
197
+ transaction_error_logger(object: object, error: e, result: result,
198
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]")
190
199
  result
191
200
  else
192
201
  re_try = true
193
202
  # Not adding error to base when retrying, because otherwise the added error may
194
203
  # prevent the subsequent save from working, in a catch-22
195
- transaction_error_logger(object: object, error: error, result: nil, attempt: attempt, add_to: nil, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
204
+ transaction_error_logger(object: object, error: e, result: nil, attempt: attempt, add_to: nil,
205
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]")
196
206
  retry
197
207
  end
198
- rescue *already_been_added_to_self => error
208
+ rescue *already_been_added_to_self => e
199
209
  # ActiveRecord::RecordInvalid, when done correctly, will have already added the error to object.
200
- result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: error, attempt: attempt, type: 'already_added') # <= make the return value meaningful. Meaning is: transaction failed
201
- transaction_error_logger(object: nil, error: error, result: result, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
210
+ result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: e, attempt: attempt, type: "already_added") # <= make the return value meaningful. Meaning is: transaction failed
211
+ transaction_error_logger(object: nil, error: e, result: result,
212
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]")
202
213
  result
203
- rescue *needing_added_to_self => error
204
- result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: error, attempt: attempt, type: 'needing_added') # <= make the return value meaningful. Meaning is: transaction failed
205
- transaction_error_logger(object: object, error: error, result: result, additional_message: " [#{transaction_open ? 'nested ' : ''}#{local_context}]")
214
+ rescue *needing_added_to_self => e
215
+ result = Activerecord::Transactionable::Result.new(false, context: local_context, transaction_open: transaction_open, error: e, attempt: attempt, type: "needing_added") # <= make the return value meaningful. Meaning is: transaction failed
216
+ transaction_error_logger(object: object, error: e, result: result,
217
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]")
206
218
  result
207
219
  end
208
220
  end
209
221
 
210
- def transaction_error_logger(object:, error:, result:, attempt: nil, add_to: :base, additional_message: nil, **opts)
222
+ def transaction_error_logger(object:, error:, result:, attempt: nil, add_to: :base, additional_message: nil, **_opts)
211
223
  # Ruby arguments, like object, are passed by reference,
212
224
  # so this update to errors will be available to the caller
213
225
  if object.nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-transactionable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.4
4
+ version: 3.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-09-13 00:00:00.000000000 Z
11
+ date: 2021-11-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -39,103 +39,257 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: appraisal
42
+ name: byebug
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '2.2'
47
+ version: '11.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '2.2'
54
+ version: '11.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: bundler
56
+ name: factory_bot
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '4.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '4.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '12.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '12.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '1.15'
89
+ version: '3.10'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '1.15'
96
+ version: '3.10'
69
97
  - !ruby/object:Gem::Dependency
70
- name: coveralls
98
+ name: rspec-benchmark
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '0.8'
103
+ version: '0.6'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '0.8'
110
+ version: '0.6'
83
111
  - !ruby/object:Gem::Dependency
84
- name: rake
112
+ name: rspec-block_is_expected
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '12.2'
117
+ version: '1.0'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '12.2'
124
+ version: '1.0'
97
125
  - !ruby/object:Gem::Dependency
98
- name: rspec
126
+ name: rspec-pending_for
99
127
  requirement: !ruby/object:Gem::Requirement
100
128
  requirements:
101
129
  - - "~>"
102
130
  - !ruby/object:Gem::Version
103
- version: '3.4'
131
+ version: '0.1'
104
132
  type: :development
105
133
  prerelease: false
106
134
  version_requirements: !ruby/object:Gem::Requirement
107
135
  requirements:
108
136
  - - "~>"
109
137
  - !ruby/object:Gem::Version
110
- version: '3.4'
138
+ version: '0.1'
111
139
  - !ruby/object:Gem::Dependency
112
- name: thor
140
+ name: silent_stream
113
141
  requirement: !ruby/object:Gem::Requirement
114
142
  requirements:
115
143
  - - "~>"
116
144
  - !ruby/object:Gem::Version
117
- version: 0.19.1
145
+ version: '1.0'
118
146
  type: :development
119
147
  prerelease: false
120
148
  version_requirements: !ruby/object:Gem::Requirement
121
149
  requirements:
122
150
  - - "~>"
123
151
  - !ruby/object:Gem::Version
124
- version: 0.19.1
152
+ version: '1.0'
125
153
  - !ruby/object:Gem::Dependency
126
- name: wwtd
154
+ name: rubocop
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
157
  - - "~>"
130
158
  - !ruby/object:Gem::Version
131
- version: '1.3'
159
+ version: '1.22'
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
164
  - - "~>"
137
165
  - !ruby/object:Gem::Version
138
- version: '1.3'
166
+ version: '1.22'
167
+ - !ruby/object:Gem::Dependency
168
+ name: rubocop-md
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: '1.0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: '1.0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: rubocop-minitest
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: '0.15'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: '0.15'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop-packaging
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.5'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '0.5'
209
+ - !ruby/object:Gem::Dependency
210
+ name: rubocop-performance
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '1.11'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '1.11'
223
+ - !ruby/object:Gem::Dependency
224
+ name: rubocop-rake
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - "~>"
228
+ - !ruby/object:Gem::Version
229
+ version: '0.6'
230
+ type: :development
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - "~>"
235
+ - !ruby/object:Gem::Version
236
+ version: '0.6'
237
+ - !ruby/object:Gem::Dependency
238
+ name: rubocop-rspec
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - "~>"
242
+ - !ruby/object:Gem::Version
243
+ version: '2.5'
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - "~>"
249
+ - !ruby/object:Gem::Version
250
+ version: '2.5'
251
+ - !ruby/object:Gem::Dependency
252
+ name: rubocop-thread_safety
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '0.4'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '0.4'
265
+ - !ruby/object:Gem::Dependency
266
+ name: sqlite3
267
+ requirement: !ruby/object:Gem::Requirement
268
+ requirements:
269
+ - - "~>"
270
+ - !ruby/object:Gem::Version
271
+ version: '1'
272
+ type: :development
273
+ prerelease: false
274
+ version_requirements: !ruby/object:Gem::Requirement
275
+ requirements:
276
+ - - "~>"
277
+ - !ruby/object:Gem::Version
278
+ version: '1'
279
+ - !ruby/object:Gem::Dependency
280
+ name: yard
281
+ requirement: !ruby/object:Gem::Requirement
282
+ requirements:
283
+ - - ">="
284
+ - !ruby/object:Gem::Version
285
+ version: 0.9.20
286
+ type: :development
287
+ prerelease: false
288
+ version_requirements: !ruby/object:Gem::Requirement
289
+ requirements:
290
+ - - ">="
291
+ - !ruby/object:Gem::Version
292
+ version: 0.9.20
139
293
  description: Getting transactions right is hard, and this gem makes it easier.
140
294
  email:
141
295
  - peter.boling@gmail.com
@@ -143,25 +297,11 @@ executables: []
143
297
  extensions: []
144
298
  extra_rdoc_files: []
145
299
  files:
146
- - ".coveralls.yml"
147
- - ".gitignore"
148
- - ".rspec"
149
- - ".rubocop.yml"
150
- - ".travis.yml"
151
- - Appraisals
152
- - Gemfile
300
+ - CODE_OF_CONDUCT.md
301
+ - CONTRIBUTING.md
153
302
  - LICENSE
154
303
  - README.md
155
- - Rakefile
156
- - activerecord-transactionable.gemspec
157
- - bin/console
158
- - bin/setup
159
- - gemfiles/rails_4_0.gemfile
160
- - gemfiles/rails_4_1.gemfile
161
- - gemfiles/rails_4_2.gemfile
162
- - gemfiles/rails_5_0.gemfile
163
- - gemfiles/rails_5_1.gemfile
164
- - gemfiles/rails_5_2.gemfile
304
+ - SECURITY.md
165
305
  - lib/activerecord/transactionable.rb
166
306
  - lib/activerecord/transactionable/result.rb
167
307
  - lib/activerecord/transactionable/version.rb
@@ -169,7 +309,7 @@ homepage: http://www.railsbling.com/tags/activerecord-transactionable
169
309
  licenses:
170
310
  - MIT
171
311
  metadata: {}
172
- post_install_message:
312
+ post_install_message:
173
313
  rdoc_options: []
174
314
  require_paths:
175
315
  - lib
@@ -177,16 +317,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
177
317
  requirements:
178
318
  - - ">="
179
319
  - !ruby/object:Gem::Version
180
- version: 2.1.0
320
+ version: 2.5.0
181
321
  required_rubygems_version: !ruby/object:Gem::Requirement
182
322
  requirements:
183
323
  - - ">="
184
324
  - !ruby/object:Gem::Version
185
325
  version: '0'
186
326
  requirements: []
187
- rubyforge_project:
188
- rubygems_version: 2.7.7
189
- signing_key:
327
+ rubygems_version: 3.2.22
328
+ signing_key:
190
329
  specification_version: 4
191
330
  summary: Do ActiveRecord transactions the right way.
192
331
  test_files: []
data/.coveralls.yml DELETED
@@ -1 +0,0 @@
1
- service_name: travis-ci
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- .bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
-
11
- gemfiles/*gemfile.lock
data/.rspec DELETED
@@ -1,2 +0,0 @@
1
- --format documentation
2
- --color
data/.rubocop.yml DELETED
@@ -1,4 +0,0 @@
1
- Metrics/LineLength:
2
- Description: 'Limit lines to 80 characters.'
3
- StyleGuide: '#80-character-limits'
4
- Enabled: false
data/.travis.yml DELETED
@@ -1,50 +0,0 @@
1
- env:
2
- global:
3
- - JRUBY_OPTS="-Xcli.debug=true --debug"
4
- - CC_TEST_REPORTER_ID=3061299ce65bc5627ebbf42e64717c04e393adaa72c1abbc0ea46300d2c2fdb5
5
-
6
- before_script:
7
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
8
- - chmod +x ./cc-test-reporter
9
- - ./cc-test-reporter before-build
10
-
11
- script:
12
- - bundle exec rspec
13
-
14
- after_script:
15
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
16
-
17
- before_install:
18
- - gem update --system
19
- - gem install bundler
20
-
21
- install:
22
- - bundle install
23
-
24
- bundler_args: --no-deployment --jobs 3 --retry 3
25
-
26
- cache: bundler
27
-
28
- language: ruby
29
- sudo: false
30
- rvm:
31
- - ruby-2.1.10
32
- - ruby-2.2.10
33
- - ruby-2.3.7
34
- - ruby-2.4.4
35
- - ruby-2.5.1
36
- gemfile:
37
- - gemfiles/rails_4_0.gemfile
38
- - gemfiles/rails_4_1.gemfile
39
- - gemfiles/rails_4_2.gemfile
40
- - gemfiles/rails_5_0.gemfile
41
- - gemfiles/rails_5_1.gemfile
42
- - gemfiles/rails_5_2.gemfile
43
- matrix:
44
- exclude:
45
- - rvm: ruby-2.1.10
46
- gemfile: gemfiles/rails_5_0.gemfile
47
- - rvm: ruby-2.1.10
48
- gemfile: gemfiles/rails_5_1.gemfile
49
- - rvm: ruby-2.1.10
50
- gemfile: gemfiles/rails_5_2.gemfile