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