Module: OssActiveRecord::Searchable::ClassMethods
- Defined in:
- lib/oss_active_record/searchable.rb
Constant Summary
collapse
- @@oss_field_types =
[:integer, :text, :string, :time, :suggestion]
- @@oss_mutex =
Mutex.new
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
34
35
36
37
|
# File 'lib/oss_active_record/searchable.rb', line 34
def method_missing(method, *args, &block)
return index_instance.add_field(args[0], method, block) if @@oss_field_types.include? method
super
end
|
Instance Method Details
#find_results(search_result, field_id, options) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
# File 'lib/oss_active_record/searchable.rb', line 47
def find_results(search_result, field_id, options)
id_field_name = "#{field_id[:name]}|#{field_id[:type]}"
ids = search_result['documents'].map do |document|
field = document['fields'].find { |f| f['fieldName'] == id_field_name }
field['values'].compact.first
end.compact
query = if options[:include]
unscoped.includes(options[:include])
else
unscoped
end
records = query.find(ids)
ids.map do |id|
records.find { |record| record.id == id.to_i }
end
end
|
#index_instance ⇒ Object
22
23
24
25
26
|
# File 'lib/oss_active_record/searchable.rb', line 22
def index_instance
@@oss_mutex.synchronize do
@index_instance ||= IndexInstance.new(self.name.downcase)
end
end
|
#oss_search(*args, &block) ⇒ Object
Also known as:
search
39
40
41
42
43
44
|
# File 'lib/oss_active_record/searchable.rb', line 39
def oss_search(*args, &block)
options = args.
search_request = SearchRequest.new(index_instance)
search_request.returns index_instance.fields.map { |f| "#{f[:name]}|#{f[:type]}" }
find_results(search_request.execute(&block), index_instance.field_id, options)
end
|
#reindex! ⇒ Object
28
29
30
31
32
|
# File 'lib/oss_active_record/searchable.rb', line 28
def reindex!
index_instance.oss_index.delete!
index_instance.create_schema!
self.all.find_in_batches { |group| group.each(&:index) }
end
|
#searchable(options = {}, &block) ⇒ Object
15
16
17
18
19
20
|
# File 'lib/oss_active_record/searchable.rb', line 15
def searchable(options = {}, &block)
yield
unless options[:auto_index] == false
after_commit :index
end
end
|