redis_autocomplete 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +1 -1
- data/VERSION +1 -1
- data/lib/redis_autocomplete.rb +12 -10
- data/redis_autocomplete.gemspec +1 -1
- data/spec/redis_autocomplete_spec.rb +2 -2
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -12,7 +12,7 @@ RedisAutocomplete was written and maintained by simple10[http://github.com/simpl
|
|
12
12
|
== Usage
|
13
13
|
|
14
14
|
# initialize with the name of the redis set you want to use
|
15
|
-
r = RedisAutocomplete.new(:tags)
|
15
|
+
r = RedisAutocomplete.new(:set_name => :tags)
|
16
16
|
r.add_words(%w[developer, designer, dude, architect, baker, banker])
|
17
17
|
r.suggest('de')
|
18
18
|
# ['developer', 'designer']
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.3
|
data/lib/redis_autocomplete.rb
CHANGED
@@ -7,32 +7,34 @@ class RedisAutocomplete
|
|
7
7
|
|
8
8
|
attr_reader :redis, :terminal
|
9
9
|
|
10
|
-
def initialize(
|
11
|
-
@
|
10
|
+
def initialize(opts = {})
|
11
|
+
@set_name = opts[:set_name] # optional
|
12
12
|
@redis = Redis.new
|
13
13
|
@disallowed_chars = opts[:disallowed_chars] || DEFAULT_DISALLOWED_CHARS
|
14
14
|
@terminal = opts[:terminal] || DEFAULT_TERMINAL
|
15
15
|
@case_sensitive = opts[:case_sensitive].nil? ? DEFAULT_CASE_SENSITIVITY : opts[:case_sensitive]
|
16
16
|
end
|
17
17
|
|
18
|
-
def add_word(word)
|
18
|
+
def add_word(word, set_name = nil)
|
19
|
+
set_name ||= @set_name
|
19
20
|
w = word.gsub(@disallowed_chars, '')
|
20
21
|
w.downcase! if !@case_sensitive
|
21
|
-
(1..(w.length)).each { |i| @redis.zadd(
|
22
|
-
@redis.zadd(
|
22
|
+
(1..(w.length)).each { |i| @redis.zadd(set_name, 0, w.slice(0, i)) }
|
23
|
+
@redis.zadd(set_name, 0, "#{w}#{@terminal}")
|
23
24
|
end
|
24
25
|
|
25
|
-
def add_words(
|
26
|
-
words.flatten.compact.uniq.each { |word| add_word word }
|
26
|
+
def add_words(words, set_name = nil)
|
27
|
+
words.flatten.compact.uniq.each { |word| add_word word, set_name }
|
27
28
|
end
|
28
29
|
|
29
|
-
def suggest(prefix, count = 10)
|
30
|
+
def suggest(prefix, count = 10, set_name = nil)
|
31
|
+
set_name ||= @set_name
|
30
32
|
results = []
|
31
33
|
rangelen = 50 # This is not random, try to get replies < MTU size
|
32
|
-
start = @redis.zrank(
|
34
|
+
start = @redis.zrank(set_name, prefix)
|
33
35
|
return [] if !start
|
34
36
|
while results.length != count
|
35
|
-
range = @redis.zrange(
|
37
|
+
range = @redis.zrange(set_name, start, start+rangelen-1)
|
36
38
|
start += rangelen
|
37
39
|
break if !range || range.length == 0
|
38
40
|
range.each do |entry|
|
data/redis_autocomplete.gemspec
CHANGED
@@ -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.
|
8
|
+
s.version = "0.1.3"
|
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)"]
|
@@ -38,7 +38,7 @@ describe RedisAutocomplete do
|
|
38
38
|
|
39
39
|
context "with default case sensitivity" do
|
40
40
|
before do
|
41
|
-
@r = RedisAutocomplete.new(@set)
|
41
|
+
@r = RedisAutocomplete.new(:set_name => @set)
|
42
42
|
@r.redis.zremrangebyscore(@set, 0, 0)
|
43
43
|
@r.add_words(@names)
|
44
44
|
end
|
@@ -82,7 +82,7 @@ describe RedisAutocomplete do
|
|
82
82
|
|
83
83
|
context "with :case_sensitive => false" do
|
84
84
|
before do
|
85
|
-
@r = RedisAutocomplete.new(@set, :case_sensitive => false)
|
85
|
+
@r = RedisAutocomplete.new(:set_name => @set, :case_sensitive => false)
|
86
86
|
@r.redis.zremrangebyscore(@set, 0, 0)
|
87
87
|
@r.add_words(@names)
|
88
88
|
end
|
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.
|
5
|
+
version: 0.1.3
|
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:
|
109
|
+
hash: -3325895771545261792
|
110
110
|
segments:
|
111
111
|
- 0
|
112
112
|
version: "0"
|