Class: ApiQueryLanguage::ActiveRecord::Fields::MappingToColumn

Inherits:
Object
  • Object
show all
Defined in:
lib/api_query_language/active_record/fields/mapping_to_column.rb

Defined Under Namespace

Classes: ColumnInfo, Mapping

Instance Method Summary collapse

Constructor Details

#initialize(root_model, current_relation, field_to_attribute_mappings) ⇒ MappingToColumn

Returns a new instance of MappingToColumn.



12
13
14
15
16
# File 'lib/api_query_language/active_record/fields/mapping_to_column.rb', line 12

def initialize(root_model, current_relation, field_to_attribute_mappings)
  @current_relation = current_relation
  @root_model = root_model
  @field_to_attribute_mappings = field_to_attribute_mappings
end

Instance Method Details

#map_field(field) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/api_query_language/active_record/fields/mapping_to_column.rb', line 18

def map_field(field)
  raw_mapping = @field_to_attribute_mappings[field.to_sym]
  value_transform = raw_mapping.respond_to?(:transform) ? raw_mapping.transform : nil
  allowed_values = raw_mapping.respond_to?(:allowed_values) ? raw_mapping.allowed_values : nil

  column_info = table_column_for_field!(fetch_field_mapping!(field))
  relation = @current_relation
  if column_info.is_a?(ColumnInfo)
    result = apply_joins!(column_info, relation)
    Mapping.new(column: result.column, relation: result.relation, value_transform:, allowed_values:)
  else
    Mapping.new(column: @root_model.arel_table[column_info], relation:, value_transform:, allowed_values:)
  end
end