Module: CacheMethod

Defined in:
lib/cache_method.rb,
lib/cache_method/debug.rb,
lib/cache_method/config.rb,
lib/cache_method/version.rb,
lib/cache_method/generation.rb,
lib/cache_method/cached_result.rb

Defined Under Namespace

Modules: ClassMethods, InstanceMethods Classes: CachedResult, Config, Generation

Constant Summary collapse

MUTEX =
::Mutex.new
CACHE_KEY_JOINER =
','
VERSION =
"0.2.7"

Class Method Summary collapse

Class Method Details

.configObject

:nodoc:



12
13
14
15
16
# File 'lib/cache_method.rb', line 12

def CacheMethod.config #:nodoc:
  @config || MUTEX.synchronize do
    @config ||= Config.new
  end
end

.digest(obj) ⇒ Object



55
56
57
# File 'lib/cache_method.rb', line 55

def CacheMethod.digest(obj)
  ::Digest::SHA1.hexdigest ::Marshal.dump(resolve_cache_key(obj))
end

.klass_name(obj) ⇒ Object

:nodoc:



18
19
20
# File 'lib/cache_method.rb', line 18

def CacheMethod.klass_name(obj) #:nodoc:
  (obj.is_a?(::Class) or obj.is_a?(::Module)) ? obj.to_s : obj.class.to_s
end

.method_delimiter(obj) ⇒ Object

:nodoc:



22
23
24
# File 'lib/cache_method.rb', line 22

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

.method_signature(obj, method_id) ⇒ Object

:nodoc:



26
27
28
# File 'lib/cache_method.rb', line 26

def CacheMethod.method_signature(obj, method_id) #:nodoc:
  [ klass_name(obj), method_id ].join method_delimiter(obj)
end

.resolve_cache_key(obj) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/cache_method.rb', line 30

def CacheMethod.resolve_cache_key(obj)
  case obj
  when ::Array
    obj.map do |v|
      resolve_cache_key v
    end
  when ::Hash
    obj.inject({}) do |memo, (k, v)|
      kk = resolve_cache_key k
      vv = resolve_cache_key v
      memo[kk] = vv
      memo
    end
  else
    if obj.respond_to?(:to_cache_key)
      # this is meant to be used sparingly, usually when a proxy class is involved
      obj.to_cache_key
    elsif obj.respond_to?(:as_cache_key)
      [obj.class.name, obj.as_cache_key]
    else
      obj
    end
  end
end