Module: Isuggest::InstanceMethods

Defined in:
lib/isuggest/finder.rb

Instance Method Summary collapse

Instance Method Details

#create_suggestion(base_value, num) ⇒ Object



62
63
64
65
66
67
68
69
# File 'lib/isuggest/finder.rb', line 62

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}"
	else
		return "#{base_value}#{options[:seperator].sample}#{rand(num)}"
	end
end

#filter_suggestions(me_suggests, num) ⇒ Object



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

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)


53
54
55
56
# File 'lib/isuggest/finder.rb', line 53

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

#is_unique?Boolean

Returns:

  • (Boolean)


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

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

#isuggest_columnsObject



49
50
51
# File 'lib/isuggest/finder.rb', line 49

def isuggest_columns
	return options[:on]
end

#optionsObject



58
59
60
# File 'lib/isuggest/finder.rb', line 58

def options
	self.class.isuggest_options
end

#suggestionsObject



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

def suggestions
	me_suggests = []
	radix = 10
	while me_suggests.length < self.class.total_results
		me_suggests = filter_suggestions(me_suggests, radix)
		radix = radix * 10
	end
	return me_suggests
end