Skip to content

Commit

Permalink
Added functionality to find and count by keywords. No tests for this …
Browse files Browse the repository at this point in the history
…currently.

git-svn-id: svn+ssh://rubyforge.org/var/svn/arext/trunk@13 5128a5ed-121c-0410-8d5c-98af306bc9be
  • Loading branch information
zachdennis committed Oct 2, 2006
1 parent 2159f4c commit 8b3eedd
Showing 1 changed file with 30 additions and 5 deletions.
35 changes: 30 additions & 5 deletions acts_as_keyword/lib/acts_as_keyword.rb
Expand Up @@ -10,19 +10,44 @@ def acts_as_keyword( options )
@@acts_as_keyword[ :fields ] = options[ :fields ]
end

def find_by_keyword( keyword, options={} )
conditions,str = [], nil

def build_keyword_conditions( keyword )
conditions, str = [], nil
qk = connection.quote( keyword )
quoted_keyword = qk[0..0] + '%' + qk[1..-2] + '%' + qk[-1..-1]
@@acts_as_keyword[:fields].each { |field|
str = "#{field} LIKE #{quoted_keyword}"
str = "#{self.table_name}.#{field} LIKE #{quoted_keyword}"
conditions << str }
conditions.join( ' OR ' )
end

def count_by_keyword( keyword, options={} )
conditions = build_keyword_conditions( keyword )
STDERR.puts __LINE__,options.inspect
merge_finder_conditions_with_keyword_conditions( conditions, options )
STDERR.puts __LINE__,options.inspect
self.count( options )
end

options[:conditions] = conditions.join( ' OR ' )
def find_by_keyword( keyword, options={} )
conditions = build_keyword_conditions( keyword )
merge_finder_conditions_with_keyword_conditions( conditions, options )
self.find( :all, options )
end

def merge_finder_conditions_with_keyword_conditions( conditions, options )
options[:conditions] = nil unless options.has_key?( :conditions )
case options[:conditions].class
when String
options[:conditions] << " #{conditions}"
when Array
options[:conditions][0] << " #{conditions}"
when Hash
options[:conditions] = [ conditions, options[:conditions] ]
else
options[:conditions] = conditions
end
end

end

ActiveRecord::Base.extend( ActsAsKeyword::ClassMethods )
Expand Down

0 comments on commit 8b3eedd

Please sign in to comment.