class ThinkingSphinx::ActiveRecord::Polymorpher

Attributes

class_names[R]
column[R]
source[R]

Public Class Methods

new(source, column, class_names) click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 2
def initialize(source, column, class_names)
  @source, @column, @class_names = source, column, class_names
end

Public Instance Methods

morph!() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 6
def morph!
  append_reflections
  morph_properties
end

Private Instance Methods

append_reflections() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 15
def append_reflections
  mappings.each do |class_name, name|
    klass.reflections[name] ||= clone_with name, class_name
  end
end
clone_with(name, class_name) click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 21
def clone_with(name, class_name)
  ThinkingSphinx::ActiveRecord::FilteredReflection.clone_with_filter(
    reflection, name, class_name
  )
end
klass() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 50
def klass
  @klass ||= column.__stack.inject(source.model) { |parent, key|
    parent.reflections[key].klass
  }
end
mappings() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 27
def mappings
  @mappings ||= class_names.inject({}) do |hash, class_name|
    hash[class_name] = "#{column.__name}_#{class_name.downcase}".to_sym
    hash
  end
end
morph_properties() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 40
def morph_properties
  (source.fields + source.attributes).each do |property|
    property.rebase column.__path, :to => morphed_stacks
  end
end
morphed_stacks() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 34
def morphed_stacks
  @morphed_stacks ||= mappings.values.collect { |key|
    column.__stack + [key]
  }
end
reflection() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 46
def reflection
  @reflection ||= klass.reflections[column.__name]
end