| Class | String |
| In: |
lib/efaber.rb
|
| Parent: | Object |
# File lib/efaber.rb, line 44
44: def prepare_for_query
45: # Esta la usamos allá donde los selects vayan a ser con "like 'xxx%'",
46: # y por lo tanto, no queremos quitar ni los signos de puntuacion ni las
47: # palabras comunes
48: palabra = self
49:
50: # Primero quitamos las tildes
51: search_string = palabra.tildes
52:
53: # Sustituimos muchos espacios por uno solo
54: search_string = search_string.gsub(/[[:space:]]+/, " ")
55: # Quitamos los espacios al principio y el final
56: search_string = search_string.strip
57: search_string = search_string.downcase
58: end
Convert non-ASCII characters to their ASCII equivalent. (from www.bigbold.com/snippets/posts/show/1818)
# File lib/efaber.rb, line 5
5: def tildes
6: foo = self.dup
7: foo.gsub!(/[ĄÀÁÂÃ]/,'A')
8: foo.gsub!(/[âäàãáäåāăǎǟǡǻȁȃȧẵặ]/,'a')
9: foo.gsub!(/[ÉĘÈ]/, 'E')
10: foo.gsub!(/[ëêéèẽēĕėẻȅȇẹȩęḙḛềếễểḕḗệḝ]/,'e')
11: foo.gsub!(/[ÌÍÎĨÏ]/, 'I')
12: foo.gsub!(/[iìíîĩīĭïỉǐịįȉȋḭɨḯ]/,'i')
13: foo.gsub!(/[ÒÓÔÕÖ]/, 'O')
14: foo.gsub!(/[òóôõōŏȯöỏőǒȍȏơǫọɵøồốỗổȱȫȭṍṏṑṓờớỡởợǭộǿ]/,'o')
15: foo.gsub!(/[ÙÚÛŨÜ]/, 'U')
16: foo.gsub!(/[ùúûũūŭüủůűǔȕȗưụṳųṷṵṹṻǖǜǘǖǚừứữửự]/,'u')
17: foo.gsub!(/[ỳýŷỹȳẏÿỷẙƴỵ]/,'y')
18: foo.gsub!(/[œ]/,'oe')
19: foo.gsub!(/[ÆǼǢæ]/,'ae')
20: foo.gsub!(/[ñǹńŃÑ]/,'n')
21: foo.gsub!(/[ÇĆ]/, 'C')
22: foo.gsub!(/[çć]/,'c')
23: foo.gsub!(/[ß]/,'ss')
24: foo.gsub!(/[œ]/,'oe')
25: foo.gsub!(/[ij]/,'ij')
26: foo.gsub!(/[Łł]/,'l')
27: foo.gsub!(/[śŚ]/,'s')
28: foo.gsub!(/ŹŻ/, 'Z')
29: foo.gsub!(/[źż]/,'z')
30: foo
31: end
# File lib/efaber.rb, line 60
60: def to_ferret_search_string
61: unwanted_words_list = %w{con del las los para por que una}
62:
63: query_string = self
64:
65: # cambiar muchos espacios por uno y mantener juntas las palabras entre comillas,
66: search_string = query_string.prepare_for_query.gsub(/("[^"]+")/) { $1.gsub(/\s+/,'@') }
67:
68: # quitar palabras comunes y palabras de 1 o 2 letras salvo para las frases entre comillas
69: search_words = search_string.split(" ").map do |w|
70: w.gsub!(/[[:punct:]]/, "") unless w.match(/^["]/)
71: w if (w.length > 2) && !unwanted_words_list.include?(w)
72: end.compact
73:
74: # If any of the words ends in "s", assume it is plural
75: # and search also the singular form
76: search_words.each do |w|
77: search_words << w[0..-2] if w.match(/s$/)
78: end
79:
80: search_string = search_words.length > 1 ? "(" + search_words.compact.join(" OR ") + ")" : search_words.to_s
81:
82: # volver a poner los espacios en los textos entre comillas.
83: search_string = search_string.gsub(/@/,' ')
84:
85: search_string
86: end