Sha256: d58354e028d77809cbd6f019e2f4fc00e7e13acd2bbc85f91a6e678c4f60fdd7

Contents?: true

Size: 873 Bytes

Versions: 1

Compression:

Stored size: 873 Bytes

Contents

module Dase
  module PreloaderMethods

    def initialize(klass, owners, reflection, preload_options)
      preload_options = preload_options.reject { |k, _| k == :association }
      @dase_counter_name = preload_options.delete(:as)
      @dase_scope_to_merge = preload_options.delete(:only)
      super(klass, owners, reflection, preload_options)
    end

    def prefixed_foreign_key
      "#{scoped.quoted_table_name}.#{reflection.foreign_key}"
    end

    def preload
      pk = model.primary_key.to_sym
      ids = owners.map(&pk)
      scope = records_for(ids)
      scope = scope.merge(@dase_scope_to_merge) if @dase_scope_to_merge
      counters_hash = scope.count(group: prefixed_foreign_key)
      owners.each do |owner|
        owner.define_singleton_method(@dase_counter_name) do
          counters_hash[owner[pk]] || 0
        end
      end
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dase-3.2.9 lib/dase/preloader_methods.rb