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 CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -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.update_attributes(:lock_used_by => local, :lock_acquired_at => Time.now)
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
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mongoid-lock"
8
- s.version = "0.0.7"
8
+ s.version = "0.0.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James Petty"]
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.7
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: &4635000 !ruby/object:Gem::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: *4635000
24
+ version_requirements: *15237780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &4633160 !ruby/object:Gem::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: *4633160
35
+ version_requirements: *15303120
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &4594820 !ruby/object:Gem::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: *4594820
46
+ version_requirements: *15300780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &4591660 !ruby/object:Gem::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: *4591660
57
+ version_requirements: *15298840
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &4588540 !ruby/object:Gem::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: *4588540
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: -469860734459383897
104
+ hash: -4350909105218756356
105
105
  required_rubygems_version: !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements: