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 handlers which will try to check if serialized object fits for preloading using this handler

Returns:

  • (Array)

    Registered preload adapters for different types of initial records



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

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