mongoid_fulltext 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md CHANGED
@@ -217,6 +217,12 @@ Additional indexing/query options can be used as parameters to `fulltext_search_
217
217
  URL, for instance we might have "%C3%A9" which is how an "e-accute" ("é") gets passed
218
218
  through a web-browser. These are then changed to their UTF-8 equivalents (via the `CGI` gem)
219
219
  and then finally stripped, as before.
220
+ * `update_if`: controls whether or not the index will be updated. This can be set to a symbol,
221
+ string, or proc. If the result of evaluating the value is true, the index will be updated.
222
+ ** When set to a symbol, the symbol is sent to the document.
223
+ ** When set to a string, the string is evaluated within the document's instance.
224
+ ** When set to a proc, the proc is called, and the document is given to the proc as the first arg.
225
+ ** When set to any other type of object, the document's index will not be updated.
220
226
 
221
227
  Array filters
222
228
  -------------
@@ -267,6 +273,18 @@ method:
267
273
  The methods on the model level perform bulk removal operations and are therefore faster that
268
274
  updating or removing records individually.
269
275
 
276
+ If you need to control when the index is updated, provide the `update_if` option to
277
+ `fulltext_search_in`, and set it to a symbol, string, or proc. Eg:
278
+
279
+ # Only update the "age" index if the "age" field has changed.
280
+ fulltext_search_in :age, :update_if => :age_changed?
281
+
282
+ # Only update the "names" index if the "firstname" or "lastname" field has changed.
283
+ fulltext_search_in :names, :update_if => "firstname_changed? || lastname_changed?"
284
+
285
+ # Only update the "email" index if the "email" field ends with "gmail.com".
286
+ fulltext_search_in :email, :update_if => Proc.new { |doc| doc.email.match /gmail.com\Z/ }
287
+
270
288
  Mongo Database Indexes
271
289
  ----------------------
272
290
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.4
1
+ 0.4.5
@@ -235,6 +235,15 @@ module Mongoid::FullTextSearch
235
235
 
236
236
  def update_ngram_index
237
237
  self.mongoid_fulltext_config.each_pair do |index_name, fulltext_config|
238
+ if condition = fulltext_config[:update_if]
239
+ case condition
240
+ when Symbol; next unless self.send condition
241
+ when String; next unless instance_eval condition
242
+ when Proc; next unless condition.call self
243
+ else; next
244
+ end
245
+ end
246
+
238
247
  # remove existing ngrams from external index
239
248
  coll = collection.db.collection(index_name)
240
249
  coll.remove({'document_id' => self._id})
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoid_fulltext}
8
- s.version = "0.4.4"
8
+ s.version = "0.4.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Aaron Windsor"]
12
- s.date = %q{2011-08-31}
12
+ s.date = %q{2011-10-05}
13
13
  s.description = %q{Full-text search for the Mongoid ORM, using n-grams extracted from text}
14
14
  s.email = %q{aaron.windsor@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -429,6 +429,84 @@ module Mongoid
429
429
  let!(:flowers1) { BasicArtwork.create(:title => 'Flowers 1') }
430
430
  let!(:flowers2) { BasicArtwork.create(:title => 'Flowers 2') }
431
431
 
432
+ context "when config[:update_if] exists" do
433
+
434
+ let(:painting) { BasicArtwork.new :title => 'Painting' }
435
+ let(:conditional_index) { BasicArtwork.mongoid_fulltext_config["mongoid_fulltext.index_conditional"] }
436
+
437
+ before(:all) do
438
+ BasicArtwork.class_eval do
439
+ fulltext_search_in :title, :index_name => "mongoid_fulltext.index_conditional"
440
+ end
441
+ end
442
+
443
+ after(:all) do
444
+ Mongoid.master["mongoid_fulltext.index_conditional"].remove
445
+ BasicArtwork.mongoid_fulltext_config.delete "mongoid_fulltext.index_conditional"
446
+ end
447
+
448
+ context "and is a symbol" do
449
+
450
+ before(:all) do
451
+ conditional_index[:update_if] = :persisted?
452
+ end
453
+
454
+ context "when sending the symbol to the document evaluates to false" do
455
+
456
+ it "doesn't update the index for the document" do
457
+ painting.update_ngram_index
458
+ BasicArtwork.fulltext_search('painting', :index => "mongoid_fulltext.index_conditional").length.should be 0
459
+ end
460
+
461
+ end
462
+ end
463
+
464
+ context "and is a string" do
465
+
466
+ before(:all) do
467
+ conditional_index[:update_if] = 'false'
468
+ end
469
+
470
+ context "when evaluating the string within the document's instance evaluates to false" do
471
+
472
+ it "doesn't update the index for the document" do
473
+ painting.update_ngram_index
474
+ BasicArtwork.fulltext_search('painting', :index => "mongoid_fulltext.index_conditional").length.should be 0
475
+ end
476
+
477
+ end
478
+ end
479
+
480
+ context "and is a proc" do
481
+
482
+ before(:all) do
483
+ conditional_index[:update_if] = Proc.new { false }
484
+ end
485
+
486
+ context "when evaluating the string within the document's instance evaluates to false" do
487
+
488
+ it "doesn't update the index for the document" do
489
+ painting.update_ngram_index
490
+ BasicArtwork.fulltext_search('painting', :index => "mongoid_fulltext.index_conditional").length.should be 0
491
+ end
492
+
493
+ end
494
+ end
495
+
496
+ context "and is not a symbol, string, or proc" do
497
+
498
+ before(:all) do
499
+ conditional_index[:update_if] = %w(this isn't a symbol, string, or proc)
500
+ end
501
+
502
+ it "doesn't update the index for the document" do
503
+ painting.update_ngram_index
504
+ BasicArtwork.fulltext_search('painting', :index => "mongoid_fulltext.index_conditional").length.should be 0
505
+ end
506
+
507
+ end
508
+ end
509
+
432
510
  context "from scratch" do
433
511
 
434
512
  before(:each) do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_fulltext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-31 00:00:00.000000000 -04:00
12
+ date: 2011-10-05 00:00:00.000000000 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: unicode_utils
17
- requirement: &82521100 !ruby/object:Gem::Requirement
17
+ requirement: &83773400 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 1.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *82521100
25
+ version_requirements: *83773400
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: mongoid
28
- requirement: &82510440 !ruby/object:Gem::Requirement
28
+ requirement: &83773150 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 2.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *82510440
36
+ version_requirements: *83773150
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: bson_ext
39
- requirement: &82510030 !ruby/object:Gem::Requirement
39
+ requirement: &83772860 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.3.0
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *82510030
47
+ version_requirements: *83772860
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rspec
50
- requirement: &82509570 !ruby/object:Gem::Requirement
50
+ requirement: &83772590 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ~>
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: 2.5.0
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *82509570
58
+ version_requirements: *83772590
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: jeweler
61
- requirement: &82509170 !ruby/object:Gem::Requirement
61
+ requirement: &83772310 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ~>
@@ -66,7 +66,7 @@ dependencies:
66
66
  version: 1.5.2
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *82509170
69
+ version_requirements: *83772310
70
70
  description: Full-text search for the Mongoid ORM, using n-grams extracted from text
71
71
  email: aaron.windsor@gmail.com
72
72
  executables: []
@@ -118,7 +118,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
118
118
  version: '0'
119
119
  segments:
120
120
  - 0
121
- hash: 518227181
121
+ hash: 700135439
122
122
  required_rubygems_version: !ruby/object:Gem::Requirement
123
123
  none: false
124
124
  requirements: