Module: LockMethod

Defined in:
lib/lock_method.rb,
lib/lock_method/lock.rb,
lib/lock_method/config.rb,
lib/lock_method/version.rb,
lib/lock_method/default_storage_client.rb

Overview

See the README.rdoc for more info!

Defined Under Namespace

Modules: ClassMethods, InstanceMethods Classes: Config, DefaultStorageClient, Lock, Locked

Constant Summary collapse

CONFIG_MUTEX =
::Mutex.new
VERSION =
"0.5.4"

Class Method Summary collapse

Class Method Details

.configObject

:nodoc:



21
22
23
24
25
# File 'lib/lock_method.rb', line 21

def LockMethod.config #:nodoc:
  @config || CONFIG_MUTEX.synchronize do
    @config ||= Config.new
  end
end

.digest(obj) ⇒ Object



61
62
63
# File 'lib/lock_method.rb', line 61

def LockMethod.digest(obj)
  ::Digest::SHA1.hexdigest ::Marshal.dump(resolve_lock(obj))
end

.klass_name(obj) ⇒ Object



31
32
33
# File 'lib/lock_method.rb', line 31

def LockMethod.klass_name(obj)
  (obj.is_a?(::Class) or obj.is_a?(::Module)) ? obj.to_s : obj.class.to_s
end

.method_delimiter(obj) ⇒ Object



35
36
37
# File 'lib/lock_method.rb', line 35

def LockMethod.method_delimiter(obj)
  (obj.is_a?(::Class) or obj.is_a?(::Module)) ? '.' : '#'
end

.method_signature(obj, method_id) ⇒ Object



39
40
41
# File 'lib/lock_method.rb', line 39

def LockMethod.method_signature(obj, method_id)
  [ klass_name(obj), method_id ].join method_delimiter(obj)
end

.original_method_id(method_id) ⇒ Object



27
28
29
# File 'lib/lock_method.rb', line 27

def LockMethod.original_method_id(method_id)
  "_unlocked_#{method_id}"
end

.resolve_lock(obj) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/lock_method.rb', line 43

def LockMethod.resolve_lock(obj)
  case obj
  when ::Array
    obj.map do |v|
      resolve_lock v
    end
  when ::Hash
    obj.inject({}) do |memo, (k, v)|
      kk = resolve_lock k
      vv = resolve_lock v
      memo[kk] = vv
      memo
    end
  else
    obj.respond_to?(:as_lock) ? [obj.class.name, obj.as_lock] : obj
  end
end