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/attribute_updates.rb,
lib/thinking_sphinx/active_record/has_many_association.rb more...
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, Scopes
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
permalink
.included(base) ⇒ Object
[View source]
12
13
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
|
# File 'lib/thinking_sphinx/active_record.rb', line 12
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
@sphinx_primary_key_attribute || primary_key
end
def sphinx_index_options
sphinx_indexes.last.options
end
def to_crc32
self.name.to_crc32
end
def to_crc32s
(subclasses << self).collect { |klass| klass.to_crc32 }
end
def sphinx_database_adapter
@sphinx_database_adapter ||=
ThinkingSphinx::AbstractAdapter.detect(self)
end
def sphinx_name
self.name.underscore.tr(':/\\', '_')
end
def reset_subclasses_with_thinking_sphinx
reset_subclasses_without_thinking_sphinx
ThinkingSphinx.reset_context!
end
alias_method_chain :reset_subclasses, :thinking_sphinx
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
permalink
#in_both_indexes? ⇒ Boolean
[View source]
337
338
339
|
# File 'lib/thinking_sphinx/active_record.rb', line 337
def in_both_indexes?
in_core_index? && in_delta_index?
end
|
permalink
#in_core_index? ⇒ Boolean
[View source]
329
330
331
|
# File 'lib/thinking_sphinx/active_record.rb', line 329
def in_core_index?
in_index? "core"
end
|
permalink
#in_delta_index? ⇒ Boolean
[View source]
333
334
335
|
# File 'lib/thinking_sphinx/active_record.rb', line 333
def in_delta_index?
in_index? "delta"
end
|
permalink
#in_index?(suffix) ⇒ Boolean
[View source]
325
326
327
|
# File 'lib/thinking_sphinx/active_record.rb', line 325
def in_index?(suffix)
self.class.search_for_id self.sphinx_document_id, sphinx_index_name(suffix)
end
|
permalink
#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).
[View source]
361
362
363
|
# File 'lib/thinking_sphinx/active_record.rb', line 361
def primary_key_for_sphinx
@primary_key_for_sphinx ||= read_attribute(self.class.primary_key_for_sphinx)
end
|
permalink
#sphinx_document_id ⇒ Object
[View source]
365
366
367
368
|
# File 'lib/thinking_sphinx/active_record.rb', line 365
def sphinx_document_id
primary_key_for_sphinx * ThinkingSphinx.context.indexed_models.size +
self.class.sphinx_offset
end
|
permalink
#toggle_deleted ⇒ Object
[View source]
341
342
343
344
345
346
347
348
349
350
351
352
353
|
# File 'lib/thinking_sphinx/active_record.rb', line 341
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
end
|