Sha256: 473086d3065556db40db1bcbe0c9158464108475c1e5aed5e4ba15baefa88662

Contents?: true

Size: 877 Bytes

Versions: 3

Compression:

Stored size: 877 Bytes

Contents

# frozen_string_literal: true

module N1Loader
  # Preloader that lazily preloads data to every element.
  #
  # It supports multiple keys.
  #
  # It supports elements that have different loaders under the same key.
  # It will properly preload data to each of the element of the similar group.
  class Preloader
    attr_reader :elements

    def initialize(elements)
      @elements = elements
    end

    def preload(*keys)
      keys.flatten(1).flat_map do |key|
        elements
          .group_by { |element| element.class.n1_loader(key) }
          .map do |loader_class, grouped_elements|
            loader_collection = N1Loader::LoaderCollection.new(loader_class, grouped_elements)
            grouped_elements.each { |grouped_element| grouped_element.n1_loader_set(key, loader_collection) }
            loader_collection
          end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
n1_loader-1.4.0 lib/n1_loader/core/preloader.rb
n1_loader-1.3.0 lib/n1_loader/core/preloader.rb
n1_loader-1.2.0 lib/n1_loader/core/preloader.rb