mongoid-semaphore 0.0.5 → 0.0.6

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.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: