activerecord-transactionable 3.0.2 → 3.0.3

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
2
  SHA256:
3
- metadata.gz: c50e2e6fb7f7b4fa84e937daa693efc620451ec3ccb1fc7d1cb5154a6224087c
4
- data.tar.gz: 2ba7e8f077edd0475721483d252be6233294a78e9c900daff2d6b810c7aba436
3
+ metadata.gz: e51681be44857d8712382ad19341412547a6c5ed576389c30fdd3b9972ef6570
4
+ data.tar.gz: 33923a34222e74d7e1a727f9ef254c4f3f39645d1861bb5ad3ef92df24d046a9
5
5
  SHA512:
6
- metadata.gz: d1a2b79d3ec10a2a52be1282d7bfa7ecfa7b499146582fdc3568e6bca06cb4f2e09c4c53eeea54a8d9652e80aa249b44f3d41c7d4f5a2c77dc534a4af30cdfa4
7
- data.tar.gz: 769582a2c37bc84cd0ac1a95b119d3fe9c17d506c76b0cd03423db03c4e8516f277fefae58e6c7fb419f54aa269b3ceb02beaf4a0a879113961f24cf81c0b986
6
+ metadata.gz: e7887778fc6e41dc4c8fa912fc5905973c80e0878dbc0ba1418da7e9ecd4ee5d485e9b50b67101a93199a30ee9f555d7aca13cd6d8443e5ab924f5cc6b7750df
7
+ data.tar.gz: 983f1379a536d71f34eeaab8a31be4aa3bcd746051332ae890efe2b8465d3129f9fa8de2c38e61e531180ce9818338f0eb64998435cc561f7a0eedeaef1c6f33
checksums.yaml.gz.sig ADDED
Binary file
data/CONTRIBUTING.md CHANGED
@@ -1,26 +1,47 @@
1
1
  ## Contributing
2
2
 
