pg_advisory_lock 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/lib/pg_advisory_lock/base.rb +12 -5
- data/lib/pg_advisory_lock/version.rb +1 -1
- data/pg_advisory_lock.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fe66a6a9bafd02afd8fd643bf1792ab0b9cadfc74f076a30e25873a885d5ca7
|
4
|
+
data.tar.gz: 6d65a6c45a2f948dc4ad6b46ebfa139787534dd992f0268c7ed1414c008ae31a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 967d5773b005b24e609cf8b415ae6d51d91a12be020e20eb74c63036da765e0182911f83d2fb86511bc009152c0fb4457ee83a2fbad95f517914ed17ab659dee
|
7
|
+
data.tar.gz: d8dc937754f2316cfd65002147f562a1778eba09cbf7e4e9659c1159bef12c758d0bdfc2a54a429aba7146d69b0efc7ec27a4b16c886c62423283e8e01fcfe89
|
data/README.md
CHANGED
@@ -54,7 +54,7 @@ To release a new version, update the version number in `version.rb`, and then ru
|
|
54
54
|
|
55
55
|
## Contributing
|
56
56
|
|
57
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
57
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/didww/pg_advisory_lock. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/didww/pg_advisory_lock/blob/master/CODE_OF_CONDUCT.md).
|
58
58
|
|
59
59
|
|
60
60
|
## License
|
@@ -63,4 +63,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
63
63
|
|
64
64
|
## Code of Conduct
|
65
65
|
|
66
|
-
Everyone interacting in the PgAdvisoryLock project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/
|
66
|
+
Everyone interacting in the PgAdvisoryLock project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/didww/pg_advisory_lock/blob/master/CODE_OF_CONDUCT.md).
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'active_support/logger'
|
4
4
|
require 'pg_sql_caller'
|
5
|
+
require 'active_support/core_ext/string/inflections'
|
5
6
|
|
6
7
|
module PgAdvisoryLock
|
7
8
|
class Base
|
@@ -10,7 +11,7 @@ module PgAdvisoryLock
|
|
10
11
|
# Allows to use mutex in applications that uses same database.
|
11
12
|
|
12
13
|
class_attribute :logger, instance_writer: false, default: ActiveSupport::Logger.new(STDOUT)
|
13
|
-
class_attribute :_sql_caller_class, instance_writer: false, default: PgSqlCaller::Base
|
14
|
+
class_attribute :_sql_caller_class, instance_writer: false, default: 'PgSqlCaller::Base'
|
14
15
|
class_attribute :_lock_names, instance_writer: false, default: {}
|
15
16
|
|
16
17
|
class << self
|
@@ -86,11 +87,11 @@ module PgAdvisoryLock
|
|
86
87
|
end
|
87
88
|
|
88
89
|
def transaction_lock(lock_number)
|
89
|
-
raise ArgumentError, 'block required when not within transaction' if !block_given? && !
|
90
|
+
raise ArgumentError, 'block required when not within transaction' if !block_given? && !sql_caller_class.transaction_open?
|
90
91
|
|
91
92
|
return perform_lock(lock_number) unless block_given?
|
92
93
|
|
93
|
-
|
94
|
+
sql_caller_class.transaction do
|
94
95
|
perform_lock(lock_number)
|
95
96
|
yield
|
96
97
|
end
|
@@ -110,11 +111,11 @@ module PgAdvisoryLock
|
|
110
111
|
def perform_lock(lock_number)
|
111
112
|
function_name = "pg_advisory#{'_xact' if transaction}_lock#{'_shared' if shared}"
|
112
113
|
|
113
|
-
|
114
|
+
sql_caller_class.execute("SELECT #{function_name}(#{lock_number})")
|
114
115
|
end
|
115
116
|
|
116
117
|
def perform_unlock(lock_number)
|
117
|
-
|
118
|
+
sql_caller_class.select_value("SELECT pg_advisory_unlock#{'_shared' if shared}(#{lock_number})")
|
118
119
|
end
|
119
120
|
|
120
121
|
# Converts lock name to number, because pg advisory lock functions accept only bigint numbers.
|
@@ -129,5 +130,11 @@ module PgAdvisoryLock
|
|
129
130
|
|
130
131
|
lock_number.join(', ')
|
131
132
|
end
|
133
|
+
|
134
|
+
def sql_caller_class
|
135
|
+
return @sql_caller_class if defined?(@sql_caller_class)
|
136
|
+
|
137
|
+
@sql_caller_class = _sql_caller_class.is_a?(String) ? _sql_caller_class.constantize : _sql_caller_class
|
138
|
+
end
|
132
139
|
end
|
133
140
|
end
|
data/pg_advisory_lock.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
|
11
11
|
spec.summary = 'Postgresql Advisory Lock for ActiveRecord'
|
12
12
|
spec.description = 'Postgresql Advisory Lock for ActiveRecord.'
|
13
|
-
spec.homepage = 'https://github.com/
|
13
|
+
spec.homepage = 'https://github.com/didww/pg_advisory_lock'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
spec.required_ruby_version = Gem::Requirement.new('>= 2.3.0')
|
16
16
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_advisory_lock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Denis Talakevich
|
@@ -74,13 +74,13 @@ files:
|
|
74
74
|
- lib/pg_advisory_lock/base.rb
|
75
75
|
- lib/pg_advisory_lock/version.rb
|
76
76
|
- pg_advisory_lock.gemspec
|
77
|
-
homepage: https://github.com/
|
77
|
+
homepage: https://github.com/didww/pg_advisory_lock
|
78
78
|
licenses:
|
79
79
|
- MIT
|
80
80
|
metadata:
|
81
|
-
homepage_uri: https://github.com/
|
82
|
-
source_code_uri: https://github.com/
|
83
|
-
changelog_uri: https://github.com/
|
81
|
+
homepage_uri: https://github.com/didww/pg_advisory_lock
|
82
|
+
source_code_uri: https://github.com/didww/pg_advisory_lock
|
83
|
+
changelog_uri: https://github.com/didww/pg_advisory_lock
|
84
84
|
post_install_message:
|
85
85
|
rdoc_options: []
|
86
86
|
require_paths:
|