username_suggester 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -19,18 +19,20 @@ module UsernameSuggester
19
19
  # <tt>:last_name_attribute</tt>:: The attribute which stores the last name. Default is <tt>:last_name</tt>
20
20
  # <tt>:num_suggestions</tt>:: Maximum suggestions generated. Default is <tt>10</tt>
21
21
  # <tt>:validate</tt>: An Proc object which takes in an username and return true if this is an validate username
22
+ # <tt>:exclusion</tt>: An array of strings that should not be suggested
22
23
  #
23
24
  def suggestions_for(attribute = :username, options = {})
24
25
  first_name_attribute = options[:first_name_attribute] || :first_name
25
26
  last_name_attribute = options[:last_name_attribute] || :last_name
26
27
  num_suggestions = options[:num_suggestions] || 10
28
+ exclusion = options[:exclusion] || []
27
29
 
28
30
  send :define_method, "#{attribute}_suggestions".to_sym do
29
31
  suggester = Suggester.new(send(first_name_attribute), send(last_name_attribute), options)
30
32
  name_combinations_with_regex = suggester.name_combinations.map { |s| "^#{s}[0-9]*$" }
31
33
  sql_conditions = Array.new(name_combinations_with_regex.size, "#{attribute} RLIKE ?").join(" OR ")
32
- unavailable_choices = self.class.all(:select => attribute,
33
- :conditions => [sql_conditions].concat(name_combinations_with_regex)).map{ |c| c.send(attribute) }
34
+ unavailable_choices = exclusion.concat(self.class.all(:select => attribute,
35
+ :conditions => [sql_conditions].concat(name_combinations_with_regex)).map{ |c| c.send(attribute) })
34
36
  suggester.suggest(num_suggestions, unavailable_choices)
35
37
  end
36
38
  end
@@ -2,7 +2,7 @@ require File.dirname(__FILE__) + '/spec_helper'
2
2
 
3
3
  class User < ActiveRecord::Base
4
4
  attr_accessible :first_name, :last_name, :username
5
- suggestions_for :username
5
+ suggestions_for :username, :exclusion => ['luk']
6
6
  end
7
7
 
8
8
  describe UsernameSuggester::UsernameSuggestions do
@@ -28,4 +28,13 @@ describe UsernameSuggester::UsernameSuggestions do
28
28
  suggestions.should_not include "jerry"
29
29
  suggestions.should include "jerry11"
30
30
  end
31
+
32
+ it "should not suggest usernames in the exclusion list" do
33
+ UsernameSuggester::Suggester.send(:define_method, :rand) { 1 }
34
+
35
+ suggestions = @user.username_suggestions
36
+ suggestions.should_not be_blank
37
+ suggestions.should_not include "luk"
38
+ end
39
+
31
40
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{username_suggester}
3
- s.version = "0.2.1"
3
+ s.version = "0.2.2"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["jerryluk"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: username_suggester
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 19
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - jerryluk