Module: OssActiveRecord::Searchable::ClassMethods

Defined in:
lib/oss_active_record/searchable.rb

Constant Summary collapse

@@field_types =

supported 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_instanceObject



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