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|
    next if klass.reflect_on_association(name)

    reflection = clone_with name, class_name
    if ActiveRecord::Reflection.respond_to?(:add_reflection)
      ActiveRecord::Reflection.add_reflection klass, name, reflection
    else
      klass.reflections[name] = reflection
    end
  end
end
clone_with(name, class_name) click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 28
def clone_with(name, class_name)
  ThinkingSphinx::ActiveRecord::FilterReflection.call(
    reflection, name, class_name
  )
end
klass() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 57
def klass
  @klass ||= column.__stack.inject(source.model) { |parent, key|
    parent.reflect_on_association(key).klass
  }
end
mappings() click to toggle source
# File lib/thinking_sphinx/active_record/polymorpher.rb, line 34
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 47
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 41
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 53
def reflection
  @reflection ||= klass.reflect_on_association column.__name
end