class ThinkingSphinx::Join

Attributes

associations[RW]
column[RW]
source[RW]

Public Class Methods

new(source, column) click to toggle source
# File lib/thinking_sphinx/join.rb, line 5
def initialize(source, column)
  @source = source
  @column = column
  
  @associations = association_stack(column.__path.clone).each { |assoc|
    assoc.join_to(source.base)
  }
  
  source.joins << self
end

Private Instance Methods

association_stack(path, parent = nil) click to toggle source

Gets a stack of associations for a specific path.

# File lib/thinking_sphinx/join.rb, line 20
def association_stack(path, parent = nil)
  assocs = []
  
  if parent.nil?
    assocs = @source.association(path.shift)
  else
    assocs = parent.children(path.shift)
  end
  
  until path.empty?
    point  = path.shift
    assocs = assocs.collect { |assoc| assoc.children(point) }.flatten
  end
  
  assocs
end