Module: ActiveRecord::Relation::Extended
- Included in:
- ActiveRecord::Relation
- Defined in:
- lib/from_clause_translate/active_record_relation.rb
Instance Method Summary collapse
- #add_translated_column(column) ⇒ Object
- #add_translated_columns(columns) ⇒ Object
- #apply_translates ⇒ Object
- #arel(aliases = nil) ⇒ Object
- #perform_calculation(operation, column_name) ⇒ Object
- #replace_plurals_in_projections ⇒ Object
- #translated_columns_build ⇒ Object
Instance Method Details
#add_translated_column(column) ⇒ Object
15 16 17 |
# File 'lib/from_clause_translate/active_record_relation.rb', line 15 def add_translated_column(column) (@values[:translated] ||= []) << column end |
#add_translated_columns(columns) ⇒ Object
11 12 13 |
# File 'lib/from_clause_translate/active_record_relation.rb', line 11 def add_translated_columns(columns) (@values[:translated] ||= []).concat columns end |
#apply_translates ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# 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) ⇒ Object
4 5 6 7 8 9 |
# 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) ⇒ Object
41 42 43 44 45 46 47 48 |
# 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 ⇒ Object
50 51 52 53 54 55 56 57 58 |
# 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 ⇒ Object
35 36 37 38 39 |
# File 'lib/from_clause_translate/active_record_relation.rb', line 35 def translated_columns_build FromClauseTranslate::TranslatedColumnsBuilder.new( self, @klass, @without_projections ).perform end |