mongoid-semaphore 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.5
1
+ 0.0.6
@@ -0,0 +1,49 @@
1
+ require 'socket'
2
+
3
+ module Mongoid
4
+ module Lock
5
+
6
+ def reset_lock!
7
+ self.update_attributes!({:sema_count => __semaphore_initial_count, :used_by => nil})
8
+ end
9
+
10
+ def lock_acquire
11
+ self.sema_down
12
+ if (self.sema_ready?)
13
+ self.set(:used_by, "#{Socket.hostname}:#{Process.pid}")
14
+ else
15
+ self.sema_up
16
+ raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count, "Lock in Use! (#{self.used_by})")
17
+ end
18
+ end
19
+
20
+ def lock_release
21
+ if (self.used_by == "#{Socket.hostname}:#{Process.pid}")
22
+ self.sema_up
23
+ self.set(:used_by, nil)
24
+ end
25
+ end
26
+
27
+
28
+ def synchronized(&block)
29
+ self.lock_acquire
30
+ begin
31
+ block.call()
32
+ ensure
33
+ self.lock_release
34
+ end
35
+ end
36
+
37
+ def try_synchronized(&try_block)
38
+ return false unless self.sema_ready?
39
+ begin
40
+ self.synchronized do
41
+ try_block.call()
42
+ end
43
+ return true
44
+ rescue Mongoid::Semaphore::UnsynchronizedAccess => ua
45
+ return false
46
+ end
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,24 @@
1
+ require 'mongoid/semaphore'
2
+
3
+ module Mongoid
4
+ module Lock
5
+ extends Mongoid::Semaphore
6
+
7
+ # => Volatile Access, Reload to Ensure state
8
+ def used_by
9
+ self.save
10
+ self.reload
11
+ return super
12
+ end
13
+
14
+ def self.included(base)
15
+ base.class_eval do
16
+ include Mongoid::Semaphore
17
+ default_sema_count 1
18
+ field :used_by, :type => String, :default => nil
19
+ end
20
+ end
21
+ end
22
+ end
23
+
24
+ require 'mongoid/lock/synch_methods'
@@ -1,31 +1,38 @@
1
- require 'socket'
2
-
3
1
  module Mongoid
4
2
  module Semaphore
5
3
  def reset_semaphore!
6
- self.update_attributes!({:sema_count => 1, :used_by => nil})
4
+ self.update_attributes!({:sema_count => __semaphore_initial_count})
5
+ end
6
+
7
+ def sema_up
8
+ self.inc(:sema_count, 1)
9
+ end
10
+
11
+ def sema_down
12
+ self.dec(:sema_count, 1)
13
+ end
14
+
15
+ def sema_ready?
16
+ self.save()
17
+ self.reload()
18
+ return (self.sema_count >= 0)
7
19
  end
8
20
 
9
21
  def synchronized(&block)
10
22
  begin
11
- self.dec(:sema_count, 1)
12
- if (self.sema_count == 0)
13
- begin
14
- self.set(:used_by, "#{Socket.gethostname}:#{Process.pid}")
15
- block.call(self)
16
- ensure
17
- self.set(:used_by, nil)
18
- end
23
+ self.sema_down
24
+ if (self.sema_ready?)
25
+ block.call()
19
26
  else
20
- raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count, "Semaphore in Use! (#{self.used_by})")
27
+ raise Mongoid::Semaphore::UnsynchronizedAccess.new(self.sema_count)
21
28
  end
22
29
  ensure
23
- self.inc(:sema_count, 1)
30
+ self.sema_up
24
31
  end
25
32
  end
26
33
 
27
34
  def try_synchronized(&try_block)
28
- return false unless self.sema_count == 1
35
+ return false unless self.sema_ready?
29
36
  begin
30
37
  self.synchronized do
31
38
  try_block.call()
@@ -23,12 +23,6 @@ module Mongoid
23
23
  self.reload
24
24
  return super
25
25
  end
26
- # => Volatile Value, Refresh Before Returning
27
- def used_by
28
- self.save()
29
- self.reload
30
- return super
31
- end
32
26
  #------------------------------------------------------------------------------
33
27
  # => Inclusion hook. Adds fields, and default attributes
34
28
  #------------------------------------------------------------------------------
@@ -42,8 +36,6 @@ module Mongoid
42
36
  base.extend(Mongoid::Semaphore::ClassMethods)
43
37
  # => Semaphore Counter
44
38
  field :sema_count, :type => Integer, :default => lambda { __semaphore_initial_count }
45
- # => Semaphore is currently held by "<hostname>:<pid>" || nil
46
- field :used_by, :type => String, :default => nil
47
39
  end
48
40
  end
49
41
  end
@@ -6,10 +6,12 @@ if (defined?(Rails) and Rails.version.to_i > 3)
6
6
  railtie_name :"mongoid-semaphore"
7
7
  initializer "mongoid-semaphore.load_dependencies" do
8
8
  require 'mongoid/semaphore'
9
+ require 'mongoid/lock'
9
10
  end
10
11
  end
11
12
  end
12
13
  end
13
14
  else
14
15
  require 'mongoid/semaphore'
16
+ require 'mongoid/lock'
15
17
  end
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "mongoid-semaphore"
8
- s.version = "0.0.5"
8
+ s.version = "0.0.6"
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"]
@@ -24,6 +24,8 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/mongoid-semaphore.rb",
27
+ "lib/mongoid/lock.rb",
28
+ "lib/mongoid/lock/synch_methods.rb",
27
29
  "lib/mongoid/semaphore.rb",
28
30
  "lib/mongoid/semaphore/class_methods.rb",
29
31
  "lib/mongoid/semaphore/sync_methods.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-semaphore
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
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: &18269920 !ruby/object:Gem::Requirement
16
+ requirement: &15839100 !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: *18269920
24
+ version_requirements: *15839100
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: shoulda
27
- requirement: &18269020 !ruby/object:Gem::Requirement
27
+ requirement: &15838160 !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: *18269020
35
+ version_requirements: *15838160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &18268040 !ruby/object:Gem::Requirement
38
+ requirement: &15835940 !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: *18268040
46
+ version_requirements: *15835940
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: jeweler
49
- requirement: &18267100 !ruby/object:Gem::Requirement
49
+ requirement: &15834320 !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: *18267100
57
+ version_requirements: *15834320
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rcov
60
- requirement: &18266540 !ruby/object:Gem::Requirement
60
+ requirement: &15832960 !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: *18266540
68
+ version_requirements: *15832960
69
69
  description: Adds Semaphore-like behaviors to a Mongoid::Document instance
70
70
  email: jp@jibe.com
71
71
  executables: []
@@ -81,6 +81,8 @@ files:
81
81
  - Rakefile
82
82
  - VERSION
83
83
  - lib/mongoid-semaphore.rb
84
+ - lib/mongoid/lock.rb
85
+ - lib/mongoid/lock/synch_methods.rb
84
86
  - lib/mongoid/semaphore.rb
85
87
  - lib/mongoid/semaphore/class_methods.rb
86
88
  - lib/mongoid/semaphore/sync_methods.rb
@@ -102,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
104
  version: '0'
103
105
  segments:
104
106
  - 0
105
- hash: -2512375046165772832
107
+ hash: 1476559913060575075
106
108
  required_rubygems_version: !ruby/object:Gem::Requirement
107
109
  none: false
108
110
  requirements: