Sha256: ee4b7de38054f9484f28119bab5d4458027ddb38090abf1439898b2dba922ba1

Contents?: true

Size: 971 Bytes

Versions: 5

Compression:

Stored size: 971 Bytes

Contents

# frozen_string_literal: true

module Torque
  module PostgreSQL
    module Associations
      module Preloader
        module LoaderQuery
          def foreign_column
            @foreign_column ||= scope.columns_hash[association_key_name.to_s]
          end

          def load_records_for_keys(keys, &block)
            condition = query_condition_for(keys)
            scope.where(condition).load(&block)
          end

          def query_condition_for(keys)
            if connected_through_array?
              value = scope.cast_for_condition(foreign_column, keys.to_a)
              scope.table[association_key_name].overlaps(value)
            else
              { association_key_name => keys }
            end
          end

          def connected_through_array?
            foreign_column.array?
          end
        end

        ::ActiveRecord::Associations::Preloader::Association::LoaderQuery
          .prepend(LoaderQuery)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
torque-postgresql-3.3.0 lib/torque/postgresql/associations/preloader/loader_query.rb
torque-postgresql-3.2.2 lib/torque/postgresql/associations/preloader/loader_query.rb
torque-postgresql-3.2.1 lib/torque/postgresql/associations/preloader/loader_query.rb
torque-postgresql-3.2.0 lib/torque/postgresql/associations/preloader/loader_query.rb
torque-postgresql-3.1.0 lib/torque/postgresql/associations/preloader/loader_query.rb