Module: Util

Defined in:
lib/mongomapper_search/util.rb

Class Method Summary collapse

Class Method Details

.keywords(klass, field, stem_keywords, ignore_list = []) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/mongomapper_search/util.rb', line 3

def self.keywords(klass, field, stem_keywords, ignore_list=[])
  if field.is_a?(Hash)
    field.keys.map do |key|
      attribute = klass.send(key)
      unless attribute.blank?
        method = field[key]
        if attribute.is_a?(Array)
          if method.is_a?(Array)
            method.map {|m| attribute.map { |a| Util.normalize_keywords a.send(m), stem_keywords, ignore_list } }
          else
            attribute.map(&method).map { |t| Util.normalize_keywords t, stem_keywords, ignore_list }
          end
        else
          Util.normalize_keywords(attribute.send(method), stem_keywords, ignore_list)
        end
      end
    end
  else
    value = klass[field]
    if value
      value = value.join(' ') if value.respond_to?(:join)
      Util.normalize_keywords(value, stem_keywords, ignore_list) if value
    else
      []
    end
  end
end

.normalize_keywords(text, stem_keywords, ignore_list = []) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/mongomapper_search/util.rb', line 31

def self.normalize_keywords(text, stem_keywords, ignore_list=[])
  return [] if text.blank?
  text = text.to_s
    .mb_chars
    .normalize(:kd)
    .to_s
    .gsub(/[._:;'"`,?|+={}()!@#%^&*<>~\$\-\\\/\[\]]/, ' ') # strip punctuation
    .gsub(/[^[:alnum:]\s]/,'')   # strip accents
    .downcase
    .split(' ')
    .reject { |word| word.size < 2 }
  text = text.reject { |word| ignore_list.include?(word) } unless ignore_list.blank?
  text = text.map(&:stem) if stem_keywords
  text
end