Class: ActiveRecord::Relation

Inherits:
Object
  • Object
show all
Defined in:
lib/praxis/extensions/attribute_filtering/active_record_patches/5x.rb,
lib/praxis/extensions/attribute_filtering/active_record_patches/6_0.rb

Instance Method Summary collapse

Instance Method Details

#build_join_query(manager, buckets, join_type, aliases) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/praxis/extensions/attribute_filtering/active_record_patches/5x.rb', line 17

def build_join_query(manager, buckets, join_type, aliases)
  buckets.default = []

  association_joins = buckets[:association_join]
  stashed_joins     = buckets[:stashed_join]
  join_nodes        = buckets[:join_node].uniq
  string_joins      = buckets[:string_join].map(&:strip).uniq

  join_list = join_nodes + convert_join_strings_to_ast(string_joins)
  alias_tracker = alias_tracker(join_list, aliases)

  # Praxis: inject references into the join dependency
  join_dependency = ActiveRecord::Associations::JoinDependency.new(
    klass, table, association_joins, references: references_values
  )

  joins = join_dependency.join_constraints(stashed_joins, join_type, alias_tracker)
  joins.each { |join| manager.from(join) }

  manager.join_sources.concat(join_list)

  alias_tracker.aliases
end

#construct_join_dependency(associations, join_type) ⇒ Object

:nodoc:



8
9
10
11
12
13
14
# File 'lib/praxis/extensions/attribute_filtering/active_record_patches/6_0.rb', line 8

def construct_join_dependency
  including = eager_load_values + includes_values
  # Praxis: inject references into the join dependency
  ActiveRecord::Associations::JoinDependency.new(
    klass, table, including, references: references_values
  )
end