Sha256: b302048acdead6536d5e52b105a5500e31d22c1ae18297aa04916b6b993fd826

Contents?: true

Size: 816 Bytes

Versions: 5

Compression:

Stored size: 816 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 = loader_class.new(grouped_elements)
            grouped_elements.each { |grouped_element| grouped_element.n1_loader_set(key, loader) }
            loader
          end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
n1_loader-1.1.0 lib/n1_loader/core/preloader.rb
n1_loader-1.0.0 lib/n1_loader/core/preloader.rb
n1_loader-0.1.2 lib/n1_loader/core/preloader.rb
n1_loader-0.1.1 lib/n1_loader/preloader.rb
n1_loader-0.1.0 lib/n1_loader/preloader.rb