mongoid-lock 0.0.7 → 0.0.8
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.
- data/VERSION +1 -1
- data/lib/mongoid/lock.rb +7 -0
- data/lib/mongoid/lock/synch_methods.rb +18 -2
- data/mongoid-lock.gemspec +1 -1
- metadata +12 -12
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
data/lib/mongoid/lock.rb
CHANGED
@@ -15,6 +15,12 @@ module Mongoid
|
|
15
15
|
#------------------------------------------------------------------------------
|
16
16
|
# => Volatile Instance Attribute Accessor
|
17
17
|
#------------------------------------------------------------------------------
|
18
|
+
def lock_waiter
|
19
|
+
self.save
|
20
|
+
self.reload
|
21
|
+
return super
|
22
|
+
end
|
23
|
+
|
18
24
|
def lock_used_by
|
19
25
|
self.save
|
20
26
|
self.reload
|
@@ -37,6 +43,7 @@ module Mongoid
|
|
37
43
|
include Mongoid::Document
|
38
44
|
end
|
39
45
|
# => Add special field
|
46
|
+
field :lock_waiter, :type => String, :default => nil
|
40
47
|
field :lock_used_by, :type => String, :default => nil
|
41
48
|
field :lock_acquired_at, :type => Time, :default => nil
|
42
49
|
index [[:lock_acquired_at, -1]], :sparse => true
|
@@ -8,17 +8,33 @@ module Mongoid
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def reset_lock!
|
11
|
-
self.update_attributes(:lock_used_by => nil, :lock_acquired_at => nil)
|
11
|
+
self.update_attributes(:lock_used_by => nil, :lock_acquired_at => nil, :lock_waiter => nil)
|
12
12
|
end
|
13
13
|
|
14
14
|
def lock_acquire
|
15
|
+
self.lock_acquire_begin
|
15
16
|
local = "#{Socket.gethostname}:#{Process.pid}"
|
16
17
|
ident = self.lock_used_by
|
18
|
+
wait = self.lock_waiter
|
17
19
|
if (ident and ident != local)
|
18
20
|
raise Mongoid::Lock::UnsynchronizedAccess.new(ident)
|
21
|
+
elsif (wait != local)
|
22
|
+
raise Mongoid::Lock::UnsynchronizedAccess.new(wait)
|
19
23
|
else
|
20
24
|
self.set(:lock_used_by, local)
|
21
|
-
self.
|
25
|
+
self.set(:lock_acquired_at, Time.now)
|
26
|
+
self.set(:lock_waiter, nil)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def lock_acquire_begin
|
31
|
+
local = "#{Socket.gethostname}:#{Process.pid}"
|
32
|
+
ident = self.lock_used_by
|
33
|
+
wait = self.lock_waiter
|
34
|
+
if (ident or wait)
|
35
|
+
raise Mongoid::Lock::UnsynchronizedAccess.new(ident)
|
36
|
+
else
|
37
|
+
self.set(:lock_waiter, local)
|
22
38
|
end
|
23
39
|
end
|
24
40
|
|
data/mongoid-lock.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid-lock
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-03-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongoid
|
16
|
-
requirement: &
|
16
|
+
requirement: &15237780 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *15237780
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &15303120 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *15303120
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: bundler
|
38
|
-
requirement: &
|
38
|
+
requirement: &15300780 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.0.0
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *15300780
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: jeweler
|
49
|
-
requirement: &
|
49
|
+
requirement: &15298840 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ~>
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.6.4
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *15298840
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rcov
|
60
|
-
requirement: &
|
60
|
+
requirement: &15297040 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *15297040
|
69
69
|
description: Adds synchronized lock-like behavior to a mongoid model instance
|
70
70
|
email: jp@jibe.com
|
71
71
|
executables: []
|
@@ -101,7 +101,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
101
|
version: '0'
|
102
102
|
segments:
|
103
103
|
- 0
|
104
|
-
hash: -
|
104
|
+
hash: -4350909105218756356
|
105
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
106
|
none: false
|
107
107
|
requirements:
|