class QueryHelper::ColumnMap

Attributes

aggregate[RW]
alias_name[RW]
sql_expression[RW]

Public Class Methods

create_column_mappings(custom_mappings:, query:, model:) click to toggle source
# File lib/query_helper/column_map.rb, line 6
def self.create_column_mappings(custom_mappings:, query:, model:)
  parser = SqlParser.new(query)
  maps = create_from_hash(custom_mappings)

  parser.find_aliases.each do |m|
    maps << m if maps.select{|x| x.alias_name == m.alias_name}.empty?
  end

  model.attribute_names.each do |attribute|
    if maps.select{|x| x.alias_name == attribute}.empty?
      maps << ColumnMap.new(alias_name: attribute, sql_expression: "#{model.table_name.pluralize}.#{attribute}")
    end
  end

  maps
end
create_from_hash(hash) click to toggle source
# File lib/query_helper/column_map.rb, line 23
def self.create_from_hash(hash)
  map = []
  hash.each do |k,v|
    alias_name = k
    aggregate = false
    if v.class == String
      sql_expression = v
    elsif v.class == Hash
      sql_expression = v[:sql_expression]
      aggregate = v[:aggregate]
    end
    map << self.new(
      alias_name: alias_name,
      sql_expression: sql_expression,
      aggregate: aggregate
    )
  end
  map
end
new( alias_name:, sql_expression:, aggregate: false ) click to toggle source
# File lib/query_helper/column_map.rb, line 45
def initialize(
  alias_name:,
  sql_expression:,
  aggregate: false
)
  @alias_name = alias_name
  @sql_expression = sql_expression
  @aggregate = aggregate
end