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