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