active_record_mutex 3.2.0 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 36b8a40a6140ecdfcd0e3892d2e008d502acdce96826ef3aecc797cadb65fa89
|
4
|
+
data.tar.gz: 38bf80d5ed330479f5a8399633048c606f7d03b71aaccacf512509c9cdcbb58e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a580eda2be88864af2b8aec078b09b5757992063f9078e64afb195c167bfc6b858f1d0674f2c348e66659c9f759e2cb47bb147a9b6118e9817510cdf6b77cb05
|
7
|
+
data.tar.gz: 51e00870718236b49c3271a0164d68fe6708e5b2451daad87b9f211090b3d7979a06546665d25082dadaca028fbb773c544ac33f7932c3a8d04150c2e31ff369
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Changes
|
2
2
|
|
3
|
+
## 2024-10-16 v3.2.1
|
4
|
+
|
5
|
+
* Refactor DatabaseMutex implementation:
|
6
|
+
* Change `@name` and `mutex.name` to downcase and freeze values
|
7
|
+
* Update tests to reflect new behavior
|
8
|
+
|
9
|
+
## 2024-10-16 v3.2.0
|
10
|
+
|
11
|
+
* DatabaseMutex improvements:
|
12
|
+
* Improved lock name generation in `lock_name` method.
|
13
|
+
* Modified SQL queries to use `lock_name` instead of `internal_name`.
|
14
|
+
* Added `lock_exists?` and `test_all_mutexes` methods for testing mutex
|
15
|
+
creation and querying.
|
16
|
+
|
3
17
|
## 2024-10-16 v3.1.0
|
4
18
|
|
5
19
|
* Changes for **3.1.0**:
|
data/active_record_mutex.gemspec
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: active_record_mutex 3.2.
|
2
|
+
# stub: active_record_mutex 3.2.1 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "active_record_mutex".freeze
|
6
|
-
s.version = "3.2.
|
6
|
+
s.version = "3.2.1".freeze
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
@@ -20,9 +20,10 @@ module ActiveRecord
|
|
20
20
|
#
|
21
21
|
# @raise [ ArgumentError ] if no **name** option is provided in the options hash.
|
22
22
|
def initialize(opts = {})
|
23
|
-
@name = opts[:name].to_s
|
23
|
+
@name = opts[:name].to_s.downcase
|
24
24
|
@name.size != 0 or raise ArgumentError, "mutex requires a nonempty :name argument"
|
25
|
-
|
25
|
+
@name.freeze
|
26
|
+
lock_name # create/check internal_name and lock_name
|
26
27
|
end
|
27
28
|
|
28
29
|
# Returns the name of this mutex as given via the constructor argument.
|
@@ -35,7 +36,8 @@ module ActiveRecord
|
|
35
36
|
def internal_name
|
36
37
|
@internal_name and return @internal_name
|
37
38
|
encoded_name = ?$ + Digest::MD5.base64digest([ self.class.name, name ] * ?#).
|
38
|
-
delete('^A-Za-z0-9+/').gsub(/[+\/]/, ?+ => ?_, ?/ => ?.)
|
39
|
+
delete('^A-Za-z0-9+/').gsub(/[+\/]/, ?+ => ?_, ?/ => ?.).
|
40
|
+
downcase.freeze
|
39
41
|
if encoded_name.size <= 64
|
40
42
|
@internal_name = encoded_name
|
41
43
|
else
|
@@ -50,8 +52,11 @@ module ActiveRecord
|
|
50
52
|
#
|
51
53
|
# @return [ String ] the generated lock name
|
52
54
|
def lock_name
|
55
|
+
@lock_name and return @lock_name
|
53
56
|
prefix_name = name.gsub(/[^[:print:]]/, '')[0, 32]
|
54
|
-
prefix_name + ?= + internal_name
|
57
|
+
@lock_name = prefix_name + ?= + internal_name
|
58
|
+
@lock_name.downcase!
|
59
|
+
@lock_name.freeze
|
55
60
|
end
|
56
61
|
|
57
62
|
# The synchronize method attempts to acquire a mutex lock for the given name
|
data/test/database_mutex_test.rb
CHANGED
@@ -25,7 +25,7 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
25
25
|
old, ENV['RAILS_ENV'] = ENV['RAILS_ENV'], nil
|
26
26
|
mutex = Foo.mutex
|
27
27
|
assert_kind_of ActiveRecord::DatabaseMutex::Implementation, mutex
|
28
|
-
assert_equal Foo.name, mutex.name
|
28
|
+
assert_equal Foo.name.downcase, mutex.name
|
29
29
|
ensure
|
30
30
|
ENV['RAILS_ENV'] = old
|
31
31
|
end
|
@@ -34,7 +34,7 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
34
34
|
old, ENV['RAILS_ENV'] = ENV['RAILS_ENV'], 'test'
|
35
35
|
mutex = Foo.mutex
|
36
36
|
assert_kind_of ActiveRecord::DatabaseMutex::Implementation, mutex
|
37
|
-
assert_equal "#{Foo.name}@test", mutex.name
|
37
|
+
assert_equal "#{Foo.name}@test".downcase, mutex.name
|
38
38
|
ensure
|
39
39
|
ENV['RAILS_ENV'] = old
|
40
40
|
end
|
@@ -47,7 +47,7 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
47
47
|
assert_equal true, instance.save
|
48
48
|
mutex = instance.mutex
|
49
49
|
assert_kind_of ActiveRecord::DatabaseMutex::Implementation, mutex
|
50
|
-
assert_equal "#{instance.id}@#{Foo.name}", mutex.name
|
50
|
+
assert_equal "#{instance.id}@#{Foo.name}".downcase, mutex.name
|
51
51
|
end
|
52
52
|
|
53
53
|
def test_factory_method_for
|
@@ -56,6 +56,7 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
private def lock_exists?(string)
|
59
|
+
string = string.downcase
|
59
60
|
ActiveRecord::Base.all_mutexes.map(&:OBJECT_NAME).any? {
|
60
61
|
_1.include?(string)
|
61
62
|
}
|
@@ -73,7 +74,7 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
73
74
|
|
74
75
|
def test_create
|
75
76
|
mutex = Implementation.new(:name => 'Create')
|
76
|
-
assert_equal '
|
77
|
+
assert_equal 'create', mutex.name
|
77
78
|
end
|
78
79
|
|
79
80
|
def test_lock
|
@@ -284,11 +285,11 @@ class DatabaseMutexTest < Test::Unit::TestCase
|
|
284
285
|
|
285
286
|
def test_internal_name
|
286
287
|
mutex = Implementation.new(:name => (250..255).map(&:chr) * '')
|
287
|
-
assert_equal '$
|
288
|
+
assert_equal '$3i3xqvurnpgyh6kaiokipw', mutex.send(:internal_name)
|
288
289
|
end
|
289
290
|
|
290
291
|
def test_counter_name
|
291
292
|
mutex = Implementation.new(:name => (250..255).map(&:chr) * '')
|
292
|
-
assert_equal '@$
|
293
|
+
assert_equal '@$3i3xqvurnpgyh6kaiokipw', mutex.send(:counter)
|
293
294
|
end
|
294
295
|
end
|