Class: LogicalQueryParser::AssocResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/logical_query_parser/assoc_resolver.rb

Instance Method Summary collapse

Constructor Details

#initialize(relation, *options) ⇒ AssocResolver

Returns a new instance of AssocResolver.



7
8
9
10
# File 'lib/logical_query_parser/assoc_resolver.rb', line 7

def initialize(relation, *options)
  @relation = relation
  @options = options.flatten(1)
end

Instance Method Details

#callObject



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

def call
  root_node = AssocNode.new(klass: @relation.klass, table_name: @relation.table_name)
  resolve_assocs(@relation.klass, root_node, @options)

  join_relation = @relation.klass.unscoped.left_joins(root_node.join_structure)
  root_node.descendants.each_with_index do |node, i|
    join_source = join_relation.arel.join_sources[i]
    node.table_name = join_source&.left&.name || node.klass.table_name
  end

  root_node
end