module CachedAt::Base::Helpers
Public Instance Methods
cache_key(*includes)
click to toggle source
# File lib/cached_at/helpers.rb, line 32 def cache_key(*includes) if includes.nil? || includes.empty? if cache_versioning "#{model_name.cache_key}/#{id}" else "#{model_name.cache_key}/#{id}@#{cache_version}" end else digest = Digest::MD5.hexdigest(paramaterize_cache_includes(includes)) if cache_versioning "#{model_name.cache_key}/#{id}+#{digest}" else "#{model_name.cache_key}/#{id}+#{digest}@#{cache_version(includes)}" end end end
cache_key_with_version(*includes)
click to toggle source
# File lib/cached_at/helpers.rb, line 49 def cache_key_with_version(*includes) if version = cache_version(*includes) "#{cache_key(*includes)}-#{version}" else cache_key(*includes) end end
cache_version(*includes)
click to toggle source
# File lib/cached_at/helpers.rb, line 57 def cache_version(*includes) timestamp = if includes.empty? try(:cached_at) || try(:cached_at) else timestamp_keys = ['cached_at'] + self.class.cached_at_columns_for_includes(includes) timestamp = timestamp_keys.map { |attr| self[attr]&.to_time }.compact.max end timestamp.utc.to_s(:usec) end
cached_at_columns_for_includes(includes, prefix=nil)
click to toggle source
# File lib/cached_at/helpers.rb, line 14 def cached_at_columns_for_includes(includes, prefix=nil) if includes.is_a?(Array) includes.inject([]) { |s, k| s + cached_at_columns_for_includes(k, prefix) } elsif includes.is_a?(Hash) includes.map { |k, v| value = ["#{prefix}#{k}_cached_at"] if v != true value << cached_at_columns_for_includes(v, "#{prefix}#{k}_") end value }.flatten else ["#{prefix}#{includes}_cached_at"] end end
can_cache?(includes)
click to toggle source
# File lib/cached_at/helpers.rb, line 8 def can_cache?(includes) cache_columns = ['cached_at'] + cached_at_columns_for_includes(includes) (cache_columns - column_names).empty? end
Private Instance Methods
paramaterize_cache_includes(includes, paramaterized_cache_key = nil)
click to toggle source
TODO def association_cache_key(association_name, includes = nil) end
# File lib/cached_at/helpers.rb, line 74 def paramaterize_cache_includes(includes, paramaterized_cache_key = nil) paramaterized_cache_key ||= "" if includes.is_a?(Hash) includes.keys.sort.each_with_index do |key, i| paramaterized_cache_key << ',' unless i == 0 paramaterized_cache_key << key.to_s if includes[key].is_a?(Hash) || includes[key].is_a?(Array) paramaterized_cache_key << "[" paramaterize_cache_includes(includes[key], paramaterized_cache_key) paramaterized_cache_key << "]" elsif includes[key] != true paramaterized_cache_key << "[" paramaterized_cache_key << includes[key].to_s paramaterized_cache_key << "]" end end elsif includes.is_a?(Array) includes.sort.each_with_index do |value, i| paramaterized_cache_key << ',' unless i == 0 if value.is_a?(Hash) || value.is_a?(Array) paramaterize_cache_includes(value, paramaterized_cache_key) else paramaterized_cache_key << value.to_s end end else paramaterized_cache_key << includes.to_s end paramaterized_cache_key end