xapian_db 0.5.6 → 0.5.7

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+ ##0.5.7 (March 7th, 2011)
2
+
3
+ Fixes:
4
+
5
+ - limit_value on the resultset is calculated again when the resultset is empty (thanks, Javi)
6
+ - added an order by id for rebuild_xapian_index to ensure that limit and offset work as expected
7
+
8
+ Features:
9
+
10
+ - option to specify a specific adapter for a blueprint overriding the global configuration
11
+
1
12
  ##0.5.6 (February 28th, 2011)
2
13
 
3
14
  Features:
@@ -18,7 +29,7 @@ Features:
18
29
  - configure only those environments in xapian_db.yml where you want to override the defaults
19
30
  - XapianDb.rebuild_xapian_index rebuilds the index for all blueprints
20
31
 
21
- ##0.5.4 (February 22th, 2011)
32
+ ##0.5.4 (February 22nd, 2011)
22
33
 
23
34
  Fixes:
24
35
 
@@ -54,6 +54,7 @@ module XapianDb
54
54
 
55
55
  # Add a method to reindex all models of this class
56
56
  define_singleton_method(:rebuild_xapian_index) do |options={}|
57
+ options[:primary_key] = klass.primary_key
57
58
  XapianDb::Config.writer.reindex_class(klass, options)
58
59
  end
59
60
  end
@@ -53,6 +53,7 @@ module XapianDb
53
53
 
54
54
  # Add a method to reindex all models of this class
55
55
  define_singleton_method(:rebuild_xapian_index) do |options={}|
56
+ options[:primary_key] = klass.serial.name
56
57
  XapianDb::Config.writer.reindex_class(self, options)
57
58
  end
58
59
  end
@@ -46,8 +46,8 @@ module XapianDb
46
46
  # @option options [Integer] :per_page How many docs per page?
47
47
  # @option options [Array<Integer>] :sort_indices (nil) An array of attribute indices to sort by. This
48
48
  # option is used internally by the search method implemented on configured classes. Do not use it
49
- # directly unless
50
- # you know what you do
49
+ # directly unless you know what you do
50
+ # @option options [Boolean] :sort_decending (false) Reverse the sort order?
51
51
  # @example Simple Query
52
52
  # resultset = db.search("foo")
53
53
  # @example Wildcard Query
@@ -76,7 +76,7 @@ module XapianDb
76
76
  raise ArgumentError.new("Sorting is available for class scoped searches only") unless expression =~ /^indexed_class:/
77
77
  sorter = Xapian::MultiValueSorter.new
78
78
 
79
- options[:sort_indices].each do |index|
79
+ sort_indices.each do |index|
80
80
  sorter.add(index, sort_decending)
81
81
  end
82
82
  enquiry.set_sort_by_key_then_relevance(sorter)
@@ -6,18 +6,12 @@ module XapianDb
6
6
  # for a given class.
7
7
  # @example A simple document blueprint configuration for the class Person
8
8
  # XapianDb::DocumentBlueprint.setup(Person) do |blueprint|
9
- # # Our Person class has a method lang_cd. We use this method to
10
- # # index each person with its language
11
- # blueprint.language_method :lang_cd
12
9
  # blueprint.attribute :name, :weight => 10
13
10
  # blueprint.attribute :first_name
14
11
  # blueprint.index :remarks
15
12
  # end
16
13
  # @example A document blueprint configuration with a complex attribute for the class Person
17
14
  # XapianDb::DocumentBlueprint.setup(Person) do |blueprint|
18
- # # Our Person class has a method lang_cd. We use this method to
19
- # # index each person with its language
20
- # blueprint.language_method :lang_cd
21
15
  # blueprint.attribute :complex, :weight => 10 do
22
16
  # # add some logic here to evaluate the value of 'complex'
23
17
  # end
@@ -40,8 +34,8 @@ module XapianDb
40
34
  blueprint = DocumentBlueprint.new
41
35
  yield blueprint if block_given? # configure the blueprint through the block
42
36
  @blueprints[klass] = blueprint
43
- @adapter = blueprint.adapter || XapianDb::Config.adapter || Adapters::GenericAdapter
44
- @adapter.add_class_helper_methods_to klass
37
+ @_adapter = blueprint._adapter || XapianDb::Config.adapter || Adapters::GenericAdapter
38
+ @_adapter.add_class_helper_methods_to klass
45
39
  @searchable_prefixes = nil # force rebuild of the searchable prefixes
