module Relation::Extended

Public Instance Methods

add_translated_column(column) click to toggle source
# File lib/from_clause_translate/active_record_relation.rb, line 15
def add_translated_column(column)
  (@values[:translated] ||= []) << column
end
add_translated_columns(columns) click to toggle source
# File lib/from_clause_translate/active_record_relation.rb, line 11
def add_translated_columns(columns)
  (@values[:translated] ||= []).concat columns
end
apply_translates() click to toggle source
# File lib/from_clause_translate/active_record_relation.rb, line 19
def apply_translates
  return if @translates_applied || !@values[:translated]

  @translates_applied = true

  columns = translated_columns_build
  return unless columns

  rel = unscoped.select(columns)
  rel.instance_variable_set(:@translates_applied, true)
  replace_plurals_in_projections
  @from_clause = Arel::Nodes::SqlLiteral.new(
    "(#{rel.arel.to_sql}) #{@klass.table_name}"
  )
end
arel(aliases = nil) click to toggle source
Calls superclass method
# File lib/from_clause_translate/active_record_relation.rb, line 4
def arel(aliases = nil)
  arel = super
  apply_translates
  arel.instance_variable_get(:@ctx).source.left = @from_clause if @from_clause
  arel
end
perform_calculation(operation, column_name) click to toggle source
Calls superclass method
# File lib/from_clause_translate/active_record_relation.rb, line 41
def perform_calculation(operation, column_name)
  return super operation, column_name if @without_projections

  rel = spawn
  rel.instance_variable_set(:@without_projections, true)
  rel.add_translated_column column_name if column_name
  rel.perform_calculation operation, column_name
end
replace_plurals_in_projections() click to toggle source
# File lib/from_clause_translate/active_record_relation.rb, line 50
def replace_plurals_in_projections
  @arel.projections.each do |column|
    next unless column.is_a? String

    name = column[0] == '"' ? column[1...-1] : column
    plural = @klass._translation_data.plurals[name.to_sym]
    column.replace plural if plural
  end
end
translated_columns_build() click to toggle source
# File lib/from_clause_translate/active_record_relation.rb, line 35
def translated_columns_build
  FromClauseTranslate::TranslatedColumnsBuilder.new(
    self, @klass, @without_projections
  ).perform
end