Class: UsernameSuggester::Suggester
- Inherits:
-
Object
- Object
- UsernameSuggester::Suggester
- Defined in:
- lib/username_suggester/suggester.rb
Instance Attribute Summary collapse
-
#first_name ⇒ Object
readonly
Returns the value of attribute first_name.
-
#last_name ⇒ Object
readonly
Returns the value of attribute last_name.
Instance Method Summary collapse
-
#initialize(first_name, last_name, options = {}) ⇒ Suggester
constructor
Creates a UsernameSuggester to suggest usernames.
-
#name_combinations ⇒ Object
Generates the combinations without the knowledge of what names are available.
-
#suggest(max_num_suggestion, unavailable_suggestions = []) ⇒ Object
Generates suggestions and making sure they are not in unavailable_suggestions.
Constructor Details
#initialize(first_name, last_name, options = {}) ⇒ Suggester
Creates a UsernameSuggester to suggest usernames
Parameters
-
:first_name
- Required. -
:last_name
- Required. -
:options
- There is one option – :validate. You can pass in a Proc object and the suggestion will be returned if involving the Proc with the suggestion returns true
17 18 19 20 21 |
# File 'lib/username_suggester/suggester.rb', line 17 def initialize(first_name, last_name, = {}) @first_name = (first_name || "").downcase @last_name = (last_name || "").downcase @options = end |
Instance Attribute Details
#first_name ⇒ Object (readonly)
Returns the value of attribute first_name.
5 6 7 |
# File 'lib/username_suggester/suggester.rb', line 5 def first_name @first_name end |
#last_name ⇒ Object (readonly)
Returns the value of attribute last_name.
6 7 8 |
# File 'lib/username_suggester/suggester.rb', line 6 def last_name @last_name end |
Instance Method Details
#name_combinations ⇒ Object
Generates the combinations without the knowledge of what names are available
24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/username_suggester/suggester.rb', line 24 def name_combinations @name_combinations ||= [ "#{@first_name}", "#{@last_name}", "#{@first_name.first}#{@last_name}", "#{@first_name}#{@last_name.first}", "#{@first_name}#{@last_name}", "#{@last_name.first}#{@first_name}", "#{@last_name}#{@first_name.first}", "#{@last_name}#{@first_name}" ].uniq.reject { |s| s.blank? } end |
#suggest(max_num_suggestion, unavailable_suggestions = []) ⇒ Object
Generates suggestions and making sure they are not in unavailable_suggestions
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/username_suggester/suggester.rb', line 38 def suggest(max_num_suggestion, unavailable_suggestions = []) unavailable_set = unavailable_suggestions.to_set results = [] candidates = name_combinations.clone while results.size < max_num_suggestion and !candidates.blank? candidate = candidates.shift if @options[:validate] and !@options[:validate].call(candidate) # Don't add the candidate to result elsif unavailable_set.include? candidate candidates << find_extended_candidate(candidate, unavailable_set) else results << candidate end end results end |