Sha256: 9e4d07bf23c23a761e444d84003da2139ddb5bd84726cd2f4520a97a36221cf2

Contents?: true

Size: 1.24 KB

Versions: 15

Compression:

Stored size: 1.24 KB

Contents

module JitPreloader
  class Preloader < ActiveRecord::Associations::Preloader

    attr_accessor :records

    def self.attach(records)
      new.tap do |loader|
        loader.records = records.dup
        records.each do |record|
          record.jit_preloader = loader
        end
      end
    end

    def jit_preload(association)
      # It is possible that the records array has multiple different classes (think single table inheritance).
      # Thus, it is possible that some of the records don't have an association.
      records_with_association = records.reject{|r| r.class.reflect_on_association(association).nil? }
      preload records_with_association, association
    end

    # We do not want the jit_preloader to be dumpable
    # If you dump a ActiveRecord::Base object that has a jit_preloader instance variable
    # you will also end up dumping all of the records the preloader has reference to.
    # Imagine getting N objects from a query and dumping each one of those into a cache
    # each object would dump N+1 objects which means you'll end up storing O(N^2) memory. Thats no good.
    # So instead, we will just nullify the jit_preloader on load
    def _dump(level)
      ""
    end

    def self._load(args)
      nil
    end

  end
end

Version data entries

15 entries across 15 versions & 1 rubygems

Version Path
jit_preloader-1.0.4 lib/jit_preloader/preloader.rb
jit_preloader-1.0.3 lib/jit_preloader/preloader.rb
jit_preloader-1.0.2 lib/jit_preloader/preloader.rb
jit_preloader-1.0.1 lib/jit_preloader/preloader.rb
jit_preloader-1.0.0 lib/jit_preloader/preloader.rb
jit_preloader-0.3.0 lib/jit_preloader/preloader.rb
jit_preloader-0.2.5 lib/jit_preloader/preloader.rb
jit_preloader-0.2.4 lib/jit_preloader/preloader.rb
jit_preloader-0.2.3 lib/jit_preloader/preloader.rb
jit_preloader-0.2.2 lib/jit_preloader/preloader.rb
jit_preloader-0.2.1 lib/jit_preloader/preloader.rb
jit_preloader-0.2.0 lib/jit_preloader/preloader.rb
jit_preloader-0.1.0 lib/jit_preloader/preloader.rb
jit_preloader-0.0.8 lib/jit_preloader/preloader.rb
jit_preloader-0.0.7 lib/jit_preloader/preloader.rb