Guest User

Untitled

a guest
Apr 23rd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.81 KB | None | 0 0
  1. module Searchable
  2. def self.included(model)
  3. model.send(:extend, ClassMethods)
  4. model.class_eval do
  5. class_inheritable_accessor(:search_indexes)
  6. self.search_indexes = []
  7. end
  8. end
  9.  
  10. module ClassMethods
  11. def search(query, options = {})
  12. conds = search_indexes.map{|idx| "#{idx}_search_index @@ plainto_tsquery(?)" }
  13. conds_array = [conds.join(" OR ")]
  14. search_indexes.size.times{ conds_array << escape_string(query) }
  15. all(options.merge(:conditions => conds_array))
  16. end
  17.  
  18. private
  19.  
  20. def escape_string(str)
  21. str.gsub(/([\0\n\r\032\'\"\\])/) do
  22. case $1
  23. when "\0" then "\\0"
  24. when "\n" then "\\n"
  25. when "\r" then "\\r"
  26. when "\032" then "\\Z"
  27. when "'" then "''"
  28. else "\\"+$1
  29. end
  30. end
  31. end
  32. end
  33. end
Add Comment
Please, Sign In to add comment