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 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.2
1
+ 0.1.3
@@ -7,32 +7,34 @@ class RedisAutocomplete
7
7
 
8
8
  attr_reader :redis, :terminal
9
9
 
10
- def initialize(set, opts = {})
11
- @set = set
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(@set, 0, w.slice(0, i)) }
22
- @redis.zadd(@set, 0, "#{w}#{@terminal}")
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(*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(@set, prefix)
34
+ start = @redis.zrank(set_name, prefix)
33
35
  return [] if !start
34
36
  while results.length != count
35
- range = @redis.zrange(@set, start, start+rangelen-1)
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|
@@ -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.2"
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.2
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: 1956628192009044186
109
+ hash: -3325895771545261792
110
110
  segments:
111
111
  - 0
112
112
  version: "0"