Module: Isuggest::InstanceMethods

Defined in:
lib/isuggest/finder.rb

Instance Method Summary collapse

Instance Method Details

#create_suggestion(base_value, num) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'lib/isuggest/finder.rb', line 64

def create_suggestion(base_value, num)
  if is_email?
    base_value = base_value.split('@')
    return "#{base_value.first}#{options[:seperator].sample}#{rand(num)}@#{base_value.last}"
    elsif @suffix.present?
      return "#{base_value}#{options[:seperator].sample}#{rand(num)}#{@suffix}"
  else
    return "#{base_value}#{options[:seperator].sample}#{rand(num)}"
  end
end

#filter_suggestions(me_suggests, num) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/isuggest/finder.rb', line 34

def filter_suggestions(me_suggests, num)
  column_name = isuggest_columns.first

  #Considering totol_results count is relatively small < 500, 
  #doubling it should reduce the DB hits
  while(me_suggests.length < (self.class.total_results * 2)) do 
   me_suggests << create_suggestion(self.send(column_name), num) 
   me_suggests.uniq!
  end

  db_set = self.class.where(["#{column_name} in (#{me_suggests.map{|item| '"'+item+'"'}.join(',')})"]).select(column_name).collect(&:"#{column_name}")
  
   results = (db_set.length == 0) ? me_suggests : (me_suggests - db_set)
   #return only the number of results set in configuration
   return ((results.length > self.class.total_results) ? results[0..(self.class.total_results - 1)] : results)
end

#is_email?Boolean

Returns:

  • (Boolean)


55
56
57
58
# File 'lib/isuggest/finder.rb', line 55

def is_email?
  regex = /([\w]+@[\w]+.[\w]+[.\w]*)/i
  self.send(isuggest_columns.first).match(regex).present?
end

#is_unique?Boolean

Returns:

  • (Boolean)


18
19
20
21
# File 'lib/isuggest/finder.rb', line 18

def is_unique?
  column_name = isuggest_columns.first.to_sym
  return !self.class.exists?(column_name => self.send(column_name))
end

#isuggest_columnsObject



51
52
53
# File 'lib/isuggest/finder.rb', line 51

def isuggest_columns
  return options[:on]
end

#optionsObject



60
61
62
# File 'lib/isuggest/finder.rb', line 60

def options
  self.class.isuggest_options
end

#suggestions(with_suffix = nil) ⇒ Object



23
24
25
26
27
28
29
30
31
32
# File 'lib/isuggest/finder.rb', line 23

def suggestions(with_suffix=nil)
  me_suggests = []
  radix = 10
    @suffix = with_suffix unless with_suffix.nil?
  while me_suggests.length < self.class.total_results
    me_suggests = filter_suggestions(me_suggests, radix)
    radix = radix * 10
  end
  return me_suggests
end