Module: SequelDM::Extensions::SelectFields

Defined in:
lib/sequel_dm/extensions/select_fields.rb

Instance Method Summary collapse

Instance Method Details

#select_fields(fields) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/sequel_dm/extensions/select_fields.rb', line 4

def select_fields(fields)
  if fields.empty?
    if !model.association_reflections.empty?
      eager(model.association_reflections.keys)
    else
      self
    end
  else
    eager_associations = {}
    fields.each do |association, columns|
      next if association == :fields
      if columns && !columns.is_a?(Array)
        columns = get_columns_from_mapper(association)
      end
      if columns
        table_name = model.association_reflections[association][:class].table_name
        columns = columns.map { |column| :"#{table_name}__#{column}___#{column}" }
        eager_associations[association] = proc{|ds| ds.select(*columns) }
      end
    end

    if fields[:fields].is_a?(Array)
      columns = fields[:fields]
    else
      columns = model.mapper.mappings.keys
    end
    columns = columns.map { |column| :"#{model.table_name}__#{column}___#{column}" }
    eager(eager_associations).select(*columns)
  end
end