class Joiner::Joins
Attributes
joins_cache[R]
model[R]
Public Class Methods
new(model)
click to toggle source
# File lib/joiner/joins.rb, line 7 def initialize(model) @model = model @joins_cache = Set.new end
Public Instance Methods
add_join_to(path)
click to toggle source
# File lib/joiner/joins.rb, line 12 def add_join_to(path) return if path.empty? joins_cache.add path_as_hash(path) end
alias_for(path)
click to toggle source
# File lib/joiner/joins.rb, line 18 def alias_for(path) return model.table_name if path.empty? add_join_to path association_for(path).tables.first.name end
join_values()
click to toggle source
# File lib/joiner/joins.rb, line 25 def join_values if Joiner::JoinDependency.instance_method(:initialize).arity == 3 # ActiveRecord 5.2.1+ Joiner::JoinDependency.new model, table, joins_cache.to_a else # ActiveRecord 5.2.0 Joiner::JoinDependency.new model, table, joins_cache.to_a, alias_tracker end end
Private Instance Methods
alias_tracker()
click to toggle source
# File lib/joiner/joins.rb, line 39 def alias_tracker ActiveRecord::Associations::AliasTracker.create( model.connection, table.name, [] ) end
association_for(path)
click to toggle source
# File lib/joiner/joins.rb, line 45 def association_for(path) if Joiner::JoinDependency.instance_method(:initialize).arity == 3 # ActiveRecord 5.2.1+ join_values.join_association_for path, alias_tracker else # ActiveRecord 5.2.0 join_values.join_association_for path end end
path_as_hash(path)
click to toggle source
# File lib/joiner/joins.rb, line 55 def path_as_hash(path) path[0..-2].reverse.inject(path.last) { |key, item| {item => key} } end
table()
click to toggle source
# File lib/joiner/joins.rb, line 59 def table @table ||= model.arel_table end