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
|
# File 'lib/xapor/model_integration.rb', line 14
def xapor
class << self
attr_accessor :xapor_config
attr_accessor :xapor_db
end
include XapianFu
def self.search(query)
xapor_db.search(query)
end
def self.reset_index
if self.xapor_db
self.xapor_db.flush
self.xapor_db.ro.close
self.xapor_db.rw.close
end
self.xapor_db = ::XapianFu::XapianDb.new(self.xapor_config.xapian_fu_db.merge(:overwrite => true))
if block_given?
yield self.xapor_db
end
end
self.xapor_config = Xapor::Config.new
if block_given?
yield self.xapor_config
end
self.xapor_db = ::XapianFu::XapianDb.new(self.xapor_config.xapian_fu_db.merge(:create => true))
eigenclass = class << self
self
end
self.xapor_config.search_fields.each do |field|
eigenclass.send(:define_method, :"search_by_#{field}") do |query|
self.search(query)
end
end
if defined? ActiveRecord && ancestors.includes(ActiveRecord::Base)
after_save :add_to_index
after_destroy :remove_from_index
all.each {|o| o.add_to_index} unless self.xapor_config.directory_config
end
end
|