Class: Serega::SeregaPlugins::ActiverecordPreloads::Preloader

Inherits:
Object
  • Object
show all
Defined in:
lib/serega/plugins/activerecord_preloads/lib/preloader.rb

Overview

Handles preloads for different types of initial records

Class Method Summary collapse

Class Method Details

.handlersArray

Returns Registered preload adapters for different types of initial records.

Returns:

  • (Array)

    Registered preload adapters for different types of initial records



26
27
28
29
30
31
32
33
# File 'lib/serega/plugins/activerecord_preloads/lib/preloader.rb', line 26

def handlers
  @handlers ||= [
    ActiverecordRelation,
    ActiverecordObject,
    ActiverecordArray,
    ActiverecordEnumerator
  ].freeze
end

.preload(object, preloads) ⇒ Object

Preloads associations to records

Parameters:

  • object (Object)

    record(s)

  • preloads (Hash)

    associations names

Returns:

  • (Object)

    provided object with preloaded associations

Raises:



16
17
18
19
20
21
22
23
# File 'lib/serega/plugins/activerecord_preloads/lib/preloader.rb', line 16

def preload(object, preloads)
  return object if object.nil? || (object.is_a?(Array) && object.empty?) || preloads.empty?

  preload_handler = handlers.find { |handler| handler.fit?(object) }
  raise SeregaError, "Can't preload #{preloads.inspect} to #{object.inspect}" unless preload_handler

  preload_handler.preload(object, preloads)
end