Module: OssActiveRecord::Searchable::ClassMethods
- Defined in:
- lib/oss_active_record/searchable.rb
Constant Summary
collapse
- @@field_types =
[:integer, :text, :string, :time]
- @@index_instances =
{}
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
32
33
34
|
# File 'lib/oss_active_record/searchable.rb', line 32
def method_missing(method, *args, &block)
index_instance.add_field(args[0], method, block) if @@field_types.include? method
end
|
Instance Method Details
#find_results(search_result, field_id) ⇒ Object
42
43
44
45
46
47
48
49
50
51
52
|
# File 'lib/oss_active_record/searchable.rb', line 42
def find_results(search_result, field_id)
id_field_name = "#{field_id[:name]}|#{field_id[:type]}"
results = []
search_result['documents'].each do |document|
document['fields'].each do |field|
id = field['values'].map {|f|f.to_i}.uniq if field['fieldName'] == id_field_name
results<<find(id)[0] unless id.nil?
end
end
return results
end
|
#index_instance ⇒ Object
15
16
17
18
19
20
21
22
|
# File 'lib/oss_active_record/searchable.rb', line 15
def index_instance
idx_inst = @@index_instances[self.name.downcase]
if idx_inst.nil?
idx_inst = IndexInstance.new(self.name.downcase)
@@index_instances[self.name.downcase] = idx_inst
end
idx_inst
end
|
#reindex! ⇒ Object
24
25
26
27
28
29
30
|
# File 'lib/oss_active_record/searchable.rb', line 24
def reindex!
index_instance.oss_index.delete!
index_instance.create_schema!
self.all.find_in_batches do |group|
group.each { |doc| doc.index(index_instance) }
end
end
|
#search(*args, &block) ⇒ Object
36
37
38
39
40
|
# File 'lib/oss_active_record/searchable.rb', line 36
def search(*args, &block)
searchRequest = SearchRequest.new(index_instance)
searchRequest.returns index_instance.fields.map {|f|"#{f[:name]}|#{f[:type]}"}
find_results(searchRequest.execute(&block), index_instance.field_id)
end
|
#searchable(options = {}, &block) ⇒ Object
8
9
10
11
12
13
|
# File 'lib/oss_active_record/searchable.rb', line 8
def searchable(options = {}, &block)
yield
unless options[:auto_index] == false
after_save :index
end
end
|