Module: Pipeloader::FieldSelects

Defined in:
lib/pipeloader/field_exact.rb

Overview

Monkey-patches ‘field` to (a) accept the `selects:` escape hatch and (b) attach the projection extension when this field’s type has opted in.

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#pipeloader_selectsObject (readonly)

Returns the value of attribute pipeloader_selects.



29
30
31
# File 'lib/pipeloader/field_exact.rb', line 29

def pipeloader_selects
  @pipeloader_selects
end

Instance Method Details

#initialize(*args, selects: nil, owner: nil, extensions: [], **kwargs, &block) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/pipeloader/field_exact.rb', line 31

def initialize(*args, selects: nil, owner: nil, extensions: [], **kwargs, &block)
  @pipeloader_selects = selects && Array(selects).map(&:to_s)
  # At most one extension: field-exact (projects + fuses) wins over auto-fuse
  # (whole-row fuses only). Both bail to plain resolution for non-associations.
  if Pipeloader.field_exact || (owner.respond_to?(:pipeloader_field_exact?) && owner.pipeloader_field_exact?)
    extensions = extensions + [ProjectionExtension]
  elsif Pipeloader.auto_fuse
    extensions = extensions + [FusionExtension]
  end
  super(*args, owner: owner, extensions: extensions, **kwargs, &block)
end