Sha256: db7546c91660aaab0efb302ad674e7200e9a5c672862e6e480aa99fec7dbc5b8
Contents?: true
Size: 1.19 KB
Versions: 1
Compression:
Stored size: 1.19 KB
Contents
# frozen_string_literal: true module Goldiloader module CustomPreloads def initialize super @custom_preloads = nil end def preloaded(model, cache_name:, key:, &block) unless preloaded?(cache_name) ids = models.map do |record| record.public_send(key) end # We're using instance_exec instead of a simple yield to make sure that the # given block does not have any references to the model instance as this might # lead to unexpected results. The block will be executed in the context of the # class of the model instead. block_context = models.first.class preloaded_hash = block_context.instance_exec(ids, &block) store_preloaded(cache_name, preloaded_hash) end fetch_preloaded(cache_name, model, key: key) end private def store_preloaded(cache_name, preloaded_hash) @custom_preloads ||= {} @custom_preloads[cache_name] = preloaded_hash end def fetch_preloaded(cache_name, instance, key:) @custom_preloads&.dig(cache_name, instance.public_send(key)) end def preloaded?(cache_name) @custom_preloads&.key?(cache_name) end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
goldiloader-5.1.0 | lib/goldiloader/custom_preloads.rb |