sidekiq-transaction_guard 1.0.1 → 1.0.2
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 +4 -4
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/continuous_integration.yml +84 -0
- data/.standard.yml +9 -0
- data/CHANGELOG.md +18 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/lib/sidekiq/transaction_guard/database_cleaner.rb +7 -4
- data/lib/sidekiq/transaction_guard/middleware.rb +11 -11
- data/lib/sidekiq/transaction_guard.rb +25 -9
- data/lib/sidekiq-transaction_guard.rb +2 -0
- data/sidekiq-transaction_guard.gemspec +14 -21
- metadata +10 -91
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0fe8af50053f7431c866b6091475ac6c11498619b6dc443e3a6320fa54ce41e0
|
4
|
+
data.tar.gz: fc14706b5ad35440b365db3065f12f5342ecf048a2a29e96a0baecff8179ea0a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4902e75a12e5b2ae4943cd415cbe7e4173db2304b8c431d40e49cd51b4c41a8acb5f23e0c20f8f1d2062593f559b4edb34ea479621988cc6df55f4e0a749a4f
|
7
|
+
data.tar.gz: 88cbea82b257c33439955f45e49a36beba1d0b7b72de2a7f4fb74d6bfbda6cfc2c292bbfc12b6eed8d0ac0cf9f6565f46d9508aa100be29d6fc8f954230c389f
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# Dependabot update strategy
|
2
|
+
version: 2
|
3
|
+
updates:
|
4
|
+
- package-ecosystem: bundler
|
5
|
+
directory: "/"
|
6
|
+
schedule:
|
7
|
+
interval: weekly
|
8
|
+
allow:
|
9
|
+
# Automatically keep all runtime dependencies updated
|
10
|
+
- dependency-name: "*"
|
11
|
+
dependency-type: "production"
|
12
|
+
versioning-strategy: lockfile-only
|
@@ -0,0 +1,84 @@
|
|
1
|
+
name: Continuous Integration
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- master
|
7
|
+
- actions-*
|
8
|
+
tags:
|
9
|
+
- v*
|
10
|
+
pull_request:
|
11
|
+
branches-ignore:
|
12
|
+
- actions-*
|
13
|
+
|
14
|
+
env:
|
15
|
+
BUNDLE_CLEAN: "true"
|
16
|
+
BUNDLE_PATH: vendor/bundle
|
17
|
+
BUNDLE_JOBS: 3
|
18
|
+
BUNDLE_RETRY: 3
|
19
|
+
|
20
|
+
jobs:
|
21
|
+
build:
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
strategy:
|
24
|
+
fail-fast: false
|
25
|
+
matrix:
|
26
|
+
include:
|
27
|
+
- ruby: "ruby"
|
28
|
+
standardrb: true
|
29
|
+
- ruby: "3.2"
|
30
|
+
appraisal: "activerecord_7.0"
|
31
|
+
- ruby: "3.1"
|
32
|
+
appraisal: "activerecord_6.1"
|
33
|
+
- ruby: "2.7"
|
34
|
+
appraisal: "activerecord_6.0"
|
35
|
+
- ruby: "2.7"
|
36
|
+
appraisal: "activerecord_5.2"
|
37
|
+
- ruby: "2.6"
|
38
|
+
appraisal: "activerecord_5.1"
|
39
|
+
- ruby: "2.6"
|
40
|
+
appraisal: "activerecord_5.0"
|
41
|
+
- ruby: "2.5"
|
42
|
+
appraisal: "activerecord_4.2"
|
43
|
+
- ruby: "2.5"
|
44
|
+
appraisal: "activerecord_4.1"
|
45
|
+
- ruby: "2.5"
|
46
|
+
appraisal: "activerecord_4.0"
|
47
|
+
- ruby: "3.2"
|
48
|
+
appraisal: "sidekiq_7"
|
49
|
+
- ruby: "3.0"
|
50
|
+
appraisal: "sidekiq_6"
|
51
|
+
- ruby: "2.7"
|
52
|
+
appraisal: "sidekiq_5"
|
53
|
+
- ruby: "2.6"
|
54
|
+
appraisal: "sidekiq_4"
|
55
|
+
- ruby: "2.5"
|
56
|
+
appraisal: "sidekiq_3"
|
57
|
+
steps:
|
58
|
+
- uses: actions/checkout@v2
|
59
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
60
|
+
uses: ruby/setup-ruby@v1
|
61
|
+
with:
|
62
|
+
ruby-version: "${{ matrix.ruby }}"
|
63
|
+
- name: Install packages
|
64
|
+
run: |
|
65
|
+
sudo apt-get update
|
66
|
+
sudo apt-get install libsqlite3-dev
|
67
|
+
- name: Setup bundler
|
68
|
+
if: matrix.bundler != ''
|
69
|
+
run: |
|
70
|
+
gem uninstall bundler --all
|
71
|
+
gem install bundler --no-document --version ${{ matrix.bundler }}
|
72
|
+
- name: Set Appraisal bundle
|
73
|
+
if: matrix.appraisal != ''
|
74
|
+
run: |
|
75
|
+
echo "using gemfile gemfiles/${{ matrix.appraisal }}.gemfile"
|
76
|
+
bundle config set gemfile "gemfiles/${{ matrix.appraisal }}.gemfile"
|
77
|
+
- name: Install gems
|
78
|
+
run: |
|
79
|
+
bundle update
|
80
|
+
- name: Run Tests
|
81
|
+
run: bundle exec rake
|
82
|
+
- name: standardrb
|
83
|
+
if: matrix.standardrb == true
|
84
|
+
run: bundle exec rake standard
|
data/.standard.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,21 @@
|
|
1
|
-
#
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
2
3
|
|
3
|
-
|
4
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
5
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
4
6
|
|
5
|
-
|
7
|
+
## 1.0.2
|
6
8
|
|
7
|
-
|
9
|
+
### Changed
|
10
|
+
- Updated database cleaner dependency to use database_cleaner-active_record instead of deprecated database_cleaner gem.
|
11
|
+
- Added YARD doc param and return types.
|
12
|
+
|
13
|
+
## 1.0.1
|
14
|
+
|
15
|
+
### Added
|
16
|
+
- Sidekiq 6.0 compatibility
|
17
|
+
|
18
|
+
## 1.0.0
|
19
|
+
|
20
|
+
### Added
|
21
|
+
- Initial release
|
data/README.md
CHANGED
@@ -59,7 +59,7 @@ end
|
|
59
59
|
You can use this gem to add Sidekiq client middleware that will either warn you or raise an error when workers are scheduled inside of a database transaction. You can do this by simply adding this to your application's initialization code:
|
60
60
|
|
61
61
|
```ruby
|
62
|
-
require 'sidekiq/
|
62
|
+
require 'sidekiq/transaction_guard'
|
63
63
|
|
64
64
|
Sidekiq.configure_client do |config|
|
65
65
|
config.client_middleware do |chain|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.2
|
@@ -1,6 +1,7 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sidekiq/transaction_guard"
|
4
|
+
require "database_cleaner/active_record"
|
4
5
|
|
5
6
|
module Sidekiq
|
6
7
|
module TransactionGuard
|
@@ -16,8 +17,10 @@ module Sidekiq
|
|
16
17
|
|
17
18
|
# Wrap the `Sidekiq::TransactionGuard.testing` which sets up the data structures
|
18
19
|
# needed for custom counting of the transaction level within a test block.
|
20
|
+
#
|
21
|
+
# @return [Object] the return value of the block
|
19
22
|
def cleaning(&block)
|
20
|
-
Sidekiq::TransactionGuard.testing{ super(&block) }
|
23
|
+
Sidekiq::TransactionGuard.testing { super(&block) }
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -21,16 +21,16 @@ module Sidekiq
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def worker_mode(
|
25
|
-
read_sidekiq_option(
|
24
|
+
def worker_mode(job)
|
25
|
+
read_sidekiq_option(job, :transaction_guard) || Sidekiq::TransactionGuard.mode
|
26
26
|
end
|
27
27
|
|
28
28
|
def in_transaction?
|
29
29
|
Sidekiq::TransactionGuard.in_transaction?
|
30
30
|
end
|
31
31
|
|
32
|
-
def notify_block(
|
33
|
-
handler = read_sidekiq_option(
|
32
|
+
def notify_block(job)
|
33
|
+
handler = read_sidekiq_option(job, :notify_in_transaction)
|
34
34
|
if handler
|
35
35
|
handler
|
36
36
|
elsif handler == false
|
@@ -40,13 +40,13 @@ module Sidekiq
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
-
def read_sidekiq_option(
|
44
|
-
options = worker_class.sidekiq_options_hash
|
45
|
-
|
43
|
+
def read_sidekiq_option(job, option_name)
|
44
|
+
# options = worker_class.sidekiq_options_hash
|
45
|
+
job[option_name.to_s]
|
46
46
|
end
|
47
47
|
|
48
48
|
def notify!(worker_class, job)
|
49
|
-
notify_handler = notify_block(
|
49
|
+
notify_handler = notify_block(job)
|
50
50
|
if notify_handler
|
51
51
|
begin
|
52
52
|
notify_handler.call(job)
|
@@ -54,14 +54,14 @@ module Sidekiq
|
|
54
54
|
if Sidekiq.logger
|
55
55
|
Sidekiq.logger.error(e)
|
56
56
|
else
|
57
|
-
|
57
|
+
$stderr.write("ERROR on Sidekiq::TransactionGuard notify block for #{worker_class}: #{e.inspect}\n")
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def log_transaction(worker_class, job)
|
64
|
-
mode = worker_mode(
|
64
|
+
mode = worker_mode(job)
|
65
65
|
if mode != :disabled
|
66
66
|
message = "#{worker_class.name} was called from inside a database transaction"
|
67
67
|
if mode == :error
|
@@ -71,7 +71,7 @@ module Sidekiq
|
|
71
71
|
if logger
|
72
72
|
logger.warn(message)
|
73
73
|
else
|
74
|
-
|
74
|
+
$stderr.write("WARNING #{message}\n")
|
75
75
|
end
|
76
76
|
notify!(worker_class, job)
|
77
77
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require 'thread'
|
3
|
+
require "sidekiq"
|
4
|
+
require "set"
|
6
5
|
|
7
|
-
require_relative
|
6
|
+
require_relative "transaction_guard/middleware"
|
8
7
|
|
9
8
|
module Sidekiq
|
10
9
|
module TransactionGuard
|
@@ -26,6 +25,9 @@ module Sidekiq
|
|
26
25
|
# * :stderr - Log to STDERR
|
27
26
|
# * :error - Throw a `Sidekiq::TransactionGuard::InsideTransactionError`
|
28
27
|
# * :disabled - Allow workers inside of transactions
|
28
|
+
#
|
29
|
+
# @param mode [Symbol]
|
30
|
+
# @return [void]
|
29
31
|
def mode=(symbol)
|
30
32
|
if VALID_MODES.include?(symbol)
|
31
33
|
@mode = symbol
|
@@ -35,18 +37,22 @@ module Sidekiq
|
|
35
37
|
end
|
36
38
|
|
37
39
|
# Return the current mode.
|
38
|
-
|
39
|
-
|
40
|
-
|
40
|
+
#
|
41
|
+
# @return [Symbol]
|
42
|
+
attr_reader :mode
|
41
43
|
|
42
44
|
# Define the global notify block. This block will be called with a Sidekiq
|
43
45
|
# job hash for all jobs enqueued inside transactions if the mode is `:warn`
|
44
46
|
# or `:stderr`.
|
47
|
+
#
|
48
|
+
# @return [void]
|
45
49
|
def notify(&block)
|
46
50
|
@notify = block
|
47
51
|
end
|
48
52
|
|
49
53
|
# Return the block set as the notify handler with a call to `notify`.
|
54
|
+
#
|
55
|
+
# @return [Proc]
|
50
56
|
def notify_block
|
51
57
|
@notify
|
52
58
|
end
|
@@ -55,15 +61,20 @@ module Sidekiq
|
|
55
61
|
# being monitored for open transactions. You don't need to add `ActiveRecord::Base`
|
56
62
|
# or subclasses. Only the base class that establishes a new connection pool
|
57
63
|
# with a call to `establish_connection` needs to be added.
|
64
|
+
#
|
65
|
+
# @param connection_class [Class]
|
66
|
+
# @return [void]
|
58
67
|
def add_connection_class(connection_class)
|
59
|
-
@lock.synchronize{ @connection_classes << connection_class }
|
68
|
+
@lock.synchronize { @connection_classes << connection_class }
|
60
69
|
end
|
61
70
|
|
62
71
|
# Return true if any connection is currently inside of a transaction.
|
72
|
+
#
|
73
|
+
# @return [Boolean]
|
63
74
|
def in_transaction?
|
64
75
|
connection_classes = [ActiveRecord::Base]
|
65
76
|
unless @connection_classes.empty?
|
66
|
-
connection_classes.concat(@lock.synchronize{ @connection_classes.to_a })
|
77
|
+
connection_classes.concat(@lock.synchronize { @connection_classes.to_a })
|
67
78
|
end
|
68
79
|
connection_classes.any? do |connection_class|
|
69
80
|
connection_pool = connection_class.connection_pool
|
@@ -78,6 +89,8 @@ module Sidekiq
|
|
78
89
|
|
79
90
|
# This method call needs to be wrapped around tests that use transactional fixtures.
|
80
91
|
# It sets up data structures used to track the number of open transactions.
|
92
|
+
#
|
93
|
+
# @return [Object] the return value of the block
|
81
94
|
def testing(&block)
|
82
95
|
var = :sidekiq_rails_transaction_guard
|
83
96
|
save_val = Thread.current[var]
|
@@ -93,6 +106,9 @@ module Sidekiq
|
|
93
106
|
# class (see `add_connection_class` for more info). The current transaction level
|
94
107
|
# for that class' connection will be set as the zero point. This method can only
|
95
108
|
# be called inside a block wrapped with the `testing` method.
|
109
|
+
#
|
110
|
+
# @param connection_class [Class]
|
111
|
+
# @return [void]
|
96
112
|
def set_allowed_transaction_level(connection_class)
|
97
113
|
connection_counts = Thread.current[:sidekiq_rails_transaction_guard]
|
98
114
|
unless connection_counts
|
@@ -3,18 +3,18 @@
|
|
3
3
|
require_relative "lib/sidekiq/transaction_guard/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.version
|
8
|
-
spec.authors
|
9
|
-
spec.email
|
6
|
+
spec.name = "sidekiq-transaction_guard"
|
7
|
+
spec.version = Sidekiq::TransactionGuard::VERSION
|
8
|
+
spec.authors = ["Brian Durand", "Winston Durand"]
|
9
|
+
spec.email = ["bbdurand@gmail.com", "me@winstondurand.com"]
|
10
10
|
|
11
|
-
spec.summary
|
12
|
-
spec.homepage
|
13
|
-
spec.license
|
11
|
+
spec.summary = "Protect from accidentally invoking Sidekiq jobs when there are open database transactions"
|
12
|
+
spec.homepage = "https://github.com/bdurand/sidekiq-transaction_guard"
|
13
|
+
spec.license = "MIT"
|
14
14
|
|
15
15
|
# Specify which files should be added to the gem when it is released.
|
16
16
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
17
|
-
ignore_files = %w
|
17
|
+
ignore_files = %w[
|
18
18
|
.gitignore
|
19
19
|
.travis.yml
|
20
20
|
Appraisals
|
@@ -23,23 +23,16 @@ Gem::Specification.new do |spec|
|
|
23
23
|
Rakefile
|
24
24
|
gemfiles/
|
25
25
|
spec/
|
26
|
-
|
27
|
-
spec.files
|
28
|
-
`git ls-files -z`.split("\x0").reject{ |f| ignore_files.any?{ |path| f.start_with?(path) } }
|
26
|
+
]
|
27
|
+
spec.files = Dir.chdir(File.expand_path("..", __FILE__)) do
|
28
|
+
`git ls-files -z`.split("\x0").reject { |f| ignore_files.any? { |path| f.start_with?(path) } }
|
29
29
|
end
|
30
|
-
spec.bindir
|
31
|
-
spec.executables
|
30
|
+
spec.bindir = "exe"
|
31
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
32
32
|
spec.require_paths = ["lib"]
|
33
33
|
|
34
|
-
spec.required_ruby_version =
|
34
|
+
spec.required_ruby_version = ">= 2.2.2"
|
35
35
|
|
36
36
|
spec.add_dependency "activerecord", ">= 4.0"
|
37
37
|
spec.add_dependency "sidekiq", ">= 3.0"
|
38
|
-
|
39
|
-
spec.add_development_dependency "bundler", "~> 1.10"
|
40
|
-
spec.add_development_dependency "rake"
|
41
|
-
spec.add_development_dependency "rspec", "~> 3.0"
|
42
|
-
spec.add_development_dependency "database_cleaner"
|
43
|
-
spec.add_development_dependency "sqlite3"
|
44
|
-
spec.add_development_dependency "appraisal"
|
45
38
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sidekiq-transaction_guard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Durand
|
8
8
|
- Winston Durand
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-04-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -39,91 +39,7 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3.0'
|
42
|
-
|
43
|
-
name: bundler
|
44
|
-
requirement: !ruby/object:Gem::Requirement
|
45
|
-
requirements:
|
46
|
-
- - "~>"
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
version: '1.10'
|
49
|
-
type: :development
|
50
|
-
prerelease: false
|
51
|
-
version_requirements: !ruby/object:Gem::Requirement
|
52
|
-
requirements:
|
53
|
-
- - "~>"
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '1.10'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: rake
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - ">="
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - ">="
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: rspec
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - "~>"
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '3.0'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - "~>"
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
version: '3.0'
|
84
|
-
- !ruby/object:Gem::Dependency
|
85
|
-
name: database_cleaner
|
86
|
-
requirement: !ruby/object:Gem::Requirement
|
87
|
-
requirements:
|
88
|
-
- - ">="
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version: '0'
|
91
|
-
type: :development
|
92
|
-
prerelease: false
|
93
|
-
version_requirements: !ruby/object:Gem::Requirement
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: '0'
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
|
-
name: sqlite3
|
100
|
-
requirement: !ruby/object:Gem::Requirement
|
101
|
-
requirements:
|
102
|
-
- - ">="
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
version: '0'
|
105
|
-
type: :development
|
106
|
-
prerelease: false
|
107
|
-
version_requirements: !ruby/object:Gem::Requirement
|
108
|
-
requirements:
|
109
|
-
- - ">="
|
110
|
-
- !ruby/object:Gem::Version
|
111
|
-
version: '0'
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
|
-
name: appraisal
|
114
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
-
requirements:
|
116
|
-
- - ">="
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
version: '0'
|
119
|
-
type: :development
|
120
|
-
prerelease: false
|
121
|
-
version_requirements: !ruby/object:Gem::Requirement
|
122
|
-
requirements:
|
123
|
-
- - ">="
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
126
|
-
description:
|
42
|
+
description:
|
127
43
|
email:
|
128
44
|
- bbdurand@gmail.com
|
129
45
|
- me@winstondurand.com
|
@@ -131,6 +47,9 @@ executables: []
|
|
131
47
|
extensions: []
|
132
48
|
extra_rdoc_files: []
|
133
49
|
files:
|
50
|
+
- ".github/dependabot.yml"
|
51
|
+
- ".github/workflows/continuous_integration.yml"
|
52
|
+
- ".standard.yml"
|
134
53
|
- CHANGELOG.md
|
135
54
|
- MIT_LICENSE.txt
|
136
55
|
- README.md
|
@@ -145,7 +64,7 @@ homepage: https://github.com/bdurand/sidekiq-transaction_guard
|
|
145
64
|
licenses:
|
146
65
|
- MIT
|
147
66
|
metadata: {}
|
148
|
-
post_install_message:
|
67
|
+
post_install_message:
|
149
68
|
rdoc_options: []
|
150
69
|
require_paths:
|
151
70
|
- lib
|
@@ -160,8 +79,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
79
|
- !ruby/object:Gem::Version
|
161
80
|
version: '0'
|
162
81
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
164
|
-
signing_key:
|
82
|
+
rubygems_version: 3.2.22
|
83
|
+
signing_key:
|
165
84
|
specification_version: 4
|
166
85
|
summary: Protect from accidentally invoking Sidekiq jobs when there are open database
|
167
86
|
transactions
|