Class: XapianDb::Adapters::DatamapperAdapter
- Inherits:
-
BaseAdapter
- Object
- BaseAdapter
- XapianDb::Adapters::DatamapperAdapter
- Defined in:
- lib/xapian_db/adapters/datamapper_adapter.rb
Overview
Adapter for Datamapper. To use it, configure it like this:
XapianDb::Config.setup do |config|
config.adapter :datamapper
end
This adapter does the following:
-
adds the instance method
xapian_idto an indexed class -
adds the class method
rebuild_xapian_indexto an indexed class -
adds an after save block to an indexed class to update the index
-
adds an after destroy block to an indexed class to update the index
-
adds the instance method
indexed_objectto the module that will be included in every found xapian document
Class Method Summary collapse
-
.add_class_helper_methods_to(klass) ⇒ Object
Implement the class helper methods.
-
.add_doc_helper_methods_to(a_module) ⇒ Object
Implement the document helper methods on a module.
-
.primary_key_for(klass) ⇒ Symbol
return the name of the primary key column of a class.
Class Method Details
.add_class_helper_methods_to(klass) ⇒ Object
Implement the class helper methods
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 |
# File 'lib/xapian_db/adapters/datamapper_adapter.rb', line 33 def add_class_helper_methods_to(klass) # Add the helpers from the base class super klass klass.instance_eval do # define the method to retrieve a unique key define_method(:xapian_id) do "#{self.class}-#{self.id}" end def order_condition(primary_key) primary_key.to_sym end end klass.class_eval do # add the after save/destroy logic, unless the blueprint has autoindexing turned off if XapianDb::DocumentBlueprint.blueprint_for(klass.name).autoindex? after :save do blueprint = XapianDb::DocumentBlueprint.blueprint_for klass.to_s if blueprint.should_index?(self) XapianDb.index(self) else XapianDb.delete_doc_with(self.xapian_id) end end after :destroy do XapianDb.delete_doc_with(self.xapian_id) end end # Add a method to reindex all models of this class define_singleton_method(:rebuild_xapian_index) do |={}| [:primary_key] = klass.serial.name XapianDb.reindex_class(self, ) end end end |
.add_doc_helper_methods_to(a_module) ⇒ Object
Implement the document helper methods on a module
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/xapian_db/adapters/datamapper_adapter.rb', line 77 def add_doc_helper_methods_to(a_module) a_module.instance_eval do include XapianDb::Utilities # Implement access to the model id define_method :id do return @id unless @d.nil? # retrieve the class and id from data klass_name, id = data.split("-") @id = id.to_i end # Implement access to the indexed object define_method :indexed_object do return @indexed_object unless @indexed_object.nil? # retrieve the class and id from data klass_name, id = data.split("-") klass = constantize klass_name @indexed_object = klass.get(id.to_i) end end end |
.primary_key_for(klass) ⇒ Symbol
return the name of the primary key column of a class
27 28 29 |
# File 'lib/xapian_db/adapters/datamapper_adapter.rb', line 27 def primary_key_for(klass) klass.serial.name end |