class CachedSerializer::AttrSerializer
Attributes
attr_name[RW]
expires_in[RW]
recompute[RW]
recompute_ifs[RW]
Public Class Methods
cache_key(subject, attr_name)
click to toggle source
# File lib/cached_serializer/attr_serializer.rb, line 6 def cache_key(subject, attr_name) "cached_serializer:#{subject.class.model_name.name.underscore}:#{subject.id}:#{attr_name}" end
new(attr_name, recompute_ifs = nil, expires_in = nil, &recompute)
click to toggle source
# File lib/cached_serializer/attr_serializer.rb, line 11 def initialize(attr_name, recompute_ifs = nil, expires_in = nil, &recompute) self.attr_name = attr_name self.recompute_ifs = [recompute_ifs].flatten.compact self.expires_in = expires_in self.recompute = recompute || proc { |subj| subj.send(attr_name.to_sym) } end
Public Instance Methods
serialize_for(subject)
click to toggle source
# File lib/cached_serializer/attr_serializer.rb, line 18 def serialize_for(subject) { attr_name.to_sym => serialized_value_for(subject) } end
Private Instance Methods
serialized_value_for(subject)
click to toggle source
# File lib/cached_serializer/attr_serializer.rb, line 24 def serialized_value_for(subject) should_recompute = recompute_ifs.any? { |recompute_if| recompute_if.call(subject) } cache_key = self.class.cache_key(subject, attr_name) Rails.cache.fetch(cache_key, expires_in: expires_in, force: should_recompute) do recompute.call(subject) end end