with_advisory_lock 3.0.0 → 4.6.0

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.
@@ -0,0 +1,70 @@
1
+ require 'minitest_helper'
2
+
3
+ describe 'transaction scoping' do
4
+ def supported?
5
+ env_db == :postgresql
6
+ end
7
+
8
+ describe 'not supported' do
9
+ before do
10
+ skip if supported?
11
+ end
12
+
13
+ it 'raises an error when attempting to use transaction level locks' do
14
+ Tag.transaction do
15
+ exception = proc {
16
+ Tag.with_advisory_lock 'test', transaction: true do
17
+ raise 'should not get here'
18
+ end
19
+ }.must_raise ArgumentError
20
+ exception.message.must_include 'not supported'
21
+ end
22
+ end
23
+ end
24
+
25
+ describe 'supported' do
26
+ before do
27
+ skip unless env_db == :postgresql
28
+ end
29
+
30
+ def pg_lock_count
31
+ ActiveRecord::Base.connection.select_value("SELECT COUNT(*) FROM pg_locks WHERE locktype = 'advisory';").to_i
32
+ end
33
+
34
+ specify 'session locks release after the block executes' do
35
+ Tag.transaction do
36
+ pg_lock_count.must_equal 0
37
+ Tag.with_advisory_lock 'test' do
38
+ pg_lock_count.must_equal 1
39
+ end
40
+ pg_lock_count.must_equal 0
41
+ end
42
+ end
43
+
44
+ specify 'session locks release when transaction fails inside block' do
45
+ Tag.transaction do
46
+ pg_lock_count.must_equal 0
47
+
48
+ exception = proc {
49
+ Tag.with_advisory_lock 'test' do
50
+ Tag.connection.execute 'SELECT 1/0;'
51
+ end
52
+ }.must_raise ActiveRecord::StatementInvalid
53
+ exception.message.must_include 'division by zero'
54
+
55
+ pg_lock_count.must_equal 0
56
+ end
57
+ end
58
+
59
+ specify 'transaction level locks hold until the transaction completes' do
60
+ Tag.transaction do
61
+ pg_lock_count.must_equal 0
62
+ Tag.with_advisory_lock 'test', transaction: true do
63
+ pg_lock_count.must_equal 1
64
+ end
65
+ pg_lock_count.must_equal 1
66
+ end
67
+ pg_lock_count.must_equal 0
68
+ end
69
+ end
70
+ end
data/tests.sh CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/bin/bash -e
2
2
  export DB
3
3
 
4
- for RUBY in 2.1.2 jruby-1.7.13 ; do
4
+ for RUBY in 2.4.0 jruby-1.7.13 ; do
5
5
  rbenv local $RUBY
6
6
  for DB in mysql postgresql sqlite ; do
7
7
  echo "$DB | $(ruby -v)"
@@ -1,4 +1,3 @@
1
- # -*- encoding: utf-8 -*-
2
1
  lib = File.expand_path('../lib', __FILE__)
3
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
3
  require 'with_advisory_lock/version'
@@ -14,12 +13,12 @@ Gem::Specification.new do |gem|
14
13
  gem.license = 'MIT'
15
14
 
16
15
  gem.files = `git ls-files`.split($/)
17
- gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
18
16
  gem.test_files = gem.files.grep(%r{^test/})
19
17
  gem.require_paths = %w(lib)
18
+ gem.required_ruby_version = '>= 2.2.10'
19
+
20
+ gem.add_runtime_dependency 'activerecord', '>= 4.2'
20
21
 
21
- gem.add_runtime_dependency 'activerecord', '>= 3.2'
22
- gem.add_runtime_dependency 'thread_safe'
23
22
 
24
23
  gem.add_development_dependency 'yard'
25
24
  gem.add_development_dependency 'minitest'
metadata CHANGED
@@ -1,125 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: with_advisory_lock
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 4.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-03 00:00:00.000000000 Z
11
+ date: 2019-09-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - '>='
17
- - !ruby/object:Gem::Version
18
- version: '3.2'
19
14
  name: activerecord
20
- prerelease: false
21
- type: :runtime
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '3.2'
27
- - !ruby/object:Gem::Dependency
28
15
  requirement: !ruby/object:Gem::Requirement
29
16
  requirements:
30
- - - '>='
17
+ - - ">="
31
18
  - !ruby/object:Gem::Version
32
- version: '0'
33
- name: thread_safe
34
- prerelease: false
19
+ version: '4.2'
35
20
  type: :runtime
21
+ prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
- - - '>='
24
+ - - ">="
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: '4.2'
41
27
  - !ruby/object:Gem::Dependency
28
+ name: yard
42
29
  requirement: !ruby/object:Gem::Requirement
43
30
  requirements:
44
- - - '>='
31
+ - - ">="
45
32
  - !ruby/object:Gem::Version
46
33
  version: '0'
47
- name: yard
48
- prerelease: false
49
34
  type: :development
35
+ prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - '>='
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
42
+ name: minitest
56
43
  requirement: !ruby/object:Gem::Requirement
57
44
  requirements:
58
- - - '>='
45
+ - - ">="
59
46
  - !ruby/object:Gem::Version
60
47
  version: '0'
61
- name: minitest
62
- prerelease: false
63
48
  type: :development
49
+ prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - '>='
52
+ - - ">="
67
53
  - !ruby/object:Gem::Version
