Module: ActiveRecord::VirtualAttributes::VirtualArel::ClassMethods

Defined in:
lib/active_record/virtual_attributes/virtual_arel.rb

Instance Method Summary collapse

Instance Method Details

#arel_for_virtual_attribute(column_name, table) ⇒ Nil|Arel::Nodes::Grouping

private api

Returns:

  • (Nil|Arel::Nodes::Grouping)

    for virtual attributes:

    returns the arel for the column
    

    for non sql friendly virtual attributes:

    returns nil
    


93
94
95
96
97
98
99
100
101
102
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 93

def arel_for_virtual_attribute(column_name, table) # :nodoc:
  arel_lambda = _virtual_arel[column_name.to_s]
  return unless arel_lambda

  arel = arel_lambda.call(table)
  arel = Arel::Nodes::Grouping.new(arel) unless arel.kind_of?(Arel::Nodes::Grouping)
  arel.name = column_name
  arel.relation = table
  arel
end

#arel_tableObject

ActiveRecord::Core 6.1



72
73
74
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 72

def arel_table
  @arel_table ||= ArelTableProxy.new(table_name, :klass => self)
end

#attribute_supported_by_sql?(name) ⇒ Boolean

supported by sql if any are true:

  • it is an attribute alias

  • it is an attribute that is non virtual

  • it is an attribute that is virtual and has arel defined

Returns:

  • (Boolean)


80
81
82
83
84
# File 'lib/active_record/virtual_attributes/virtual_arel.rb', line 80

def attribute_supported_by_sql?(name)
  load_schema
  try(:attribute_alias?, name) ||
    (has_attribute?(name) && (!virtual_attribute?(name) || !!_virtual_arel[name.to_s]))
end