active_record_mutex 3.0.0 → 3.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 41d4eb2e59570a40644f3a010d4678b86f32d0d584a6e4da0fb4973b01f07423
4
- data.tar.gz: 1801a6fe2eaec121076087a08328880b4ee3fcd19071f2f146671c1fe5e4ce4b
3
+ metadata.gz: 337ab2cfb637dc992dda05b67bc12098b0d8d7266591dc741d4918dbb3238aee
4
+ data.tar.gz: e812c787de8cb82696027803eafa426793af334d4c1d847c9956473a7d1faf20
5
5
  SHA512:
6
- metadata.gz: 9548fba6fe7ea7f026de2177a8c5f9e68c329ae2bade65d489a33eb33512743db53e1ce089d2e70a5b8f0d4d5a04017c3693610bb7804dd6a5996aabece7a8ad
7
- data.tar.gz: 4ceb6bb411fc0447b8bfa3a0e5ea9d31ebfe72ae09bd9c781966c1d6518e16bdb2b875c6030da3e1254fefb30a2dfbc731af998a429c6b3e05d30d1beffd80b6
6
+ metadata.gz: f8cb37ec99b0a52267f964b032b8f061801bef3000a11d355af5cddef3d5f075c471bd51e3fa79310136cbc53b3cd0376c293a501363b4f48f979fc774f03efc
7
+ data.tar.gz: 1418b58e067e151bb33e92cdd7beb215cb3fdce4ea9f7439e34ae6315b452c80d9e0cafa5f368f399ec2abb7d48c0479a1a233b1fc01f4ff364043042647faa1
data/CHANGES.md CHANGED
@@ -1,7 +1,14 @@
1
1
  # Changes
2
2
 
3
- ## 2024-10-15 v3.0.0
3
+ ## 2024-10-16 v3.1.0
4
+
5
+ * Changes for **3.1.0**:
6
+ * Implemented `all_mutexes` method in ActiveRecord::DatabaseMutex
7
+ * Added `MutexInfo` class as a subclass of OpenStruct
8
+ * Updated `active_record_mutex.gemspec` to use **0.6** version of `ostruct`
9
+ * Removed `tins` dependency
4
10
 
11
+ ## 2024-10-15 v3.0.0
5
12
 
6
13
  ### Major Enhancements
7
14
 
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ GemHadar do
21
21
 
22
22
  dependency 'mysql2', '~> 0.3'
23
23
  dependency 'activerecord', '>= 4.0'
24
- dependency 'tins', '~> 1.12'
24
+ dependency 'ostruct', '~> 0.6'
25
25
  development_dependency 'all_images', '~> 0.6'
26
26
  development_dependency 'test-unit', '~> 3.0'
27
27
  development_dependency 'debug'
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: active_record_mutex 3.0.0 ruby lib
2
+ # stub: active_record_mutex 3.1.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "active_record_mutex".freeze
6
- s.version = "3.0.0".freeze
6
+ s.version = "3.1.0".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]
10
10
  s.authors = ["Florian Frank".freeze]
11
- s.date = "2024-10-15"
11
+ s.date = "2024-10-16"
12
12
  s.description = "Mutex that can be used to synchronise ruby processes via an ActiveRecord datababase connection. (Only Mysql is supported at the moment.)".freeze
13
13
  s.email = "flori@ping.de".freeze
14
14
  s.extra_rdoc_files = ["README.md".freeze, "lib/active_record/database_mutex.rb".freeze, "lib/active_record/database_mutex/implementation.rb".freeze, "lib/active_record/database_mutex/version.rb".freeze, "lib/active_record/mutex.rb".freeze, "lib/active_record_mutex.rb".freeze]
@@ -29,5 +29,5 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency(%q<simplecov>.freeze, [">= 0".freeze])
30
30
  s.add_runtime_dependency(%q<mysql2>.freeze, ["~> 0.3".freeze])
31
31
  s.add_runtime_dependency(%q<activerecord>.freeze, [">= 4.0".freeze])
32
- s.add_runtime_dependency(%q<tins>.freeze, ["~> 1.12".freeze])
32
+ s.add_runtime_dependency(%q<ostruct>.freeze, ["~> 0.6".freeze])
33
33
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveRecord::DatabaseMutex
2
2
  # ActiveRecord::DatabaseMutex version
3
- VERSION = '3.0.0'
3
+ VERSION = '3.1.0'
4
4
  VERSION_ARRAY = VERSION.split('.').map(&:to_i) # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -1,6 +1,7 @@
1
1
  require 'active_record'
2
2
  require 'active_record/database_mutex/version'
3
3
  require 'active_record/database_mutex/implementation'
4
+ require 'ostruct'
4
5
 
5
6
  module ActiveRecord
6
7
  # This module is mixed into ActiveRecord::Base to provide the mutex methods
@@ -29,6 +30,11 @@ module ActiveRecord
29
30
  # lock file permissions problems.
30
31
  class MutexSystemError < MutexError; end
31
32
 
33
+ # The MutexInfo class is a subclass of OpenStruct, serving as a wrapper for
34
+ # information related to database mutexes. It allows dynamic attribute
35
+ # access.
36
+ MutexInfo = Class.new OpenStruct
37
+
32
38
  def self.included(modul)
33
39
  modul.instance_eval do
34
40
  extend ClassMethods
@@ -59,6 +65,20 @@ module ActiveRecord
59
65
  def mutex
60
66
  @mutex ||= Implementation.new(name: mutex_name)
61
67
  end
68
+
69
+ # The all_mutexes method returns an array of MutexInfo objects
70
+ # representing all mutexes currently held by database connections. The
71
+ # MutexInfo#OBJECT_NAME is the
72
+ # {ActiveRecord::DatabaseMutex::Implementation#internal_name}.
73
+ #
74
+ # @return [Array] An array of MutexInfo objects.
75
+ def all_mutexes
76
+ connection.select_all(<<~EOT).map { MutexInfo.new(_1) }
77
+ SELECT * FROM performance_schema.metadata_locks
78
+ WHERE OBJECT_TYPE = 'USER LEVEL LOCK'
79
+ AND OBJECT_NAME LIKE "$%"
80
+ EOT
81
+ end
62
82
  end
63
83
 
64
84
  # The mutex method returns an instance of
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_mutex
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-15 00:00:00.000000000 Z
11
+ date: 2024-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_hadar
@@ -109,19 +109,19 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '4.0'
111
111
  - !ruby/object:Gem::Dependency
112
- name: tins
112
+ name: ostruct
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '1.12'
117
+ version: '0.6'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '1.12'
124
+ version: '0.6'
125
125
  description: Mutex that can be used to synchronise ruby processes via an ActiveRecord
126
126
  datababase connection. (Only Mysql is supported at the moment.)
127
127
  email: flori@ping.de