3
- Bug reports and pull requests are welcome on GitHub at [https://github.com/pboling/activerecord-transactionable][source]. This project is
4
- intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
5
- the [code of conduct][conduct].
6
-
7
- To submit a patch, please fork the project and create a patch with
8
- tests. Once you're happy with it send a pull request!
3
+ Bug reports and pull requests are welcome on GitHub at [https://github.com/pboling/activerecord-transactionable][🚎src-main]
4
+ . This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to
5
+ the [code of conduct][🤝conduct].
6
+
7
+ To submit a patch, please fork the project and create a patch with tests. Once you're happy with it send a pull request
8
+ and post a message to the [gitter chat][🏘chat].
9
+
10
+ ## Release
11
+
12
+ To release a new version:
13
+
14
+ 1. Run `bin/setup && bin/rake` as a tests, coverage, & linting sanity check
15
+ 2. Update the version number in `version.rb`
16
+ 3. Run `bin/setup && bin/rake` again as a secondary check, and to update `Gemfile.lock`
17
+ 4. Run `git commit -am "🔖 Prepare release v<VERSION>"` to commit the changes
18
+ 5. Run `git push` to trigger the final CI pipeline before release, & merge PRs
19
+ a. NOTE: Remember to [check the build][🧪build]!
20
+ 6. Run `git checkout main` (Or whichever branch is considered `trunk`, e.g. `master`)
21
+ 7. Run `git pull origin main` to ensure you will release the latest trunk code.
22
+ 8. Set `SOURCE_DATE_EPOCH` so `rake build` and `rake release` use same timestamp, and generate same checksums
23
+ a. Run `export SOURCE_DATE_EPOCH=$EPOCHSECONDS`
24
+ 9. Run `bundle exec rake build`
25
+ 10. Run [`bin/checksums`](https://github.com/rubygems/guides/pull/325) to create SHA-256 and SHA-512 checksums
26
+ a. Checksums will be committed automatically by the script, but not pushed
27
+ 11. Run `bundle exec rake release` which will create a git tag for the version,
28
+ push git commits and tags, and push the `.gem` file to [rubygems.org][💎rubygems]
29
+
30
+ NOTE: You will need to have a public key in `certs/`, and list your cert in the
31
+ `gemspec`, in order to sign the new release.
32
+ See: [RubyGems Security Guide][🔒️rubygems-security-guide]
9
33
 
10
34
  ## Contributors
11
35
 
12
- [![Contributors](https://contrib.rocks/image?repo=pboling/activerecord-transactionable)][contributors]
13
-
14
- Made with [contributors-img][contrib-rocks].
15
-
16
- [comment]: <> (Following links are used by README, CONTRIBUTING)
17
-
18
- [conduct]: https://github.com/pboling/activerecord-transactionable/blob/master/CODE_OF_CONDUCT.md
19
-
20
- [contrib-rocks]: https://contrib.rocks
21
-
22
- [contributors]: https://github.com/pboling/activerecord-transactionable/graphs/contributors
36
+ [![Contributors](https://contrib.rocks/image?repo=pboling/activerecord-transactionable)][🖐contributors]
23
37
 
24
- [comment]: <> (Following links are used by README, CONTRIBUTING, Homepage)
38
+ Made with [contributors-img][🖐contrib-rocks].
25
39
 
26
- [source]: https://github.com/pboling/activerecord-transactionable/
40
+ [🧪build]: https://github.com/pboling/activerecord-transactionable/actions
41
+ [🏘chat]: https://matrix.to/#/#pboling_activerecord-transactionable:gitter.im
42
+ [🤝conduct]: https://github.com/pboling/activerecord-transactionable/blob/main/CODE_OF_CONDUCT.md
43
+ [🖐contrib-rocks]: https://contrib.rocks
44
+ [🖐contributors]: https://github.com/pboling/activerecord-transactionable/graphs/contributors
45
+ [💎rubygems]: https://rubygems.org
46
+ [🔒️rubygems-security-guide]: https://guides.rubygems.org/security/#building-gems
47
+ [🚎src-main]: https://github.com/pboling/activerecord-transactionable
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016 - 2018, 2021 Peter H. Boling
3
+ Copyright (c) 2016-2018, 2021-2022, 2024 Peter H. Boling (railsbling.com)
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,16 +1,69 @@
1
1
  # Activerecord::Transactionable
2
2
 
3
+ <div id="badges">
4
+
5
+ [![CI Build][🚎dl-cwfi]][🚎dl-cwf]
6
+ [![Test Coverage][🔑cc-covi]][🔑cc-cov]
7
+ [![Maintainability][🔑cc-mnti]][🔑cc-mnt]
8
+ [![Depfu][🔑depfui]][🔑depfu]
9
+
10
+ [🚎dl-cwf]: https://github.com/pboling/activerecord-transactionable/actions/workflows/current.yml
11
+ [🚎dl-cwfi]: https://github.com/pboling/activerecord-transactionable/actions/workflows/current.yml/badge.svg
12
+
13
+ [comment]: <> ( 🔑 KEYED LINKS )
14
+
15
+ [🔑cc-mnt]: https://codeclimate.com/github/pboling/activerecord-transactionable/maintainability
16
+ [🔑cc-mnti]: https://api.codeclimate.com/v1/badges/41fa99881cfe6d45e7e5/maintainability
17
+ [🔑cc-cov]: https://codeclimate.com/github/pboling/activerecord-transactionable/test_coverage
18
+ [🔑cc-covi]: https://api.codeclimate.com/v1/badges/41fa99881cfe6d45e7e5/test_coverage
19
+ [🔑depfu]: https://depfu.com/github/pboling/activerecord-transactionable?project_id=2653
20
+ [🔑depfui]: https://badges.depfu.com/badges/d570491bac0ad3b0b65deb3c82028327/count.svg
21
+
22
+ -----
23
+
24
+ [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay]
25
+ [![Sponsor Me on Github][🖇sponsor-img]][🖇sponsor]
26
+ <span class="badge-buymeacoffee">
27
+ <a href="https://ko-fi.com/O5O86SNP4" target='_blank' title="Donate to my FLOSS or refugee efforts at ko-fi.com"><img src="https://img.shields.io/badge/buy%20me%20coffee-donate-yellow.svg" alt="Buy me coffee donation button" /></a>
28
+ </span>
29
+ <span class="badge-patreon">
30
+ <a href="https://patreon.com/galtzo" title="Donate to my FLOSS or refugee efforts using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a>
31
+ </span>
32
+
33
+ </div>
34
+
35
+ [⛳liberapay-img]: https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay
36
+ [⛳liberapay]: https://liberapay.com/pboling/donate
37
+ [🖇sponsor-img]: https://img.shields.io/badge/Sponsor_Me!-pboling.svg?style=social&logo=github
38
+ [🖇sponsor]: https://github.com/sponsors/pboling
39
+
3
40
  Provides a method, `transaction_wrapper` at the class and instance levels that can be used instead of `ActiveRecord#transaction`. Enables you to do transactions properly, with custom rescues and retry, including with or without locking.
4
41
 
5
- | Project | Activerecord::Transactionable |
6
- |--------------------------- |--------------------------- |
7
- | name, license, docs | [`activerecord-transactionable`][rubygems] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref] [![RubyDoc.info](https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat)][documentation] |
8
- | version & downloads | [![Version](https://img.shields.io/gem/v/activerecord-transactionable.svg)][rubygems] [![Total Downloads](https://img.shields.io/gem/dt/activerecord-transactionable.svg)][rubygems] [![Downloads Today](https://img.shields.io/gem/rd/activerecord-transactionable.svg)][rubygems] [![Homepage](https://img.shields.io/badge/source-github-brightgreen.svg?style=flat)][source] |
9
- | dependencies & linting | [![Depfu](https://badges.depfu.com/badges/d570491bac0ad3b0b65deb3c82028327/count.svg)][depfu] [![lint status](https://github.com/pboling/activerecord-transactionable/actions/workflows/style.yml/badge.svg)][actions] |
10
- | unit tests | [![supported rubies](https://github.com/pboling/activerecord-transactionable/actions/workflows/supported.yml/badge.svg)][actions] [![unsupported status](https://github.com/pboling/activerecord-transactionable/actions/workflows/unsupported.yml/badge.svg)][actions] |
11
- | coverage & maintainability | [![Test Coverage](https://api.codeclimate.com/v1/badges/41fa99881cfe6d45e7e5/test_coverage)][climate_coverage] [![codecov](https://codecov.io/gh/pboling/activerecord-transactionable/branch/master/graph/badge.svg?token=4ZNAWNxrf9)][codecov_coverage] [![Maintainability](https://api.codeclimate.com/v1/badges/41fa99881cfe6d45e7e5/maintainability)][climate_maintainability] [![Security Policy](https://img.shields.io/badge/security-policy-brightgreen.svg?style=flat)][security] |
12
- | resources | [![Discussion](https://img.shields.io/badge/discussions-github-brightgreen.svg?style=flat)][gh_discussions] [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github) [![Join the chat at https://gitter.im/pboling/activerecord-transactionable](https://badges.gitter.im/Join%20Chat.svg)][chat] [![Blog](https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat)][blogpage] |
13
- | Spread ~♡ⓛⓞⓥⓔ♡~ | [![Open Source Helpers](https://www.codetriage.com/pboling/activerecord-transactionable/badges/users.svg)][code_triage] [![Liberapay Patrons](https://img.shields.io/liberapay/patrons/pboling.svg?logo=liberapay)][liberapay_donate] [![Sponsor Me](https://img.shields.io/badge/sponsor-pboling.svg?style=social&logo=github)][gh_sponsors] [🌏][aboutme] [👼][angelme] [💻][coderme] [🌹][politicme] [![Tweet @ Peter][followme-img]][tweetme] |
42
+ | Project | Activerecord::Transactionable |
43
+ |-----------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
44
+ | install | `bundle add activerecord-transactionable` |
45
+ | compatibility | Ruby >= 2.5 |
46
+ | license | [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](https://opensource.org/licenses/MIT) |
47
+ | download rank | [![Downloads Today](https://img.shields.io/gem/rd/activerecord-transactionable.svg)](https://github.com/pboling/activerecord-transactionable) |
48
+ | version | [![Version](https://img.shields.io/gem/v/activerecord-transactionable.svg)](https://rubygems.org/gems/activerecord-transactionable) |
49
+ | code triage | [![Open Source Helpers](https://www.codetriage.com/pboling/activerecord-transactionable/badges/users.svg)](https://www.codetriage.com/pboling/activerecord-transactionable) |
50
+ | documentation | [on RDoc.info][documentation] |
51
+ | live chat | [![Join the chat at https://matrix.to/#/#pboling_activerecord-transactionable:gitter.im](https://badges.gitter.im/Join%20Chat.svg)](https://matrix.to/#/#pboling_activerecord-transactionable:gitter.im?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) |
52
+ | expert support | [![Get help on Codementor](https://cdn.codementor.io/badges/get_help_github.svg)](https://www.codementor.io/peterboling?utm_source=github&utm_medium=button&utm_term=peterboling&utm_campaign=github) |
53
+ | Spread ~♡ⓛⓞⓥⓔ♡~ | [🌏](https://about.me/peter.boling), [👼](https://angel.co/peter-boling), [![Liberapay Patrons][⛳liberapay-img]][⛳liberapay] [![Follow Me on LinkedIn][🖇linkedin-img]][🖇linkedin] [![Find Me on WellFound:][✌️wellfound-img]][✌️wellfound] [![My Blog][🚎blog-img]][🚎blog] [![Follow Me on Twitter][🐦twitter-img]][🐦twitter] |
54
+
55
+ [documentation]: https://rubydoc.info/github/pboling/activerecord-transactionable
56
+ [🖇linkedin]: http://www.linkedin.com/in/peterboling
57
+ [🖇linkedin-img]: https://img.shields.io/badge/PeterBoling-blue?style=plastic&logo=linkedin
58
+ [✌️wellfound]: https://angel.co/u/peter-boling
59
+ [✌️wellfound-img]: https://img.shields.io/badge/peter--boling-orange?style=plastic&logo=angellist
60
+ [🐦twitter]: http://twitter.com/intent/user?screen_name=galtzo
61
+ [🐦twitter-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow%20@galtzo
62
+ [🚎blog]: http://www.railsbling.com/tags/oauth2/
63
+ [🚎blog-img]: https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat
64
+ [my🧪lab]: https://gitlab.com/pboling
65
+ [my🧊berg]: https://codeberg.org/pboling
66
+ [my🛖hut]: https://sr.ht/~galtzo/
14
67
 
15
68
  Useful as an example of correct behavior for wrapping transactions.
16
69
 
@@ -20,10 +73,12 @@ NOTE: Rails' transactions are per-database connection, not per-model, nor per-in
20
73
  ## Upgrading to Version 2
21
74
 
22
75
  In version 1 the `transaction_wrapper` returned `true` or `false`. In version 2 it returns an instance of `Activerecord::Transactionable::Result`, which has a `value`, and three methods:
76
+
23
77
  ```ruby
78
+
24
79
  args = {}
25
80
  result = transaction_wrapper(**args) do
26
- something
81
+ # some code that might fail here
27
82
  end
28
83
  result.fail?
29
84
  result.success?
@@ -60,14 +115,14 @@ Or install it yourself as:
60
115
 
61
116
  ## Compatibility
62
117
 
63
- Targeted ruby compatibility is non-EOL versions of Ruby, currently 2.6, 2.7, and
64
- 3.0. Ruby is limited to 2.5+ in the gemspec, and when it changes there will be a major release.
118
+ Targeted ruby compatibility is non-EOL versions of Ruby, currently 2.6, 2.7, 3.0, 3.1, 3.2, 3.3.
119
+ Ruby is limited to 2.5+ in the gemspec, and when it changes there will be a major release.
65
120
  The `master` branch currently targets 3.0.x releases.
66
121
 
67
- | Ruby OAuth Version | Maintenance Branch | Officially Supported Rubies | Unofficially Supported Rubies |
68
- |--------------------- | ------------------ | ------------------------------------------- | ----------------------------- |
69
- | 3.0.x | `master` | 2.6, 2.7, 3.0 | 2.5 |
70
- | 2.0.x | `v2-maintenance` | 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0 | |
122
+ | Ruby OAuth Version | Maintenance Branch | Officially Supported Rubies | Unofficially Supported Rubies |
123
+ |--------------------|--------------------|----------------------------------------|-------------------------------|
124
+ | 3.0.x | `master` | 2.6, 2.7, 3.0, 3.1, 3.2, 3.3 | 2.5 |
125
+ | 2.0.x | `v2-maintenance` | 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 3.0 | |
71
126
 
72
127
  NOTE: 2.0.5 is anticipated as last release of the 2.x series.
73
128
 
@@ -124,7 +179,7 @@ If you need to know if the transaction succeeded:
124
179
  ```ruby
125
180
  car = Car.new(name: nil)
126
181
  result = car.transaction_wrapper(lock: true) do # uses ActiveRecord's with_lock
127
- car.save!
182
+ car.save!
128
183
  end
129
184
  result # => an instance of Activerecord::Transactionable::Result
130
185
  result.success? # => true or false
@@ -135,14 +190,14 @@ result.success? # => true or false
135
190
  ```ruby
136
191
  @client = Client.find(params[:id])
137
192
  transaction_result = @client.transaction_wrapper(lock: true) do
138
- @client.assign_attributes(client_params)
139
- @client.save!
193
+ @client.assign_attributes(client_params)
194
+ @client.save!
140
195
  end
141
196
  if transaction_result.success?
142
- render :show, locals: { client: @client }, status: :ok
197
+ render :show, locals: {client: @client}, status: :ok
143
198
  else
144
199
  # Something prevented update, transaction_result.to_h will have all the available details
145
- render json: { record_errors: @client.errors, transaction_result: transaction_result.to_h }, status: :unprocessable_entity
200
+ render json: {record_errors: @client.errors, transaction_result: transaction_result.to_h}, status: :unprocessable_entity
146
201
  end
147
202
  ```
148
203
 
@@ -202,16 +257,12 @@ Activerecord::Transactionable::ClassMethods.class_eval do
202
257
  end
203
258
  ```
204
259
 
205
- ## More Information
206
-
207
- * RubyDoc Documentation: [![RubyDoc.info](https://img.shields.io/badge/documentation-rubydoc-brightgreen.svg?style=flat)][documentation]
208
- * GitHub Discussions: [![Discussion](https://img.shields.io/badge/discussions-github-brightgreen.svg?style=flat)][gh_discussions]
209
- * Live Chat on Gitter: [![Join the chat at https://gitter.im/pboling/activerecord-transactionable](https://badges.gitter.im/Join%20Chat.svg)][chat]
210
- * Maintainer's Blog: [![Blog](https://img.shields.io/badge/blog-railsbling-brightgreen.svg?style=flat)][blogpage]
260
+ ## 🪇 Code of Conduct
211
261
 
212
- ## Code of Conduct
262
+ Everyone interacting in this project's codebases, issue trackers,
263
+ chat rooms and mailing lists is expected to follow the [code of conduct][🪇conduct].
213
264
 
214
- Everyone interacting with this project's code, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/pboling/activerecord-transactionable/blob/master/CODE_OF_CONDUCT.md).
265
+ [🪇conduct]: CODE_OF_CONDUCT.md
215
266
 
216
267
  ## Development
217
268
 
@@ -219,125 +270,123 @@ After checking out the repo, run `bin/setup` to install dependencies. Then, run
219
270
 
220
271
  To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
221
272
 
222
- ## Contributing
223
-
224
- See [CONTRIBUTING.md][contributing]
225
-
226
- ## Contributors
227
-
228
- [![Contributors](https://contrib.rocks/image?repo=pboling/activerecord-transactionable)][contributors]
229
-
230
- Made with [contributors-img](https://contrib.rocks).
231
-
232
- ## Versioning
233
-
234
- This library aims to adhere to [Semantic Versioning 2.0.0][semver].
235
- Violations of this scheme should be reported as bugs. Specifically,
236
- if a minor or patch version is released that breaks backward
237
- compatibility, a new version should be immediately released that
238
- restores compatibility. Breaking changes to the public API will
239
- only be introduced with new major versions.
240
-
241
- As a result of this policy, you can (and should) specify a
242
- dependency on this gem using the [Pessimistic Version Constraint][pvc] with two digits of precision.
243
-
244
- For example:
273
+ ## 🛞 DVCS
245
274
 
246
- ```ruby
247
- spec.add_dependency "activerecord-transactionable", "~> 2.0"
248
- ```
249
- ## Contact
275
+ This project does not trust any one version control system,
276
+ so it abides the principles of ["Distributed Version Control Systems"][💎d-in-dvcs]
250
277
 
251
- Author and maintainer is Peter Boling ([@pboling][gh_sponsors]).
278
+ Find this project on:
252
279
 
253
- Comments are welcome in the [GitHub Discussions][gh_discussions] board.
280
+ | Any | Of | These | DVCS |
281
+ |----------------|------------------|----------------|----------------|
282
+ | [🐙hub][🐙hub] | [🧊berg][🧊berg] | [🛖hut][🛖hut] | [🧪lab][🧪lab] |
254
283
 
255
- For security-related issues see [SECURITY][security].
284
+ [comment]: <> ( DVCS LINKS )
256
285
 
257
- ## License
286
+ [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
258
287
 
259
- The gem is available as open source under the terms of
260
- the [MIT License][license] [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)][license-ref].
261
- See [LICENSE][license] for the official [Copyright Notice][copyright-notice-explainer].
288
+ [🧊berg]: https://codeberg.org/pboling/activerecord-transactionable
289
+ [🐙hub]: https://gitlab.com/pboling/activerecord-transactionable
290
+ [🛖hut]: https://sr.ht/~galtzo/pboling/activerecord-transactionable
291
+ [🧪lab]: https://gitlab.com/pboling/activerecord-transactionable
262
292
 
263
- * Copyright (c) 2016 - 2018, 2021 [Peter H. Boling][peterboling] of [Rails Bling][railsbling]
293
+ ## 🤝 Contributing
264
294
 
265
- [copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
295
+ See [CONTRIBUTING.md][🤝contributing]
266
296
 
267
- [license]: https://github.com/pboling/activerecord-transactionable/blob/master/LICENSE
297
+ [🤝contributing]: CONTRIBUTING.md
268
298
 
269
- [conduct]: https://github.com/pboling/activerecord-transactionable/blob/master/CODE_OF_CONDUCT.md
299
+ ## 🌈 Contributors
270
300
 
271
- [security]: https://github.com/pboling/activerecord-transactionable/blob/master/SECURITY.md
301
+ [![Contributors][🌈contrib-rocks-img]][🐙hub-contrib]
272
302
 
273
- [semver]: http://semver.org/
303
+ Contributor tiles (GitHub only) made with [contributors-img][🌈contrib-rocks].
274
304
 
275
- [pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
305
+ Learn more about, or become one of, our 🎖 contributors on:
276
306
 
277
- [railsbling]: http://www.railsbling.com
307
+ | Any | Of | These | DVCS |
308
+ |-------------------------------------|---------------------------------------|-------------------------------------|-------------------------------------|
309
+ | [🐙hub contributors][🐙hub-contrib] | [🧊berg contributors][🧊berg-contrib] | [🛖hut contributors][🛖hut-contrib] | [🧪lab contributors][🧪lab-contrib] |
278
310
 
279
- [peterboling]: http://www.peterboling.com
311
+ [comment]: <> ( DVCS CONTRIB LINKS )
280
312
 
281
- [issues]: https://github.com/pboling/activerecord-transactionable/issues
313
+ [🌈contrib-rocks]: https://contrib.rocks
314
+ [🌈contrib-rocks-img]: https://contrib.rocks/image?repo=pboling/activerecord-transactionable
282
315
 
283
- [contributing]: https://github.com/pboling/activerecord-transactionable/blob/master/CONTRIBUTING.md
316
+ [🧊berg-contrib]: https://codeberg.org/pboling/activerecord-transactionable/activity
317
+ [🐙hub-contrib]: https://github.com/pboling/activerecord-transactionable/graphs/contributors
318
+ [🛖hut-contrib]: https://git.sr.ht/~galtzo/activerecord-transactionable/log/
319
+ [🧪lab-contrib]: https://gitlab.com/pboling/activerecord-transactionable/-/graphs/main?ref_type=heads
284
320
 
285
- [comment]: <> (Following links are used by README, CONTRIBUTING)
321
+ ## 📌 Versioning
286
322
 
287
- [contributors]: https://github.com/pboling/activerecord-transactionable/graphs/contributors
323
+ This Library adheres to [Semantic Versioning 2.0.0][📌semver].
324
+ Violations of this scheme should be reported as bugs.
325
+ Specifically, if a minor or patch version is released that breaks backward compatibility,
326
+ a new version should be immediately released that restores compatibility.
327
+ Breaking changes to the public API will only be introduced with new major versions.
288
328
 
289
- [comment]: <> (Following links are used by README, CONTRIBUTING, Homepage)
329
+ To get a better understanding of how SemVer is intended to work over a project's lifetime,
330
+ read this article from the creator of SemVer:
290
331
 
291
- [mailinglist]: http://groups.google.com/group/activerecord-transactionable-ruby
332
+ - ["Major Version Numbers are Not Sacred"][📌major-versions-not-sacred]
292
333
 
293
- [source]: https://github.com/pboling/activerecord-transactionable/
334
+ As a result of this policy, you can (and should) specify a dependency on these libraries using
335
+ the [Pessimistic Version Constraint][📌pvc] with two digits of precision.
294
336
 
295
- [comment]: <> (Following links are used by Homepage)
337
+ For example:
296
338
 
297
- [network]: https://github.com/pboling/activerecord-transactionable/network
339
+ ```ruby
340
+ spec.add_dependency("activerecord-transactionable", "~> 3.0")
341
+ ```
298
342
 
299
- [stargazers]: https://github.com/pboling/activerecord-transactionable/stargazers
343
+ [comment]: <> ( 📌 VERSIONING LINKS )
300
344
 
301
- [comment]: <> (Following links are used by README, Homepage)
345
+ [📌pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
346
+ [📌semver]: http://semver.org/
347
+ [📌major-versions-not-sacred]: https://tom.preston-werner.com/2022/05/23/major-version-numbers-are-not-sacred.html
302
348
 
303
- [rubygems]: https://rubygems.org/gems/activerecord-transactionable
349
+ ## Contact
304
350
 
305
- [depfu]: https://depfu.com/github/pboling/activerecord-transactionable?project_id=2653
351
+ Author and maintainer is Peter Boling ([@pboling][gh_sponsors]).
306
352
 
307
- [actions]: https://github.com/pboling/activerecord-transactionable/actions
353
+ Feedback and questions are welcome on the [GitHub Discussions][gh_discussions] board.
308
354
 
309
- [climate_coverage]: https://codeclimate.com/github/pboling/activerecord-transactionable/test_coverage
355
+ For security-related issues see [SECURITY][security].
310
356
 
357
+ [security]: https://github.com/pboling/activerecord-transactionable/blob/master/SECURITY.md
311
358
  [gh_discussions]: https://github.com/pboling/activerecord-transactionable/discussions
359
+ [gh_sponsors]: https://github.com/sponsors/pboling
312
360
 
313
- [code_triage]: https://www.codetriage.com/pboling/activerecord-transactionable
314
-
315
- [license-ref]: https://opensource.org/licenses/MIT
316
-
317
- [codecov_coverage]: https://codecov.io/gh/pboling/activerecord-transactionable
318
-
319
- [liberapay_donate]: https://liberapay.com/pboling/donate
320
-
321
- [aboutme]: https://about.me/peter.boling
322
-
323
- [angelme]: https://angel.co/peter-boling
324
-
325
- [coderme]:http://coderwall.com/pboling
361
+ ## 📄 License
326
362
 
327
- [politicme]: https://nationalprogressiveparty.org
363
+ The gem is available as open source under the terms of
364
+ the [MIT License][📄license] [![License: MIT][📄license-img]][📄license-ref].
365
+ See [LICENSE.txt][📄license] for the official [Copyright Notice][📄copyright-notice-explainer].
328
366
 
329
- [followme-img]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
367
+ [comment]: <> ( 📄 LEGAL LINKS )
330
368
 
331
- [tweetme]: http://twitter.com/galtzo
369
+ [📄copyright-notice-explainer]: https://opensource.stackexchange.com/questions/5778/why-do-licenses-such-as-the-mit-license-specify-a-single-year
370
+ [📄license]: LICENSE.txt
371
+ [📄license-ref]: https://opensource.org/licenses/MIT
372
+ [📄license-img]: https://img.shields.io/badge/License-MIT-green.svg
332
373
 
333
- [documentation]: https://rubydoc.info/github/pboling/activerecord-transactionable
374
+ ### © Copyright
334
375
 
335
- [climate_maintainability]: https://codeclimate.com/github/pboling/activerecord-transactionable/maintainability
376
+ * Copyright (c) 2016-2018, 2021-2022, 2024 [Peter H. Boling][💁🏼‍♂️peterboling] of [Rails Bling][💁🏼‍♂️railsbling]
336
377
 
337
- [chat]: https://gitter.im/pboling/activerecord-transactionable?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
378
+ [comment]: <> ( 💁🏼‍♂️ PERSONAL LINKS )
338
379
 
339
- [blogpage]: http://www.railsbling.com/tags/activerecord-transactionable/
380
+ [💁🏼‍♂️aboutme]: https://about.me/peter.boling
381
+ [💁🏼‍♂️angellist]: https://angel.co/peter-boling
382
+ [💁🏼‍♂️devto]: https://dev.to/galtzo
383
+ [💁🏼‍♂️followme]: https://img.shields.io/twitter/follow/galtzo.svg?style=social&label=Follow
384
+ [💁🏼‍♂️twitter]: http://twitter.com/galtzo
385
+ [💁🏼‍♂️peterboling]: http://www.peterboling.com
386
+ [💁🏼‍♂️railsbling]: http://www.railsbling.com
340
387
 
341
- [maintenancee_policy]: https://guides.rubyonrails.org/maintenance_policy.html#security-issues
388
+ [comment]: <> ( 💼 PROJECT LINKS )
342
389
 
343
- [gh_sponsors]: https://github.com/sponsors/pboling
390
+ [💼blogpage]: http://www.railsbling.com/tags/activerecord-transactionable/
391
+ [💼documentation]: http://rdoc.info/github/activerecord-transactionable/meta/frames
392
+ [💼homepage]: https://github.com/pboling/activerecord-transactionable
data/SECURITY.md CHANGED
@@ -2,13 +2,15 @@
2
2
 
3
3
  ## Supported Versions
4
4
 
5
- | Version | Supported |
6
- | ------- | ------------------ |
7
- | 3.0.x | :white_check_mark: |
8
- | 2.0.x | :white_check_mark: |
9
- | 1.0.x | :x: |
10
- | 0.0.x | :x: |
5
+ | Version | Supported |
6
+ |---------|-----------|
7
+ | 3.0.x | |
8
+ | 2.0.x | |
9
+ | 1.0.x | |
10
+ | 0.0.x | |
11
11
 
12
12
  ## Reporting a Vulnerability
13
13
 
14
- Peter Boling is the primary maintainer of this gem. Please find a way to [contact him directly](https://railsbling.com/contact) to report the issue. Include as much relevant information as possible.
14
+ Peter Boling is the primary maintainer of this gem. Please find a way
15
+ to [contact him directly](https://railsbling.com/contact) to report the issue. Include as much relevant information as
16
+ possible.
@@ -29,7 +29,7 @@ module Activerecord
29
29
  type: type,
30
30
  context: context,
31
31
  nested: nested,
32
- attempt: attempt
32
+ attempt: attempt,
33
33
  }
34
34
  if !skip_error && error
35
35
  diagnostic_data[:error] = error.class.to_s
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Activerecord
4
4
  module Transactionable
5
- VERSION = "3.0.2"
5
+ module Version
6
+ VERSION = "3.0.3"
7
+ end
6
8
  end
7
9
  end
@@ -1,12 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # External gems
4
+ require "version_gem"
3
5
  require "active_model"
4
6
  require "active_record"
5
- # apparently needed for Rails 4.0 compatibility with rspec, when
6
- # this gem is loaded before the rails gem by bundler, as will happen when you
7
- # keep your Gemfile sorted alphabetically.
8
7
  require "active_record/validations"
9
8
 
9
+ # This gem
10
10
  require "activerecord/transactionable/version"
11
11
  require "activerecord/transactionable/result"
12
12
 
@@ -28,7 +28,7 @@ module Activerecord
28
28
  ERRORS_TO_DISALLOW_INSIDE_TRANSACTION = [
29
29
  ActiveRecord::RecordInvalid,
30
30
  ActiveRecord::StatementInvalid,
31
- ActiveRecord::RecordNotUnique
31
+ ActiveRecord::RecordNotUnique,
32
32
  ].freeze
33
33
  # http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-transaction
34
34
  TRANSACTION_METHOD_ARG_NAMES = %i[
@@ -54,10 +54,6 @@ module Activerecord
54
54
  INSIDE_CONTEXT = "inside"
55
55
  OUTSIDE_CONTEXT = "outside"
56
56
 
57
- def transaction_wrapper(**args, &block)
58
- self.class.transaction_wrapper(object: self, **args, &block)
59
- end
60
-
61
57
  module ClassMethods
62
58
  def transaction_wrapper(object: nil, **args)
63
59
  lock = args.delete(:lock)
@@ -67,13 +63,13 @@ module Activerecord
67
63
  transaction_open = ActiveRecord::Base.connection.transaction_open?
68
64
  unless args.keys.empty?
69
65
  raise ArgumentError,
70
- "#{self} does not know how to handle arguments: #{args.keys.inspect}"
66
+ "#{self} does not know how to handle arguments: #{args.keys.inspect}"
71
67
  end
72
68
  if ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.detect do |error|
73
- inside_args.values.flatten.uniq.include?(error)
74
- end
69
+ inside_args.values.flatten.uniq.include?(error)
70
+ end
75
71
  raise ArgumentError,
76
- "#{self} should not rescue #{ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.inspect} inside a transaction: #{inside_args.keys.inspect}"
72
+ "#{self} should not rescue #{ERRORS_TO_DISALLOW_INSIDE_TRANSACTION.inspect} inside a transaction: #{inside_args.keys.inspect}"
77
73
  end
78
74
 
79
75
  if transaction_open
@@ -84,10 +80,18 @@ module Activerecord
84
80
  logger.warn("[#{self}.transaction_wrapper] Opening a nested transaction. Setting #{REQUIRES_NEW}: true")
85
81
  end
86
82
  end
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|
83
+ error_handler_outside_transaction(
84
+ object: object,
85
+ transaction_open: transaction_open,
86
+ **outside_args,
87
+ ) do |outside_is_retry|
88
+ run_inside_transaction_block(
89
+ transaction_args: transaction_args,
90
+ inside_args: inside_args,
91
+ lock: lock,
92
+ transaction_open: transaction_open,
93
+ object: object,
94
+ ) do |is_retry|
91
95
  # regardless of the retry being inside or outside the transaction, it is still a retry.
92
96
  yield outside_is_retry || is_retry
93
97
  end
@@ -102,13 +106,17 @@ module Activerecord
102
106
  # NOTE: with_lock will reload object!
103
107
  # Note: with_lock does not accept arguments like transaction does.
104
108
  object.with_lock do
105
- error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args,
106
- &block)
109
+ error_handler_inside_transaction(
110
+ object: object, transaction_open: transaction_open, **inside_args,
111
+ &block
112
+ )
107
113
  end
108
114
  else
109
115
  object.transaction(**transaction_args) do
110
- error_handler_inside_transaction(object: object, transaction_open: transaction_open, **inside_args,
111
- &block)
116
+ error_handler_inside_transaction(
117
+ object: object, transaction_open: transaction_open, **inside_args,
118
+ &block
119
+ )
112
120
  end
113
121
  end
114
122
  else
@@ -139,8 +147,17 @@ module Activerecord
139
147
  prepared_errors.include?(error_class)
140
148
  end
141
149
  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)
150
+ run_block_with_retry(
151
+ object,
152
+ local_context,
153
+ transaction_open,
154
+ retriable_errors,
155
+ reraisable_errors,
156
+ already_been_added_to_self,
157
+ needing_added_to_self,
158
+ num_retry_attempts,
159
+ &block
160
+ )
144
161
  end
145
162
 
146
163
  def error_handler_outside_transaction(transaction_open:, object: nil, **args, &block)
@@ -155,8 +172,17 @@ module Activerecord
155
172
  prepared_errors.include?(error_class)
156
173
  end
157
174
  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)
175
+ run_block_with_retry(
176
+ object,
177
+ local_context,
178
+ transaction_open,
179
+ retriable_errors,
180
+ reraisable_errors,
181
+ already_been_added_to_self,
182
+ needing_added_to_self,
183
+ num_retry_attempts,
184
+ &block
185
+ )
160
186
  end
161
187
 
162
188
  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,7 +199,7 @@ module Activerecord
173
199
  # We pass the retry state along to yield so that the code implementing
174
200
  # the transaction_wrapper can switch behavior on a retry
175
201
  # (e.g. create => find)
176
- result = yield (re_try == false ? re_try : attempt)
202
+ result = yield ((re_try == false) ? re_try : attempt)
177
203
  # When in the outside context we need to preserve the inside result so it bubbles up unmolested with the "meaningful" result of the transaction.
178
204
  if result.is_a?(Activerecord::Transactionable::Result)
179
205
  result # <= preserve the meaningful return value
@@ -185,8 +211,14 @@ module Activerecord
185
211
  # if that is in the intended behavior, and this way a specific child of StandardError can be reraised while
186
212
  # the parent can still be caught and added to self.errors
187
213
  # Also adds the error to the object if there is an object.
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!]")
214
+ transaction_error_logger(
215
+ object: object,
216
+ error: e,
217
+ result: nil,
218
+ attempt: attempt,
219
+ add_to: nil,
220
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context} re-raising!]",
221
+ )
190
222
  raise e
191
223
  rescue *retriable_errors => e
192
224
  # This will re-run the begin block above
@@ -194,27 +226,45 @@ module Activerecord
194
226
  # To avoid the infinite recursion, we track the retry state
195
227
  if attempt >= num_retry_attempts
196
228
  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}]")
229
+ transaction_error_logger(
230
+ object: object,
231
+ error: e,
232
+ result: result,
233
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]",
234
+ )
199
235
  result
200
236
  else
201
237
  re_try = true
202
238
  # Not adding error to base when retrying, because otherwise the added error may
203
239
  # prevent the subsequent save from working, in a catch-22
204
- transaction_error_logger(object: object, error: e, result: nil, attempt: attempt, add_to: nil,
205
- additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]")
240
+ transaction_error_logger(
241
+ object: object,
242
+ error: e,
243
+ result: nil,
244
+ attempt: attempt,
245
+ add_to: nil,
246
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]",
247
+ )
206
248
  retry
207
249
  end
208
250
  rescue *already_been_added_to_self => e
209
251
  # ActiveRecord::RecordInvalid, when done correctly, will have already added the error to object.
210
252
  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}]")
253
+ transaction_error_logger(
254
+ object: nil,
255
+ error: e,
256
+ result: result,
257
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]",
258
+ )
213
259
  result
214
260
  rescue *needing_added_to_self => e
215
261
  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}]")
262
+ transaction_error_logger(
263
+ object: object,
264
+ error: e,
265
+ result: result,
266
+ additional_message: " [#{transaction_open ? "nested " : ""}#{local_context}]",
267
+ )
218
268
  result
219
269
  end
220
270
  end
@@ -233,5 +283,13 @@ module Activerecord
233
283
  end
234
284
  end
235
285
  end
286
+
287
+ def transaction_wrapper(**args, &block)
288
+ self.class.transaction_wrapper(object: self, **args, &block)
289
+ end
236
290
  end
237
291
  end
292
+
293
+ Activerecord::Transactionable::Version.class_eval do
294
+ extend VersionGem::Basic
295
+ end
data.tar.gz.sig ADDED
Binary file
metadata CHANGED
@@ -1,14 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-transactionable
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Boling
8
8
  autorequire:
9
9
  bindir: exe
10
- cert_chain: []
11
- date: 2021-11-10 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEgDCCAuigAwIBAgIBATANBgkqhkiG9w0BAQsFADBDMRUwEwYDVQQDDAxwZXRl
14
+ ci5ib2xpbmcxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkW
15
+ A2NvbTAeFw0yMzA5MjAxNzMwMjhaFw0yNDA5MTkxNzMwMjhaMEMxFTATBgNVBAMM
16
+ DHBldGVyLmJvbGluZzEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPy
17
+ LGQBGRYDY29tMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEA+a9UvHo3
18
+ 84k96WgU5Kk5HB+cLZs/modjorsTfqY67MJF5nNvAoqcKTUBW4uG+Zpfnm3jaDO5
19
+ GxhJEIZWfndYzycHT2KMVQ1uTP82ba8ZaKrPlPIafkbui3mdds47qsmqHiblKERg
20
+ U532lkwfqHDlJwE7OBZQ59EwWWLynlT/yAUHpOBbqIuHKUxdpmBI+sIjrZcD1e05
21
+ WmjkO6fwIdC5oM757aoPxIgXD587VOViH11Vkm2doskj4T8yONtwVHlcrrhJ9Bzd
22
+ /zdp6vEn7GZQrABvpOlqwWxQ72ZnFhJe/RJZf6CXOPOh69Ai0QKYl2a1sYuCJKS3
23
+ nsBnxXJINEEznjR7rZjNUmYD+CZqfjzgPqedRxTlASe7iA4w7xZOqMDzcuhNwcUQ
24
+ tMEH6BTktxKP3jXZPXRfHCf6s+HRVb6vezAonTBVyydf5Xp5VwWkd6cwm+2BzHl5
25
+ 7kc/3lLxKMcsyEUprAsk8LdHohwZdC267l+RS++AP6Cz6x+nB3oGob19AgMBAAGj
26
+ fzB9MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBQCSSas60GqqMjt
27
+ xR7LoY1gucEvtzAhBgNVHREEGjAYgRZwZXRlci5ib2xpbmdAZ21haWwuY29tMCEG
28
+ A1UdEgQaMBiBFnBldGVyLmJvbGluZ0BnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
29
+ ggGBAMl9ifcw5p+PdvB7dCPoNKoVdp/2LbC9ztETHuYL2gUMJB6UoS3o9c/piSuR
30
+ V3ZMQaijmNu6ms1bWAtJ66LjmYrVflJtf9yp31Kierr9LpisMSUx2qbMOHGa8d2Z
31
+ vCUWPF8E9Cg0mP3GAyZ6qql8jDh/anUKeksPXqJvNxNPDu2DVYsa/IWdl96whzS4
32
+ Bl7SwB1E7agps40UcshCSKaVDOU0M+XN6SrnJMElnBic+KSAkBkVFbzS0BE4ODZM
33
+ BgE6nYzQ05qhuvbE+oGdACTlemNtDDWCh0uw+7x0q2PocGIDU5zsPn/WNTkCXPmB
34
+ CHGvqDNWq4M7ncTKAaS2XExgyb7uPdq9fKiOW8nmH+zCiGzJXzBWwZlKf7L4Ht9E
35
+ a3f0e5C+zvee9Z5Ng9ciyfav9/fcXgYt5MjoBv27THr5XfBhgOCIHSYW2tqJmWKi
36
+ KuxrfYrN+9HvMdm+nZ6TypmKftHY3Gj+/uu+g8Icm/zrvTWAEE0mcJOkfrIoNPJb
37
+ pF8dMA==
38
+ -----END CERTIFICATE-----
39
+ date: 2024-03-06 00:00:00.000000000 Z
12
40
  dependencies:
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: activemodel
@@ -16,212 +44,174 @@ dependencies:
16
44
  requirements:
17
45
  - - ">="
18
46
  - !ruby/object:Gem::Version
19
- version: 4.0.0
47
+ version: 5.2.8.1
20
48
  type: :runtime
21
49
  prerelease: false
22
50
  version_requirements: !ruby/object:Gem::Requirement
23
51
  requirements:
24
52
  - - ">="
25
53
  - !ruby/object:Gem::Version
26
- version: 4.0.0
54
+ version: 5.2.8.1
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: activerecord
29
57
  requirement: !ruby/object:Gem::Requirement
30
58
  requirements:
31
59
  - - ">="
32
60
  - !ruby/object:Gem::Version
33
- version: 4.0.0
61
+ version: 5.2.8.1
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - ">="
39
67
  - !ruby/object:Gem::Version
40
- version: 4.0.0
68
+ version: 5.2.8.1
41
69
  - !ruby/object:Gem::Dependency
42
- name: byebug
70
+ name: version_gem
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
73
  - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: '11.1'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '11.1'
55
- - !ruby/object:Gem::Dependency
56
- name: factory_bot
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
75
+ version: '1.1'
59
76
  - - ">="
60
77
  - !ruby/object:Gem::Version
61
- version: '4.0'
62
- type: :development
78
+ version: 1.1.3
79
+ type: :runtime
63
80
  prerelease: false
64
81
  version_requirements: !ruby/object:Gem::Requirement
65
82
  requirements:
83
+ - - "~>"
84
+ - !ruby/object:Gem::Version
85
+ version: '1.1'
66
86
  - - ">="
67
87
  - !ruby/object:Gem::Version
68
- version: '4.0'
88
+ version: 1.1.3
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: rake
71
91
  requirement: !ruby/object:Gem::Requirement
72
92
  requirements:
73
93
  - - ">="
74
94
  - !ruby/object:Gem::Version
75
- version: '12.0'
95
+ version: '13.1'
76
96
  type: :development
77
97
  prerelease: false
78
98
  version_requirements: !ruby/object:Gem::Requirement
79
99
  requirements:
80
100
  - - ">="
81
101
  - !ruby/object:Gem::Version
82
- version: '12.0'
102
+ version: '13.1'
83
103
  - !ruby/object:Gem::Dependency
84
- name: rspec
104
+ name: kramdown
85
105
  requirement: !ruby/object:Gem::Requirement
86
106
  requirements:
87
107
  - - "~>"
88
108
  - !ruby/object:Gem::Version
89
- version: '3.10'
109
+ version: '2.4'
90
110
  type: :development
91
111
  prerelease: false
92
112
  version_requirements: !ruby/object:Gem::Requirement
93
113
  requirements:
94
114
  - - "~>"
95
115
  - !ruby/object:Gem::Version
96
- version: '3.10'
116
+ version: '2.4'
97
117
  - !ruby/object:Gem::Dependency
98
- name: rspec-benchmark
118
+ name: yard
99
119
  requirement: !ruby/object:Gem::Requirement
100
120
  requirements:
101
121
  - - "~>"
102
122
  - !ruby/object:Gem::Version
103
- version: '0.6'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - "~>"
109
- - !ruby/object:Gem::Version
110
- version: '0.6'
111
- - !ruby/object:Gem::Dependency
112
- name: rspec-block_is_expected
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - "~>"
123
+ version: '0.9'
124
+ - - ">="
116
125
  - !ruby/object:Gem::Version
117
- version: '1.0'
126
+ version: 0.9.34
118
127
  type: :development
119
128
  prerelease: false
120
129
  version_requirements: !ruby/object:Gem::Requirement
121
130
  requirements:
122
131
  - - "~>"
123
132
  - !ruby/object:Gem::Version
124
- version: '1.0'
125
- - !ruby/object:Gem::Dependency
126
- name: rspec-pending_for
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - "~>"
130
- - !ruby/object:Gem::Version
131
- version: '0.1'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - "~>"
133
+ version: '0.9'
134
+ - - ">="
137
135
  - !ruby/object:Gem::Version
138
- version: '0.1'
136
+ version: 0.9.34
139
137
  - !ruby/object:Gem::Dependency
140
- name: silent_stream
138
+ name: yard-junk
141
139
  requirement: !ruby/object:Gem::Requirement
142
140
  requirements:
143
141
  - - "~>"
144
142
  - !ruby/object:Gem::Version
145
- version: '1.0'
143
+ version: '0.0'
146
144
  type: :development
147
145
  prerelease: false
148
146
  version_requirements: !ruby/object:Gem::Requirement
149
147
  requirements:
150
148
  - - "~>"
151
149
  - !ruby/object:Gem::Version
152
- version: '1.0'
150
+ version: '0.0'
153
151
  - !ruby/object:Gem::Dependency
154
- name: rubocop
152
+ name: factory_bot
155
153
  requirement: !ruby/object:Gem::Requirement
156
154
  requirements:
157
- - - "~>"
155
+ - - '='
158
156
  - !ruby/object:Gem::Version
159
- version: '1.22'
157
+ version: 6.4.4
160
158
  type: :development
161
159
  prerelease: false
162
160
  version_requirements: !ruby/object:Gem::Requirement
163
161
  requirements:
164
- - - "~>"
162
+ - - '='
165
163
  - !ruby/object:Gem::Version
166
- version: '1.22'
164
+ version: 6.4.4
167
165
  - !ruby/object:Gem::Dependency
168
- name: rubocop-md
166
+ name: rspec
169
167
  requirement: !ruby/object:Gem::Requirement
170
168
  requirements:
171
- - - "~>"
169
+ - - ">="
172
170
  - !ruby/object:Gem::Version
173
- version: '1.0'
171
+ version: '3'
174
172
  type: :development
175
173
  prerelease: false
176
174
  version_requirements: !ruby/object:Gem::Requirement
177
175
  requirements:
178
- - - "~>"
176
+ - - ">="
179
177
  - !ruby/object:Gem::Version
180
- version: '1.0'
178
+ version: '3'
181
179
  - !ruby/object:Gem::Dependency
182
- name: rubocop-minitest
180
+ name: rspec-benchmark
183
181
  requirement: !ruby/object:Gem::Requirement
184
182
  requirements:
185
183
  - - "~>"
186
184
  - !ruby/object:Gem::Version
187
- version: '0.15'
185
+ version: '0.6'
188
186
  type: :development
189
187
  prerelease: false
190
188
  version_requirements: !ruby/object:Gem::Requirement
191
189
  requirements:
192
190
  - - "~>"
193
191
  - !ruby/object:Gem::Version
194
- version: '0.15'
192
+ version: '0.6'
195
193
  - !ruby/object:Gem::Dependency
196
- name: rubocop-packaging
194
+ name: rspec-block_is_expected
197
195
  requirement: !ruby/object:Gem::Requirement
198
196
  requirements:
199
197
  - - "~>"
200
198
  - !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
- - - "~>"
199
+ version: '1.0'
200
+ - - ">="
214
201
  - !ruby/object:Gem::Version
215
- version: '1.11'
202
+ version: 1.0.5
216
203
  type: :development
217
204
  prerelease: false
218
205
  version_requirements: !ruby/object:Gem::Requirement
219
206
  requirements:
220
207
  - - "~>"
221
208
  - !ruby/object:Gem::Version
222
- version: '1.11'
209
+ version: '1.0'
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 1.0.5
223
213
  - !ruby/object:Gem::Dependency
224
- name: rubocop-rake
214
+ name: rspec_junit_formatter
225
215
  requirement: !ruby/object:Gem::Requirement
226
216
  requirements:
227
217
  - - "~>"
@@ -235,33 +225,33 @@ dependencies:
235
225
  - !ruby/object:Gem::Version
236
226
  version: '0.6'
237
227
  - !ruby/object:Gem::Dependency
238
- name: rubocop-rspec
228
+ name: rspec-pending_for
239
229
  requirement: !ruby/object:Gem::Requirement
240
230
  requirements:
241
- - - "~>"
231
+ - - ">="
242
232
  - !ruby/object:Gem::Version
243
- version: '2.5'
233
+ version: '0'
244
234
  type: :development
245
235
  prerelease: false
246
236
  version_requirements: !ruby/object:Gem::Requirement
247
237
  requirements:
248
- - - "~>"
238
+ - - ">="
249
239
  - !ruby/object:Gem::Version
250
- version: '2.5'
240
+ version: '0'
251
241
  - !ruby/object:Gem::Dependency
252
- name: rubocop-thread_safety
242
+ name: silent_stream
253
243
  requirement: !ruby/object:Gem::Requirement
254
244
  requirements:
255
- - - "~>"
245
+ - - ">="
256
246
  - !ruby/object:Gem::Version
257
- version: '0.4'
247
+ version: '1'
258
248
  type: :development
259
249
  prerelease: false
260
250
  version_requirements: !ruby/object:Gem::Requirement
261
251
  requirements:
262
- - - "~>"
252
+ - - ">="
263
253
  - !ruby/object:Gem::Version
264
- version: '0.4'
254
+ version: '1'
265
255
  - !ruby/object:Gem::Dependency
266
256
  name: sqlite3
267
257
  requirement: !ruby/object:Gem::Requirement
@@ -276,20 +266,6 @@ dependencies:
276
266
  - - "~>"
277
267
  - !ruby/object:Gem::Version
278
268
  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
293
269
  description: Getting transactions right is hard, and this gem makes it easier.
294
270
  email:
295
271
  - peter.boling@gmail.com
@@ -299,16 +275,24 @@ extra_rdoc_files: []
299
275
  files:
300
276
  - CODE_OF_CONDUCT.md
301
277
  - CONTRIBUTING.md
302
- - LICENSE
278
+ - LICENSE.txt
303
279
  - README.md
304
280
  - SECURITY.md
305
281
  - lib/activerecord/transactionable.rb
306
282
  - lib/activerecord/transactionable/result.rb
307
283
  - lib/activerecord/transactionable/version.rb
308
- homepage: http://www.railsbling.com/tags/activerecord-transactionable
284
+ homepage: https://github.com/pboling/activerecord-transactionable
309
285
  licenses:
310
286
  - MIT
311
- metadata: {}
287
+ metadata:
288
+ homepage_uri: https://github.com/pboling/activerecord-transactionable
289
+ source_code_uri: https://github.com/pboling/activerecord-transactionable/tree/v3.0.3
290
+ bug_tracker_uri: https://github.com/pboling/activerecord-transactionable/issues
291
+ documentation_uri: https://www.rubydoc.info/gems/activerecord-transactionable/3.0.3
292
+ wiki_uri: https://github.com/pboling/activerecord-transactionable/wiki
293
+ funding_uri: https://liberapay.com/pboling
294
+ news_uri: https://www.railsbling.com/tags/activerecord-transactionable
295
+ rubygems_mfa_required: 'true'
312
296
  post_install_message:
313
297
  rdoc_options: []
314
298
  require_paths:
@@ -324,7 +308,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
324
308
  - !ruby/object:Gem::Version
325
309
  version: '0'
326
310
  requirements: []
327
- rubygems_version: 3.2.22
311
+ rubygems_version: 3.5.6
328
312
  signing_key:
329
313
  specification_version: 4
330
314
  summary: Do ActiveRecord transactions the right way.
metadata.gz.sig ADDED
Binary file