module Autobots::Helpers::Caching

Public Class Methods

new(_, options = {}) click to toggle source
Calls superclass method
# File lib/autobots/helpers/caching.rb, line 6
def initialize(_, options = {})
  super
  self.cache = options[:cache] if options.has_key?(:cache)
end
prepended(klass) click to toggle source
# File lib/autobots/helpers/caching.rb, line 11
def self.prepended(klass)
  klass.class_eval do
    class_attribute :cache
  end
end

Public Instance Methods

data() click to toggle source
Calls superclass method
# File lib/autobots/helpers/caching.rb, line 17
def data
  return @data if defined?(@data)

  if cache
    key_proc = options.fetch(:cache_key) do
      method(:cache_key)
    end
    identifiers = objects.inject({}) do |acc, obj|
      acc[key_proc.call(obj, self)] = obj
      acc
    end

    if options[:force_reload]
      identifiers.each do |key, _|
        cache.delete key
      end
    end

    # misses: { key => obj }
    @data = BulkCacheFetcher.new(cache).fetch(identifiers) do |misses|
      roll_out(misses.values)
    end
  else
    @data = super
  end
  @data
end

Protected Instance Methods

cache_key(object, _) click to toggle source
# File lib/autobots/helpers/caching.rb, line 52
def cache_key(object, _)
  [object.cache_key, *self.serializer_cache_key, 'serializable-hash']
end
serializer_cache_key() click to toggle source
# File lib/autobots/helpers/caching.rb, line 47
def serializer_cache_key
  return @serializer_cache_key if defined?(@serializer_cache_key)
  @serializer_cache_key = [serializer.name, Digest::SHA256.hexdigest(serializer._attributes.keys.to_s + serializer._associations.keys.to_s)[0..12]]
end