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 4 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 8 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 17 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 30 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 59 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 36 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 49 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 43 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 55 def reflection @reflection ||= klass.reflect_on_association column.__name end