with_advisory_lock 3.0.0 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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