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
-
.config ⇒ Object
:nodoc:.
- .digest(obj) ⇒ Object
-
.klass_name(obj) ⇒ Object
:nodoc:.
-
.method_delimiter(obj) ⇒ Object
:nodoc:.
-
.method_signature(obj, method_id) ⇒ Object
:nodoc:.
- .resolve_cache_key(obj) ⇒ Object
Class Method Details
.config ⇒ Object
: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 |