class Babik::QuerySet::Projection

Manages the projection of a SELECT QuerySet

Public Class Methods

new(model, fields) click to toggle source

Constructs a projection @param model [ActiveRecord::Base] model the projection is based on. @param fields [Array] array of fields that will be projected.

# File lib/babik/queryset/components/projection.rb, line 15
def initialize(model, fields)
  @fields = []
  @fields_hash = {}
  fields.each do |field|
    new_field = ProjectedField.new(model, field)
    @fields << new_field
    @fields_hash[new_field.alias.to_sym] = new_field
  end
end

Public Instance Methods

apply_transforms(result_set) click to toggle source
# File lib/babik/queryset/components/projection.rb, line 25
def apply_transforms(result_set)
  result_set.map do |record|
    record.symbolize_keys!
    transformed_record = {}
    record.each do |field, value|
      transform = @fields_hash[field].transform
      transformed_record[field] = if transform
                                    transform.call(value)
                                  else
                                    value
                                  end
    end
    transformed_record
  end
end
sql() click to toggle source

Return sql of the fields to project. Does not include SELECT. @return [SQL] SQL code for fields to select in SELECT.

# File lib/babik/queryset/components/projection.rb, line 44
def sql
  @fields.map(&:sql).join(', ')
end