Class: ActiveRecord::TableMetadata

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

Overview

:nodoc:

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(klass, arel_table) ⇒ TableMetadata

Returns a new instance of TableMetadata.



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

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

Instance Attribute Details

#arel_tableObject (readonly)

Returns the value of attribute arel_table.



63
64
65
# File 'lib/active_record/table_metadata.rb', line 63

def arel_table
  @arel_table
end

Instance Method Details

#associated_table(table_name) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/active_record/table_metadata.rb', line 26

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

  if !reflection && table_name == arel_table.name
    return self
  end

  if reflection
    association_klass = reflection.klass unless reflection.polymorphic?
  elsif block_given?
    association_klass = yield table_name
  end

  if association_klass
    arel_table = association_klass.arel_table
    arel_table = arel_table.alias(table_name) if arel_table.name != table_name
    TableMetadata.new(association_klass, arel_table)
  else
    type_caster = TypeCaster::Connection.new(klass, table_name)
    arel_table = Arel::Table.new(table_name, type_caster: type_caster)
    TableMetadata.new(nil, arel_table)
  end
end

#associated_with(table_name) ⇒ Object



22
23
24
# File 'lib/active_record/table_metadata.rb', line 22

def associated_with(table_name)
  klass&._reflect_on_association(table_name)
end

#has_column?(column_name) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/active_record/table_metadata.rb', line 18

def has_column?(column_name)
  klass&.columns_hash&.key?(column_name)
end

#predicate_builderObject



55
56
57
58
59
60
61
# File 'lib/active_record/table_metadata.rb', line 55

def predicate_builder
  if klass
    klass.predicate_builder.with(self)
  else
    PredicateBuilder.new(self)
  end
end

#primary_keyObject



10
11
12
# File 'lib/active_record/table_metadata.rb', line 10

def primary_key
  klass&.primary_key
end

#reflect_on_aggregation(aggregation_name) ⇒ Object Also known as: aggregated_with?



50
51
52
# File 'lib/active_record/table_metadata.rb', line 50

def reflect_on_aggregation(aggregation_name)
  klass&.reflect_on_aggregation(aggregation_name)
end

#type(column_name) ⇒ Object



14
15
16
# File 'lib/active_record/table_metadata.rb', line 14

def type(column_name)
  arel_table.type_for_attribute(column_name)
end