68
54
  version: '0'
69
55
  - !ruby/object:Gem::Dependency
56
+ name: minitest-great_expectations
70
57
  requirement: !ruby/object:Gem::Requirement
71
58
  requirements:
72
- - - '>='
59
+ - - ">="
73
60
  - !ruby/object:Gem::Version
74
61
  version: '0'
75
- name: minitest-great_expectations
76
- prerelease: false
77
62
  type: :development
63
+ prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
70
+ name: minitest-reporters
84
71
  requirement: !ruby/object:Gem::Requirement
85
72
  requirements:
86
- - - '>='
73
+ - - ">="
87
74
  - !ruby/object:Gem::Version
88
75
  version: '0'
89
- name: minitest-reporters
90
- prerelease: false
91
76
  type: :development
77
+ prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
84
+ name: mocha
98
85
  requirement: !ruby/object:Gem::Requirement
99
86
  requirements:
100
- - - '>='
87
+ - - ">="
101
88
  - !ruby/object:Gem::Version
102
89
  version: '0'
103
- name: mocha
104
- prerelease: false
105
90
  type: :development
91
+ prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - '>='
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
98
+ name: appraisal
112
99
  requirement: !ruby/object:Gem::Requirement
113
100
  requirements:
114
- - - '>='
101
+ - - ">="
115
102
  - !ruby/object:Gem::Version
116
103
  version: '0'
117
- name: appraisal
118
- prerelease: false
119
104
  type: :development
105
+ prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
- - - '>='
108
+ - - ">="
123
109
  - !ruby/object:Gem::Version
124
110
  version: '0'
125
111
  description: Advisory locking for ActiveRecord
@@ -129,23 +115,27 @@ executables: []
129
115
  extensions: []
130
116
  extra_rdoc_files: []
131
117
  files:
132
- - .gitignore
133
- - .travis.yml
118
+ - ".gitignore"
119
+ - ".tool-versions"
120
+ - ".travis.yml"
134
121
  - Appraisals
122
+ - CHANGELOG.md
135
123
  - Gemfile
136
124
  - LICENSE.txt
137
125
  - README.md
138
126
  - Rakefile
139
- - gemfiles/activerecord_3.2.gemfile
140
- - gemfiles/activerecord_4.0.gemfile
141
- - gemfiles/activerecord_4.1.gemfile
142
- - gemfiles/activerecord_edge.gemfile
127
+ - gemfiles/activerecord_4.2.gemfile
128
+ - gemfiles/activerecord_5.0.gemfile
129
+ - gemfiles/activerecord_5.1.gemfile
130
+ - gemfiles/activerecord_5.2.gemfile
131
+ - gemfiles/activerecord_6.0.gemfile
143
132
  - lib/with_advisory_lock.rb
144
133
  - lib/with_advisory_lock/base.rb
145
134
  - lib/with_advisory_lock/concern.rb
146
135
  - lib/with_advisory_lock/database_adapter_support.rb
147
136
  - lib/with_advisory_lock/flock.rb
148
137
  - lib/with_advisory_lock/mysql.rb
138
+ - lib/with_advisory_lock/mysql_no_nesting.rb
149
139
  - lib/with_advisory_lock/nested_advisory_lock_error.rb
150
140
  - lib/with_advisory_lock/postgresql.rb
151
141
  - lib/with_advisory_lock/version.rb
@@ -154,33 +144,35 @@ files:
154
144
  - test/lock_test.rb
155
145
  - test/minitest_helper.rb
156
146
  - test/nesting_test.rb
147
+ - test/options_test.rb
157
148
  - test/parallelism_test.rb
149
+ - test/shared_test.rb
158
150
  - test/test_models.rb
159
151
  - test/thread_test.rb
152
+ - test/transaction_test.rb
160
153
  - tests.sh
161
154
  - with_advisory_lock.gemspec
162
155
  homepage: https://github.com/mceachen/with_advisory_lock
163
156
  licenses:
164
157
  - MIT
165
158
  metadata: {}
166
- post_install_message:
159
+ post_install_message:
167
160
  rdoc_options: []
168
161
  require_paths:
169
162
  - lib
170
163
  required_ruby_version: !ruby/object:Gem::Requirement
171
164
  requirements:
172
- - - '>='
165
+ - - ">="
173
166
  - !ruby/object:Gem::Version
174
- version: '0'
167
+ version: 2.2.10
175
168
  required_rubygems_version: !ruby/object:Gem::Requirement
176
169
  requirements:
177
- - - '>='
170
+ - - ">="
178
171
  - !ruby/object:Gem::Version
179
172
  version: '0'
180
173
  requirements: []
181
- rubyforge_project:
182
- rubygems_version: 2.1.9
183
- signing_key:
174
+ rubygems_version: 3.0.3
175
+ signing_key:
184
176
  specification_version: 4
185
177
  summary: Advisory locking for ActiveRecord
186
178
  test_files:
@@ -189,7 +181,9 @@ test_files:
189
181
  - test/lock_test.rb
190
182
  - test/minitest_helper.rb
191
183
  - test/nesting_test.rb
184
+ - test/options_test.rb
192
185
  - test/parallelism_test.rb
186
+ - test/shared_test.rb
193
187
  - test/test_models.rb
194
188
  - test/thread_test.rb
195
- has_rdoc:
189
+ - test/transaction_test.rb