def self.included(base)
base.class_eval do
if defined?(class_attribute)
class_attribute :sphinx_indexes, :sphinx_facets
else
class_inheritable_array :sphinx_indexes, :sphinx_facets
end
extend ThinkingSphinx::ActiveRecord::ClassMethods
class << self
attr_accessor :sphinx_index_blocks, :sphinx_types
def set_sphinx_primary_key(attribute)
@sphinx_primary_key_attribute = attribute
end
def primary_key_for_sphinx
@primary_key_for_sphinx ||= begin
if custom_primary_key_for_sphinx?
@sphinx_primary_key_attribute ||
superclass.primary_key_for_sphinx
else
primary_key || 'id'
end
end
end
def custom_primary_key_for_sphinx?
(
superclass.respond_to?(:custom_primary_key_for_sphinx?) &&
superclass.custom_primary_key_for_sphinx?
) || !@sphinx_primary_key_attribute.nil?
end
def clear_primary_key_for_sphinx
@primary_key_for_sphinx = nil
end
def sphinx_index_options
sphinx_indexes.last.options
end
def set_sphinx_types(types)
@sphinx_types = types
end
def to_crc32
self.name.to_crc32
end
def to_crc32s
(descendants << self).collect { |klass| klass.to_crc32 }
end
def sphinx_database_adapter
ThinkingSphinx::AbstractAdapter.detect(self)
end
def sphinx_name
self.name.underscore.tr(':/\', '_')
end
private
def defined_indexes?
@defined_indexes
end
def defined_indexes=(value)
@defined_indexes = value
end
def sphinx_delta?
self.sphinx_indexes.any? { |index| index.delta? }
end
end
end
if ThinkingSphinx.rails_3_1?
assoc_mixin = ThinkingSphinx::ActiveRecord::CollectionProxy
::ActiveRecord::Associations::CollectionProxy.send(:include, assoc_mixin)
else
assoc_mixin = ThinkingSphinx::ActiveRecord::HasManyAssociation
::ActiveRecord::Associations::HasManyAssociation.send(:include, assoc_mixin)
::ActiveRecord::Associations::HasManyThroughAssociation.send(:include, assoc_mixin)
end
end