46
40
  end
47
41
 
@@ -166,7 +160,7 @@ module XapianDb
166
160
  end
167
161
 
168
162
  # Let the adapter add its document helper methods (if any)
169
- adapter = @adapter || XapianDb::Config.adapter || XapianDb::Adapters::GenericAdapter
163
+ adapter = @_adapter || XapianDb::Config.adapter || XapianDb::Adapters::GenericAdapter
170
164
  adapter.add_doc_helper_methods_to(@accessors_module)
171
165
  @accessors_module
172
166
  end
@@ -175,14 +169,8 @@ module XapianDb
175
169
  # Blueprint DSL methods
176
170
  # ---------------------------------------------------------------------------------
177
171
 
178
- # The name of the method that returns an iso language code. The
179
- # configured class must implement this method.
180
- attr_reader :lang_method
181
-
182
- # Set / read a custom adapter.
183
- # Use this configuration option if you need a specific adapter for an indexed class.
184
- # If set, it overrides the globally configured adapter (see also {Config#adapter})
185
- attr_accessor :adapter
172
+ # An optional custom adapter
173
+ attr_accessor :_adapter
186
174
 
187
175
  # Construct the blueprint
188
176
  def initialize
@@ -190,6 +178,16 @@ module XapianDb
190
178
  @indexed_methods_hash = {}
191
179
  end
192
180
 
181
+ # Set the adapter
182
+ # @param [Symbol] type The adapter type; the following adapters are available:
183
+ # - :generic ({XapianDb::Adapters::GenericAdapter})
184
+ # - :active_record ({XapianDb::Adapters::ActiveRecordAdapter})
185
+ # - :datamapper ({XapianDb::Adapters::DatamapperAdapter})
186
+ def adapter(type)
187
+ # We try to guess the adapter name
188
+ @_adapter = XapianDb::Adapters.const_get("#{camelize(type.to_s)}Adapter")
189
+ end
190
+
193
191
  # Add an attribute to the blueprint. Attributes will be stored in the xapian documents an can be
194
192
  # accessed from a search result.
195
193
  # @param [String] name The name of the method that delivers the value for the attribute
@@ -296,6 +294,14 @@ module XapianDb
296
294
  @reserved_method_names ||= Xapian::Document.instance_methods
297
295
  @reserved_method_names.include?(attr_name.to_sym)
298
296
  end
297
+
298
+ private
299
+
300
+ # TODO: move this to a helper module
301
+ def camelize(string)
302
+ string.split(/[^a-z0-9]/i).map{|w| w.capitalize}.join
303
+ end
304
+
299
305
  end
300
306
 
301
307
  end
@@ -54,7 +54,7 @@ module XapianDb
54
54
  # Process the objects in batches to reduce the memory footprint
55
55
  nr_of_batches = (obj_count / 1000) + 1
56
56
  nr_of_batches.times do |batch|
57
- klass.all(:offset => batch * 1000, :limit => 1000) .each do |obj|
57
+ klass.all(:offset => batch * 1000, :limit => 1000, :order => options[:primary_key]).each do |obj|
58
58
  if blueprint.should_index? obj
59
59
  doc = indexer.build_document_for(obj)
60
60
  XapianDb.database.store_doc(doc)
@@ -95,6 +95,7 @@ module XapianDb
95
95
  @hits = 0
96
96
  @total_pages = 0
97
97
  @current_page = 0
98
+ @limit_value = 0
98
99
  self
99
100
  end
100
101
 
data/lib/xapian_db.rb CHANGED
@@ -92,7 +92,7 @@ module XapianDb
92
92
  configured_classes = XapianDb::DocumentBlueprint.configured_classes
93
93
  return false unless configured_classes.size > 0
94
94
  configured_classes.each do |klass|
95
- XapianDb::Config.writer.reindex_class(klass, options)
95
+ XapianDb::Config.writer.reindex_class(klass, options) if klass.respond_to?(:rebuild_xapian_index)
96
96
  end
97
97
  true
98
98
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: xapian_db
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.5.6
5
+ version: 0.5.7
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gernot Kogler
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-28 00:00:00 +01:00
13
+ date: 2011-03-07 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency