Module: ThinkingSphinx::ActiveRecord
- Defined in:
- lib/thinking_sphinx/active_record.rb,
lib/thinking_sphinx/active_record/delta.rb,
lib/thinking_sphinx/active_record/scopes.rb,
lib/thinking_sphinx/active_record/log_subscriber.rb,
lib/thinking_sphinx/active_record/attribute_updates.rb,
lib/thinking_sphinx/active_record/has_many_association.rb,
lib/thinking_sphinx/active_record/has_many_association_with_scopes.rb
Overview
Core additions to ActiveRecord models - define_index for creating indexes for models. If you want to interrogate the index objects created for the model, you can use the class-level accessor :sphinx_indexes.
Defined Under Namespace
Modules: AttributeUpdates, ClassMethods, Delta, HasManyAssociation, HasManyAssociationWithScopes, Scopes Classes: LogSubscriber
Instance Attribute Summary collapse
-
#excerpts ⇒ Object
Returns the value of attribute excerpts.
-
#matching_fields ⇒ Object
Returns the value of attribute matching_fields.
-
#sphinx_attributes ⇒ Object
Returns the value of attribute sphinx_attributes.
Class Method Summary collapse
Instance Method Summary collapse
- #in_index?(index) ⇒ Boolean
-
#primary_key_for_sphinx ⇒ Integer
Returns the unique integer id for the object.
- #sphinx_document_id ⇒ Object
- #toggle_deleted ⇒ Object
Instance Attribute Details
#excerpts ⇒ Object
Returns the value of attribute excerpts.
303 304 305 |
# File 'lib/thinking_sphinx/active_record.rb', line 303 def excerpts @excerpts end |
#matching_fields ⇒ Object
Returns the value of attribute matching_fields.
305 306 307 |
# File 'lib/thinking_sphinx/active_record.rb', line 305 def matching_fields @matching_fields end |
#sphinx_attributes ⇒ Object
Returns the value of attribute sphinx_attributes.
304 305 306 |
# File 'lib/thinking_sphinx/active_record.rb', line 304 def sphinx_attributes @sphinx_attributes end |
Class Method Details
.included(base) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/thinking_sphinx/active_record.rb', line 14 def self.included(base) base.class_eval do class_inheritable_array :sphinx_indexes, :sphinx_facets extend ThinkingSphinx::ActiveRecord::ClassMethods class << self attr_accessor :sphinx_index_blocks 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 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_indexes.last. end # Generate a unique CRC value for the model's name, to use to # determine which Sphinx documents belong to which AR records. # # Really only written for internal use - but hey, if it's useful to # you in some other way, awesome. # 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 ::ActiveRecord::Associations::HasManyAssociation.send( :include, ThinkingSphinx::ActiveRecord::HasManyAssociation ) ::ActiveRecord::Associations::HasManyThroughAssociation.send( :include, ThinkingSphinx::ActiveRecord::HasManyAssociation ) end |
Instance Method Details
#in_index?(index) ⇒ Boolean
307 308 309 310 311 |
# File 'lib/thinking_sphinx/active_record.rb', line 307 def in_index?(index) self.class.search_for_id self.sphinx_document_id, index rescue Riddle::ResponseError true end |
#primary_key_for_sphinx ⇒ Integer
Returns the unique integer id for the object. This method uses the attribute hash to get around ActiveRecord always mapping the #id method to whatever the real primary key is (which may be a unique string hash).
333 334 335 |
# File 'lib/thinking_sphinx/active_record.rb', line 333 def primary_key_for_sphinx read_attribute(self.class.primary_key_for_sphinx) end |
#sphinx_document_id ⇒ Object
337 338 339 340 |
# File 'lib/thinking_sphinx/active_record.rb', line 337 def sphinx_document_id primary_key_for_sphinx * ThinkingSphinx.context.indexed_models.size + self.class.sphinx_offset end |
#toggle_deleted ⇒ Object
313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/thinking_sphinx/active_record.rb', line 313 def toggle_deleted return unless ThinkingSphinx.updates_enabled? self.class.core_index_names.each do |index_name| self.class.delete_in_index index_name, self.sphinx_document_id end self.class.delta_index_names.each do |index_name| self.class.delete_in_index index_name, self.sphinx_document_id end if self.class.delta_indexed_by_sphinx? && toggled_delta? rescue ::ThinkingSphinx::ConnectionError # nothing end |