Sha256: aa3f6e5fb8c51b9662e352350dc9b1b8e6aca45db50ebc647593514f38a4eb6a

Contents?: true

Size: 797 Bytes

Versions: 3

Compression:

Stored size: 797 Bytes

Contents

# frozen_string_literal: true

module N1Loader
  # Loader that performs the loading.
  #
  # Subclasses must define +perform+ method that accepts single argument
  # and returns hash where key is the element and value is what we want to load.
  class Loader
    def initialize(elements)
      @elements = elements
    end

    def perform(_elements)
      raise NotImplemented, "Subclasses have to implement the method"
    end

    def loaded
      @loaded ||= perform(elements)
    end

    def preloaded_records
      @preloaded_records ||= loaded.values
    end

    def for(element)
      raise NotLoaded, "The data was not preloaded for the given element" unless elements.include?(element)

      loaded.compare_by_identity[element]
    end

    private

    attr_reader :elements
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
n1_loader-0.1.2 lib/n1_loader/core/loader.rb
n1_loader-0.1.1 lib/n1_loader/loader.rb
n1_loader-0.1.0 lib/n1_loader/loader.rb