Class: ActiveRecord::TableMetadata

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record/table_metadata.rb

Overview

:nodoc:

Instance Method Summary collapse

Constructor Details

#initialize(klass, arel_table, association = nil) ⇒ TableMetadata

Returns a new instance of TableMetadata.



6
7
8
9
10
# File 'lib/active_record/table_metadata.rb', line 6

def initialize(klass, arel_table, association = nil)
  @klass = klass
  @arel_table = arel_table
  @association = association
end

Instance Method Details

#arel_attribute(column_name) ⇒ Object



24
25
26
27
28
29
30
# File 'lib/active_record/table_metadata.rb', line 24

def arel_attribute(column_name)
  if klass
    klass.arel_attribute(column_name, arel_table)
  else
    arel_table[column_name]
  end
end

#associated_table(table_name) ⇒ Object



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/active_record/table_metadata.rb', line 44

def associated_table(table_name)
  association = klass._reflect_on_association(table_name) || klass._reflect_on_association(table_name.singularize)

  if !association && table_name == arel_table.name
    return self
  elsif association && !association.polymorphic?
    association_klass = association.klass
    arel_table = association_klass.arel_table.alias(table_name)
  else
    type_caster = TypeCaster::Connection.new(klass, table_name)
    association_klass = nil
    arel_table = Arel::Table.new(table_name, type_caster: type_caster)
  end

  TableMetadata.new(association_klass, arel_table, association)
end

#associated_with?(association_name) ⇒ Boolean

Returns:

  • (Boolean)


40
41
42
# File 'lib/active_record/table_metadata.rb', line 40

def associated_with?(association_name)
  klass && klass._reflect_on_association(association_name)
end

#polymorphic_association?Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/active_record/table_metadata.rb', line 61

def polymorphic_association?
  association && association.polymorphic?
end

#resolve_column_aliases(hash) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
# File 'lib/active_record/table_metadata.rb', line 12

def resolve_column_aliases(hash)
  # This method is a hot spot, so for now, use Hash[] to dup the hash.
  #   https://bugs.ruby-lang.org/issues/7166
  new_hash = Hash[hash]
  hash.each do |key, _|
    if (key.is_a?(Symbol)) && klass.attribute_alias?(key)
      new_hash[klass.attribute_alias(key)] = new_hash.delete(key)
    end
  end
  new_hash
end

#type(column_name) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/active_record/table_metadata.rb', line 32

def type(column_name)
  if klass
    klass.type_for_attribute(column_name.to_s)
  else
    Type::Value.new
  end
end