Class: Ultracache::HasCachedAttribute

Inherits:
Relationship show all
Defined in:
lib/ultracache/relationship/has_cached_attribute.rb

Instance Attribute Summary

Attributes inherited from Relationship

#name

Instance Method Summary collapse

Methods inherited from Relationship

#associated_class, #self_class

Constructor Details

#initialize(name, block, options = {}) ⇒ HasCachedAttribute

Returns a new instance of HasCachedAttribute.



3
4
5
6
7
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 3

def initialize(name, block, options={})
  super(name, options)
  @serializer_method = options[:serializer]
  @serializing_block = block if block_given?
end

Instance Method Details

#destroy_cache(obj) ⇒ Object

Destroys cache from storage



44
45
46
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 44

def destroy_cache(obj)
  storage.del(key(obj))
end

#key(obj) ⇒ Object



9
10
11
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 9

def key(obj)
  "#{@self_class.to_s.underscore}:#{obj.id}:#{@name}"
end

#read_cache(obj, options = {}) ⇒ Object

Read stored cache from storage. If the cache is not found, it tries to save corresponding cache to storage and return its value



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 31

def read_cache(obj, options = {})
  k = key(obj)

  ret = storage.get(k) || save_cache(obj)

  if options[:deserialized]
    serializer.deserialize(ret)
  else
    ret
  end
end

#save_cache(obj) ⇒ Object

Save serialized attribute to cache. If serializer method or serialization block is not given, Ultracache tries to serialize the object by serializeing hash returned by its ‘as_json` method.



16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 16

def save_cache(obj)
  value = if @serializer_method
    serializer.serialize(obj.send(@serializer_method))
  elsif @serializing_block
    serializer.serialize(@serializing_block.call(obj))
  else
    serializer.serialize(obj.as_json)
  end

  storage.set(key(obj), value)
  value
end

#update_cache(obj) ⇒ Object

Updates value of existing cache. Its behavior is same with that of ‘save_cache`.



50
51
52
# File 'lib/ultracache/relationship/has_cached_attribute.rb', line 50

def update_cache(obj)
  save_cache(obj)
end