lock_method 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -21,7 +21,13 @@ Then you can do
21
21
 
22
22
  Just in case, you can clear them
23
23
 
24
- my_blog.clear_lock :get_latest_entries
24
+ my_blog.clear_method_lock :get_latest_entries
25
+
26
+ == One lock per method
27
+
28
+ lock_method ignores arguments when locking. So if you call Foo.bar(:a), calls to Foo.bar(:b) will be locked until the first call finishes.
29
+
30
+ Maybe future versions will support this.
25
31
 
26
32
  == Configuration (and supported cache clients)
27
33
 
@@ -1,3 +1,4 @@
1
+ require 'cache'
1
2
  require 'singleton'
2
3
  module LockMethod
3
4
  # Here's where you set config options.
@@ -28,8 +29,9 @@ module LockMethod
28
29
  def storage=(raw_client_or_nil)
29
30
  if raw_client_or_nil.nil?
30
31
  @storage = nil
32
+ elsif raw_client_or_nil.is_a?(::Cache)
33
+ @storage = raw_client_or_nil
31
34
  else
32
- require 'cache'
33
35
  @storage = ::Cache.new raw_client_or_nil
34
36
  end
35
37
  end
@@ -1,8 +1,8 @@
1
1
  module LockMethod
2
2
  class Lock #:nodoc: all
3
3
  class << self
4
- def find(method_signature)
5
- if hsh = Config.instance.storage.get(method_signature)
4
+ def find(cache_key)
5
+ if hsh = Config.instance.storage.get(cache_key)
6
6
  new hsh
7
7
  end
8
8
  end
@@ -59,7 +59,7 @@ module LockMethod
59
59
  end
60
60
 
61
61
  def delete
62
- Config.instance.storage.delete method_signature
62
+ Config.instance.storage.delete cache_key
63
63
  end
64
64
 
65
65
  def save
@@ -68,7 +68,7 @@ module LockMethod
68
68
  self.thread_object_id
69
69
  self.expiry
70
70
  # --
71
- Config.instance.storage.set method_signature, to_hash, ttl
71
+ Config.instance.storage.set cache_key, to_hash, ttl
72
72
  end
73
73
 
74
74
  def to_hash
@@ -79,11 +79,15 @@ module LockMethod
79
79
  end
80
80
 
81
81
  def locked?
82
- if existing_lock = Lock.find(method_signature)
82
+ if existing_lock = Lock.find(cache_key)
83
83
  existing_lock.in_force?
84
84
  end
85
85
  end
86
86
 
87
+ def cache_key
88
+ [ 'LockMethod', 'Lock', method_signature ].join ','
89
+ end
90
+
87
91
  def in_force?
88
92
  not expired? and process_and_thread_still_exist?
89
93
  end
@@ -1,3 +1,3 @@
1
1
  module LockMethod
2
- VERSION = "0.0.2"
2
+ VERSION = "0.1.0"
3
3
  end
data/lib/lock_method.rb CHANGED
@@ -13,13 +13,13 @@ module LockMethod
13
13
  Config.instance
14
14
  end
15
15
 
16
- # All Objects, including instances and Classes, get the <tt>#clear_lock</tt> method.
16
+ # All Objects, including instances and Classes, get the <tt>#clear_method_lock</tt> method.
17
17
  module InstanceMethods
18
18
  # Clear the lock for a particular method.
19
19
  #
20
20
  # Example:
21
- # my_blog.clear_lock :get_latest_entries
22
- def clear_lock(method_id)
21
+ # my_blog.clear_method_lock :get_latest_entries
22
+ def clear_method_lock(method_id)
23
23
  lock = ::LockMethod::Lock.new :obj => self, :method_id => method_id
24
24
  lock.delete
25
25
  end
data/test/shared_tests.rb CHANGED
@@ -116,7 +116,7 @@ module SharedTests
116
116
  end
117
117
 
118
118
  # but now we clear the lock
119
- new_instance_of_my_blog.clear_lock :get_latest_entries
119
+ new_instance_of_my_blog.clear_method_lock :get_latest_entries
120
120
  assert_nothing_raised do
121
121
  new_instance_of_my_blog.get_latest_entries
122
122
  end
@@ -136,7 +136,7 @@ module SharedTests
136
136
  end
137
137
 
138
138
  # but now we clear the lock
139
- Blog2.clear_lock :get_latest_entries
139
+ Blog2.clear_method_lock :get_latest_entries
140
140
  assert_nothing_raised do
141
141
  Blog2.get_latest_entries
142
142
  end
metadata CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 2
10
- version: 0.0.2
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Seamus Abshere
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-17 00:00:00 -06:00
18
+ date: 2011-02-23 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency