redis_autocomplete 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.3
1
+ 0.1.4
@@ -26,6 +26,21 @@ class RedisAutocomplete
26
26
  def add_words(words, set_name = nil)
27
27
  words.flatten.compact.uniq.each { |word| add_word word, set_name }
28
28
  end
29
+
30
+ def remove_word(word, set_name = nil, remove_stems = true)
31
+ set_name ||= @set_name
32
+ @redis.zrem(set_name, "#{word}#{@terminal}")
33
+ # remove_word_stem is inefficient and is best done later on with a cron job
34
+ remove_word_stem(word, set_name) if remove_stems
35
+ end
36
+
37
+ def remove_word_stem(stem, set_name)
38
+ if suggest(stem, 1, set_name).empty?
39
+ @redis.zrem(set_name, stem)
40
+ remove_word_stem(stem[0...-1], set_name)
41
+ end
42
+ end
43
+ protected :remove_word_stem
29
44
 
30
45
  def suggest(prefix, count = 10, set_name = nil)
31
46
  set_name ||= @set_name
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{redis_autocomplete}
8
- s.version = "0.1.3"
8
+ s.version = "0.1.4"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Joe Johnston (simple10)", "Ben Woosley (Empact)", "Salvatore Sanfilippo (antirez)"]
@@ -78,6 +78,45 @@ describe RedisAutocomplete do
78
78
  end
79
79
  end
80
80
  end
81
+
82
+ describe "#remove_word" do
83
+ context "with default options" do
84
+ before do
85
+ @r.remove_word('Catherine')
86
+ end
87
+
88
+ it "should not include word after removing it" do
89
+ @r.suggest('Cath').should_not include('Catherine')
90
+ end
91
+
92
+ it "should remove unique word stems" do
93
+ @r.redis.zrank(@set, 'Catherine').should be_nil
94
+ @r.redis.zrank(@set, 'Catheri').should == nil
95
+ @r.redis.zrank(@set, 'Cather').should == nil
96
+ @r.redis.zrank(@set, 'Cathe').should == nil
97
+ @r.redis.zrank(@set, 'Cath').should_not == nil
98
+ end
99
+ end
100
+
101
+ context "when remove_stems is false" do
102
+ before do
103
+ @r.remove_word('Catherine', nil, false)
104
+ end
105
+
106
+ it "should not include word after removing it" do
107
+ @r.suggest('Cath').should_not include('Catherine')
108
+ end
109
+
110
+ it "should remove unique word stems" do
111
+ @r.redis.zrank(@set, 'Catherine+').should be_nil
112
+ @r.redis.zrank(@set, 'Catherine').should_not be_nil
113
+ @r.redis.zrank(@set, 'Catheri').should_not be_nil
114
+ @r.redis.zrank(@set, 'Cather').should_not be_nil
115
+ @r.redis.zrank(@set, 'Cathe').should_not be_nil
116
+ @r.redis.zrank(@set, 'Cath').should_not be_nil
117
+ end
118
+ end
119
+ end
81
120
  end
82
121
 
83
122
  context "with :case_sensitive => false" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: redis_autocomplete
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.1.3
5
+ version: 0.1.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Joe Johnston (simple10)
@@ -106,7 +106,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - ">="
108
108
  - !ruby/object:Gem::Version
109
- hash: -3325895771545261792
109
+ hash: -1638761389715983542
110
110
  segments:
111
111
  - 0
112
112
  version: "0"